Update to close to the latest upstream.

OBS-URL: https://build.opensuse.org/package/show/Base:System/targetcli-fb?expand=0&rev=30
This commit is contained in:
Lee Duncan 2019-08-19 15:35:35 +00:00 committed by Git OBS Bridge
parent 28aaa7cf95
commit 0de3ab60e2
7 changed files with 297 additions and 1 deletions

View File

@ -0,0 +1,28 @@
From: David Disseldorp <ddiss@suse.de>
Date: Tue, 15 Jan 2019 12:04:49 +0100
Subject: Add emulate_pr backstore attribute
Git-commit: fa71860b0d819a691683c1fdcb70c255653b5851
Added to the kernel via b49d6f7885306ee636d5c1af52170f3069ccf5f7, the
emulate_pr attribute can be used to disable support for SCSI-2
(RESERVE/RELEASE) and Persistent Reservations.
Signed-off-by: David Disseldorp <ddiss@suse.de>
Acked-by: Lee Duncan <lduncan@suse.com>
---
targetcli/ui_backstore.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/targetcli/ui_backstore.py b/targetcli/ui_backstore.py
index efa532f17034..cc2cf2bb220b 100644
--- a/targetcli/ui_backstore.py
+++ b/targetcli/ui_backstore.py
@@ -670,6 +670,7 @@ class UIStorageObject(UIRTSLibNode):
'emulate_tpws': ('number', 'If set to 1, enable Thin Provisioning Write Same.'),
'emulate_ua_intlck_ctrl': ('number', 'If set to 1, enable Unit Attention Interlock.'),
'emulate_write_cache': ('number', 'If set to 1, turn on Write Cache Enable.'),
+ 'emulate_pr': ('number', 'If set to 1, enable SCSI Reservations.'),
'enforce_pr_isids': ('number', 'If set to 1, enforce persistent reservation ISIDs.'),
'force_pr_aptpl': ('number', 'If set to 1, force SPC-3 PR Activate Persistence across Target Power Loss operation.'),
'fabric_max_sectors': ('number', 'Maximum number of sectors the fabric can transfer at once.'),

View File

@ -0,0 +1,31 @@
From: Christophe Vu-Brugier <cvubrugier@fastmail.fm>
Date: Sat, 11 May 2019 15:15:16 +0200
Subject: Do not remove the first digit when auto-completing the TPG tag
Git-commit: 311ae0fc49174316c991dd3800c12549632e2c64
Instead of removing the first three characters of the "tpg" prefix to
get matches for the TPG tag number, the code removes four characters,
thus erasing the first digit of the TPG tag number.
This patches fixes issue #134.
Signed-off-by: Christophe Vu-Brugier <cvubrugier@fastmail.fm>
Acked-by: Lee Duncan <lduncan@suse.com>
---
targetcli/ui_target.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/targetcli/ui_target.py b/targetcli/ui_target.py
index 6895b38e62b8..0c3fe1b708db 100644
--- a/targetcli/ui_target.py
+++ b/targetcli/ui_target.py
@@ -384,7 +384,7 @@ class UIMultiTPGTarget(UIRTSLibNode):
@rtype: list of str
'''
if current_param == 'tag':
- tags = [child.name[4:] for child in self.children]
+ tags = [child.name[3:] for child in self.children]
completions = [tag for tag in tags if tag.startswith(text)]
else:
completions = []

View File

@ -0,0 +1,78 @@
From: Lee Duncan <lduncan@suse.com>
Date: Thu, 15 Aug 2019 08:38:35 -0700
Subject: iscsi discovery_auth enable is a number not a string
Git-commit: dc8d9d83cef8489f3b6aec1609299cdba70eda34
The discovery_auth attribute group in the /iscsi node
has several attributes, and all area treated like strings,
even though "enable" is a number in sysfs, accepting either
zero or one. It would break backwards compatability to
convert this attribute to be a boolean, so at least
treat it like a proper number instead of a string.
This avoids stack dumps like the following when trying
to set this attribute to 'true' or 'false':
> /iscsi> set discovery_auth enable=false
> Traceback (most recent call last):
> File "/usr/bin/targetcli", line 122, in <module>
> main()
> File "/usr/bin/targetcli", line 112, in main
> shell.run_interactive()
> File "/usr/lib/python3.6/site-packages/configshell_fb/shell.py", line 905, in run_interactive
> self._cli_loop()
> File "/usr/lib/python3.6/site-packages/configshell_fb/shell.py", line 734, in _cli_loop
> self.run_cmdline(cmdline)
> File "/usr/lib/python3.6/site-packages/configshell_fb/shell.py", line 848, in run_cmdline
> self._execute_command(path, command, pparams, kparams)
> File "/usr/lib/python3.6/site-packages/configshell_fb/shell.py", line 823, in _execute_command
> result = target.execute_command(command, pparams, kparams)
> File "/usr/lib/python3.6/site-packages/configshell_fb/node.py", line 1406, in execute_command
> return method(*pparams, **kparams)
> File "/usr/lib/python3.6/site-packages/configshell_fb/node.py", line 522, in ui_command_set
> group_setter(param, value)
> File "/usr/lib/python3.6/site-packages/targetcli/ui_target.py", line 134, in ui_setgroup_discovery_auth
> self.rtsnode.discovery_enable_auth = value
> File "/usr/lib/python3.6/site-packages/rtslib_fb/fabric.py", line 243, in _set_discovery_enable_auth
> if int(enable):
> ValueError: invalid literal for int() with base 10: 'false'
Now the output will be:
> Not setting enable! Syntax error, 'false' is not a NUMBER.
Acked-by: Lee Duncan <lduncan@suse.com>
---
targetcli/ui_target.py | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/targetcli/ui_target.py b/targetcli/ui_target.py
index 0c3fe1b708db..16ccae715688 100644
--- a/targetcli/ui_target.py
+++ b/targetcli/ui_target.py
@@ -34,7 +34,8 @@ from .ui_backstore import complete_path
from .ui_node import UINode, UIRTSLibNode
auth_params = ('userid', 'password', 'mutual_userid', 'mutual_password')
-discovery_params = auth_params + ("enable",)
+int_params = ('enable',)
+discovery_params = auth_params + int_params
class UIFabricModule(UIRTSLibNode):
'''
@@ -47,8 +48,12 @@ class UIFabricModule(UIRTSLibNode):
self.refresh()
if self.rtsnode.has_feature('discovery_auth'):
for param in discovery_params:
- self.define_config_group_param('discovery_auth',
- param, 'string')
+ if param in int_params:
+ self.define_config_group_param('discovery_auth',
+ param, 'number')
+ else:
+ self.define_config_group_param('discovery_auth',
+ param, 'string')
self.refresh()
# Support late params

