Hello community,

here is the log from the commit of package python-rtslib-fb for 
openSUSE:Factory checked in at 2018-04-19 15:29:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-rtslib-fb (Old)
 and      /work/SRC/openSUSE:Factory/.python-rtslib-fb.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-rtslib-fb"

Thu Apr 19 15:29:22 2018 rev:17 rq:597224 version:2.1.67

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-rtslib-fb/python-rtslib-fb.changes        
2018-04-11 14:02:53.888836711 +0200
+++ /work/SRC/openSUSE:Factory/.python-rtslib-fb.new/python-rtslib-fb.changes   
2018-04-19 15:29:24.199264772 +0200
@@ -1,0 +2,15 @@
+Tue Apr 10 16:03:33 UTC 2018 - [email protected]
+
+- Merge RBD support from non-fb version (bsc#1079329)
+  + rbd-support.patch (SLE/Leap only, due to LIO kernel dependency)
+  + Add explicit Provides for "python-rtslib-rbd"
+
+-------------------------------------------------------------------
+Tue Apr 10 12:41:16 UTC 2018 - [email protected]
+
+- Automatically generate version string from upstream tag
+  + Retain current fb-removed version format used
+  + Rename rtslib-fb-2.1.fb67.tar.xz to python-rtslib-fb-2.1.67.tar.xz and
+    cleanup hardcoded duplicate name/version values in spec
+
+-------------------------------------------------------------------

Old:
----
  rtslib-fb-2.1.fb67.tar.xz

New:
----
  python-rtslib-fb-2.1.67.tar.xz
  rbd-support.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-rtslib-fb.spec ++++++
--- /var/tmp/diff_new_pack.oGRNoR/_old  2018-04-19 15:29:24.731242993 +0200
+++ /var/tmp/diff_new_pack.oGRNoR/_new  2018-04-19 15:29:24.731242993 +0200
@@ -16,18 +16,17 @@
 #
 
 
-%define oname rtslib-fb
-%define realver 2.1.fb67
 %define dbdir %{_sysconfdir}/target
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
-Name:           python-%{oname}
+Name:           python-rtslib-fb
 Version:        2.1.67
 Release:        0%{?dist}
 Summary:        API for Linux kernel SCSI target (aka LIO)
 License:        Apache-2.0
 Group:          Development/Languages/Python
 Url:            http://github.com/open-iscsi/rtslib-fb.git
-Source:         %{oname}-%{realver}.tar.xz
+Source:         %{name}-%{version}.tar.xz
+Patch1:         rbd-support.patch
 BuildRequires:  %{python_module devel}
 BuildRequires:  %{python_module pyudev}
 BuildRequires:  %{python_module setuptools}
@@ -39,6 +38,11 @@
 Requires(postun): update-alternatives
 Provides:       python-rtslib = %{version}-%{release}
 Obsoletes:      python-rtslib
+%if 0%{?sle_version} == 150000
+# explicit Provides advertising RBD support
+Provides:       python-rtslib-rbd = %{version}
+Obsoletes:      python-rtslib-rbd < %{version}
+%endif
 BuildArch:      noarch
 %python_subpackages
 
@@ -48,7 +52,11 @@
 the Apache 2.0 license. Contributions are welcome
 
 %prep
-%setup -q -n %{oname}-%{realver}
+%setup -q
+%if 0%{?sle_version} == 150000
+# RBD support is dependent on LIO changes present in the SLE/Leap kernel
+%patch1 -p1
+%endif
 
 %build
 %python_build

++++++ _service ++++++
--- /var/tmp/diff_new_pack.oGRNoR/_old  2018-04-19 15:29:24.775241191 +0200
+++ /var/tmp/diff_new_pack.oGRNoR/_new  2018-04-19 15:29:24.779241028 +0200
@@ -3,8 +3,10 @@
     <param name="scm">git</param>
     <param name="url">https://github.com/open-iscsi/rtslib-fb.git</param>
     <param name="subdir"></param>
-    <param name="filename">rtslib-fb</param>
-    <param name="versionformat">2.1.fb67</param>
+    <param name="filename">python-rtslib-fb</param>
+    <param name="versionformat">@PARENT_TAG@</param>
+    <param name="versionrewrite-pattern">v(\d*\.\d*\.)fb(\d*)</param>
+    <param name="versionrewrite-replacement">\1\2</param>
     <param name="revision">v2.1.fb67</param>
     <param name="changesgenerate">enable</param>
   </service>

++++++ rbd-support.patch ++++++
>From 9496352d515b9f440b68c8534e41899cf1a9570e Mon Sep 17 00:00:00 2001
From: Mike Christie <[email protected]>
Date: Wed, 29 Jul 2015 04:28:02 -0500
Subject: [PATCH] rbd support

rtslib-fb-rbd-support.patch obtained from:
https://marc.info/?l=ceph-devel&m=143816209010058

Reviewed-by: David Disseldorp <[email protected]>
---
 rtslib/__init__.py |   1 +
 rtslib/tcm.py      | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 104 insertions(+)

diff --git a/rtslib/__init__.py b/rtslib/__init__.py
index 568619e..1a5bee5 100644
--- a/rtslib/__init__.py
+++ b/rtslib/__init__.py
@@ -32,6 +32,7 @@ from .fabric import FabricModule
 
 from .tcm import FileIOStorageObject, BlockStorageObject
 from .tcm import PSCSIStorageObject, RDMCPStorageObject, 
UserBackedStorageObject
+from .tcm import RBDStorageObject
 from .tcm import StorageObjectFactory
 
 from .alua import ALUATargetPortGroup
diff --git a/rtslib/tcm.py b/rtslib/tcm.py
index 1aeea23..17df8e9 100644
--- a/rtslib/tcm.py
+++ b/rtslib/tcm.py
@@ -780,6 +780,107 @@ class BlockStorageObject(StorageObject):
         d['dev'] = self.udev_path
         return d
 
+class RBDStorageObject(StorageObject):
+    '''
+    An interface to configFS storage objects for RBD backstore.
+    '''
+
+    # RBDStorageObject private stuff
+
+    def __init__(self, name, dev=None, wwn=None, readonly=False,
+                 write_back=False):
+        '''
+        A RBDIOStorageObject can be instantiated in two ways:
+            - B{Creation mode}: If I{dev} is specified, the underlying configFS
+              object will be created with that parameter.
+              No RBDIOStorageObject with the same I{name} can pre-exist in
+              the parent Backstore in that mode.
+            - B{Lookup mode}: If I{dev} is not set, then the
+              RBDIOStorageObject will be bound to the existing configFS
+              object in the parent Backstore having the specified
+              I{name}. The underlying configFS object must already exist in
+              that mode, or instantiation will fail.
+
+        @param name: The name of the RBDIOStorageObject.
+        @type name: string
+        @param dev: The path to the backend rbd device to be used.
+            - Example: I{dev="/dev/sda"}.
+            - The only device type that is accepted I{TYPE_DISK}.
+              For other device types, use pscsi.
+        @type dev: string
+        @param wwn: T10 WWN Unit Serial, will generate if None
+        @type wwn: string
+        @return: A RBDIOStorageObject object.
+        '''
+
+        if dev is not None:
+            super(RBDStorageObject, self).__init__(name, 'create')
+            try:
+                self._configure(dev, wwn, readonly)
+            except:
+                self.delete()
+                raise
+        else:
+            super(RBDStorageObject, self).__init__(name, 'lookup')
+
+    def _configure(self, dev, wwn, readonly):
+        self._check_self()
+        if get_blockdev_type(dev) != 0:
+            raise RTSLibError("Device %s is not a TYPE_DISK rbd device" % dev)
+        if is_dev_in_use(dev):
+            raise RTSLibError("Cannot configure StorageObject because "
+                              + "device %s is already in use" % dev)
+        self._set_udev_path(dev)
+        self._control("udev_path=%s" % dev)
+        self._control("readonly=%d" % readonly)
+        self._enable()
+
+        super(RBDStorageObject, self)._configure(wwn)
+
+    def _get_major(self):
+        self._check_self()
+        return int(self._parse_info('Major'))
+
+    def _get_minor(self):
+        self._check_self()
+        return int(self._parse_info('Minor'))
+
+    def _get_size(self):
+        # udev_path doesn't work here, what if LV gets renamed?
+        return get_size_for_disk_name(self._parse_info('device')) * 
int(self._parse_info('SectorSize'))
+
+    def _get_wb_enabled(self):
+        self._check_self()
+        return bool(int(self.get_attribute("emulate_write_cache")))
+
+    def _get_readonly(self):
+        self._check_self()
+        # 'readonly' not present before kernel 3.6
+        try:
+            return bool(int(self._parse_info('readonly')))
+        except AttributeError:
+            return False
+
+    # RBDStorageObject public stuff
+
+    major = property(_get_major,
+            doc="Get the block device major number")
+    minor = property(_get_minor,
+            doc="Get the block device minor number")
+    size = property(_get_size,
+            doc="Get the block device size")
+    write_back = property(_get_wb_enabled,
+            doc="True if write-back, False if write-through (write cache 
disabled)")
+    readonly = property(_get_readonly,
+            doc="True if the device is read-only, False if read/write")
+
+    def dump(self):
+        d = super(RBDStorageObject, self).dump()
+        d['write_back'] = self.write_back
+        d['readonly'] = self.readonly
+        d['wwn'] = self.wwn
+        d['dev'] = self.udev_path
+        return d
 
 class UserBackedStorageObject(StorageObject):
     '''
@@ -897,6 +998,7 @@ so_mapping = {
     "fileio": FileIOStorageObject,
     "iblock": BlockStorageObject,
     "block": BlockStorageObject,
+    "rbd": RBDStorageObject,
     "user": UserBackedStorageObject,
 }
 
@@ -907,6 +1009,7 @@ bs_params = {
     FileIOStorageObject: dict(name='fileio'),
     BlockStorageObject: dict(name='block', alt_dirprefix='iblock'),
     UserBackedStorageObject: dict(name='user'),
+    RBDStorageObject: dict(name='rbd'),
     }
 
 bs_cache = {}
-- 
2.13.6


Reply via email to