View File

@ -0,0 +1,116 @@
From: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Date: Wed, 28 Nov 2018 16:55:38 +0530
Subject: saveconfig: compress the backup config files
Git-commit: 3d9e6c616ca7789d281843caf2d3dfb99dbf78a0
We have noticed saveconfig.json with 100 storage objects and 100 targets
(each holding a single tpg and a portal) consumes disk space around ~500K.
Which is very expensive, and backing-up such 100 saveconfig.json files will
take ~50M of disk space under /etc/target/backup/
And at scale like 1000 storage objects and targets, this will become worst.
Hence this patch attempts to compress(gzip) and store saveconfig.json while
backing-up.
Saved space example:
[root@localhost ~]# targetcli ls | grep -e "user:glfs" -e "iscsi"
| o- user:glfs ......................... [Storage Objects: 100]
o- iscsi ............................... [Targets: 100]
[root@localhost ~]# du -sh /etc/target/saveconfig.json
448K /etc/target/saveconfig.json
[root@localhost ~]# du -sh /etc/target/backup/saveconfig-20181128-18\:20\:43-json.gz
12K /etc/target/backup/saveconfig-20181128-18:20:43-json.gz
Reducing disk usage per backup file from 448K to 12K is very efficient right.
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Acked-by: Lee Duncan <lduncan@suse.com>
---
targetcli/ui_root.py | 44 +++++++++++++++++++++++++++++++++++++++-----
1 file changed, 39 insertions(+), 5 deletions(-)
diff --git a/targetcli/ui_root.py b/targetcli/ui_root.py
index 38118bd582f6..6f3a79bf4f66 100644
--- a/targetcli/ui_root.py
+++ b/targetcli/ui_root.py
@@ -24,6 +24,7 @@ import re
import shutil
import stat
import filecmp
+import gzip
from configshell_fb import ExecutionError
from rtslib_fb import RTSRoot
@@ -62,6 +63,38 @@ class UIRoot(UINode):
if fm.wwns == None or any(fm.wwns):
UIFabricModule(fm, self)
+ def _compare_files(self, backupfile, savefile):
+ '''
+ Compare backfile and saveconfig file
+ '''
+ if (os.path.splitext(backupfile)[1] == '.gz'):
+ try:
+ with gzip.open(backupfile, 'rb') as fbkp:
+ fdata_bkp = fbkp.read()
+ except IOError as e:
+ self.shell.log.warning("Could not gzip open backupfile %s: %s"
+ % (backupfile, e.strerror))
+
+ else:
+ try:
+ with open(backupfile, 'rb') as fbkp:
+ fdata_bkp = fbkp.read()
+ except IOError as e:
+ self.shell.log.warning("Could not open backupfile %s: %s"
+ % (backupfile, e.strerror))
+
+ try:
+ with open(savefile, 'rb') as f:
+ fdata = f.read()
+ except IOError as e:
+ self.shell.log.warning("Could not open saveconfig file %s: %s"
+ % (savefile, e.strerror))
+
+ if fdata_bkp == fdata:
+ return True
+ else:
+ return False
+
def _save_backups(self, savefile):
'''
Take backup of config-file if needed.
@@ -72,7 +105,7 @@ class UIRoot(UINode):
backup_dir = os.path.dirname(savefile) + "/backup/"
backup_name = "saveconfig-" + \
- datetime.now().strftime("%Y%m%d-%H:%M:%S") + ".json"
+ datetime.now().strftime("%Y%m%d-%H:%M:%S") + "-json.gz"
backupfile = backup_dir + backup_name
backup_error = None
@@ -88,13 +121,14 @@ class UIRoot(UINode):
return
backed_files_list = sorted(glob(os.path.dirname(savefile) + \
- "/backup/*.json"))
+ "/backup/saveconfig-*json*"))
# Save backup if backup dir is empty, or savefile is differnt from recent backup copy
- if not backed_files_list or not filecmp.cmp(backed_files_list[-1], savefile):
+ if not backed_files_list or not self._compare_files(backed_files_list[-1], savefile):
try:
- shutil.copy(savefile, backupfile)
-
+ with open(savefile, 'rb') as f_in, gzip.open(backupfile, 'wb') as f_out:
+ shutil.copyfileobj(f_in, f_out)
+ f_out.flush()
except IOError as ioe:
backup_error = ioe.strerror or "Unknown error"

View File

@ -0,0 +1,25 @@
From: Leo Zhang <nguzcf@gmail.com>
Date: Wed, 9 Jan 2019 14:20:28 +0800
Subject: targetcli-fb: Fix raise exception error in _save_backups
Git-commit: f6e813454c18e02222473713f53db5be99b84142
Signed-off-by: Leo Zhang <nguzcf@gmail.com>
Acked-by: Lee Duncan <lduncan@suse.com>
---
targetcli/ui_root.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/targetcli/ui_root.py b/targetcli/ui_root.py
index 6f3a79bf4f66..af5554f2dd76 100644
--- a/targetcli/ui_root.py
+++ b/targetcli/ui_root.py
@@ -114,7 +114,7 @@ class UIRoot(UINode):
os.makedirs(backup_dir);
except OSError as exe:
raise ExecutionError("Cannot create backup directory [%s] %s."
- % (backup_dir, exc.strerror))
+ % (backup_dir, exe.strerror))
# Only save backups if savefile exits
if not os.path.exists(savefile):

View File

@ -1,3 +1,13 @@
-------------------------------------------------------------------
Mon Aug 19 15:32:55 UTC 2019 - Lee Duncan <lduncan@suse.com>
- Added the following upstream patches:
* targetcli-fb-fix-raise-exception-error-in-save_backups
* iscsi-discovery_auth-enable-is-a-number-not-a-string (bsc#1145685)
* saveconfig-compress-the-backup-config-files
* do-not-remove-the-first-digit-when-auto-completing-the-tpg-tag
* add-emulate_pr-backstore-attribute
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Apr 3 03:14:10 UTC 2019 - ddiss@suse.com Wed Apr 3 03:14:10 UTC 2019 - ddiss@suse.com

View File

@ -56,7 +56,11 @@ Obsoletes: targetcli-rbd < %{version}
%{?systemd_requires} %{?systemd_requires}
Patch1: Split-out-blockdev-readonly-state-detection-helper.patch Patch1: Split-out-blockdev-readonly-state-detection-helper.patch
Patch2: rbd-support.patch Patch2: rbd-support.patch
Patch3: Add-emulate_pr-backstore-attribute.patch Patch3: saveconfig-compress-the-backup-config-files
Patch4: targetcli-fb-fix-raise-exception-error-in-save_backups
Patch5: Add-emulate_pr-backstore-attribute.patch
Patch6: do-not-remove-the-first-digit-when-auto-completing-the-tpg-tag
Patch7: iscsi-discovery_auth-enable-is-a-number-not-a-string
%python_subpackages %python_subpackages
@ -87,6 +91,10 @@ python2-targetcli-fb and python3-targetcli-fb.
%patch2 -p1 %patch2 -p1
%endif %endif
%patch3 -p1 %patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%build %build
%python_build %python_build