Change in vdsm[master]: Re-post: hba: Run fc-scan in supervdsm

piotr.kliczewski at gmail.com piotr.kliczewski at gmail.com
Tue Jan 27 12:24:24 UTC 2015


Piotr Kliczewski has uploaded a new change for review.

Change subject: Re-post: hba: Run fc-scan in supervdsm
......................................................................

Re-post: hba: Run fc-scan in supervdsm

This is re-post of commit: 5a6ae1a266e6808861a10933d7cacb81838050f1

On master zombiereaper is available in supervdsm, so we can run fc-scan
from suprevdsm instead of using sudo.

Change-Id: I67649957e329955e70e0a35af7cde85b31d516e0
Signed-off-by: Nir Soffer <nsoffer at redhat.com>
Signed-off-by: pkliczewski <piotr.kliczewski at gmail.com>
---
M vdsm/storage/hba.py
M vdsm/sudoers.vdsm.in
M vdsm/supervdsmServer
3 files changed, 26 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/19/37319/1

diff --git a/vdsm/storage/hba.py b/vdsm/storage/hba.py
index 0d4e688..efd0273 100644
--- a/vdsm/storage/hba.py
+++ b/vdsm/storage/hba.py
@@ -31,6 +31,7 @@
 from vdsm.infra import zombiereaper
 
 import misc
+import supervdsm
 
 log = logging.getLogger("Storage.HBA")
 
@@ -43,27 +44,41 @@
 NODE_NAME = "node_name"
 
 
+class Error(Exception):
+    """ hba operation failed """
+
+
 @misc.samplingmethod
 def rescan():
     """
     Rescan HBAs discovering new devices.
     """
+    log.debug("Starting scan")
+    try:
+        supervdsm.getProxy().hbaRescan()
+    except Error as e:
+        log.error("Scan failed: %s", e)
+    else:
+        log.debug("Scan finished")
+
+
+def _rescan():
+    """
+    Called from supervdsm to perform rescan as root.
+    """
     timeout = config.getint('irs', 'scsi_rescan_maximal_timeout')
 
-    log.debug("Starting scan")
-    proc = utils.execCmd([constants.EXT_FC_SCAN], sync=False, sudo=True,
+    proc = utils.execCmd([constants.EXT_FC_SCAN], sync=False,
                          execCmdLogger=log)
     try:
         proc.wait(timeout)
     finally:
         if proc.returncode is None:
-            log.warning("Timeout scanning")
             zombiereaper.autoReapPID(proc.pid)
+            raise Error("Timeout scanning (pid=%s)" % proc.pid)
         elif proc.returncode != 0:
             stderr = proc.stderr.read(512)
-            log.error("Scan failed: %r", stderr)
-        else:
-            log.debug("Scan finished")
+            raise Error("Scan failed: %r" % stderr)
 
 
 def getiSCSIInitiators():
diff --git a/vdsm/sudoers.vdsm.in b/vdsm/sudoers.vdsm.in
index 0572866..da88ff2 100644
--- a/vdsm/sudoers.vdsm.in
+++ b/vdsm/sudoers.vdsm.in
@@ -15,7 +15,6 @@
     @BINDIR@/vdsm-tool service-restart multipathd, \
     @BINDIR@/vdsm-tool service-reload multipathd, \
     @ISCSIADM_PATH@ *, \
-    @LIBEXECDIR@/fc-scan, \
     @LVM_PATH@, \
     @CAT_PATH@ /sys/block/*/device/../../*, \
     @CAT_PATH@ /sys/devices/platform/host*, \
diff --git a/vdsm/supervdsmServer b/vdsm/supervdsmServer
index e1af020..3306b71 100755
--- a/vdsm/supervdsmServer
+++ b/vdsm/supervdsmServer
@@ -65,6 +65,7 @@
 from storage.iscsi import getDevIscsiInfo as _getdeviSCSIinfo
 from storage.iscsi import readSessionInfo as _readSessionInfo
 from supervdsm import _SuperVdsmManager
+from storage import hba
 from storage.fileUtils import chown, resolveGid, resolveUid
 from storage.fileUtils import validateAccess as _validateAccess
 from vdsm.constants import METADATA_GROUP, EXT_CHOWN, EXT_UDEVADM, \
@@ -348,6 +349,10 @@
         return fuser.fuser(*args, **kwargs)
 
     @logDecorator
+    def hbaRescan(self):
+        return hba._rescan()
+
+    @logDecorator
     def set_rp_filter_loose(self, dev):
         sysctl.set_rp_filter_loose(dev)
 


-- 
To view, visit http://gerrit.ovirt.org/37319
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I67649957e329955e70e0a35af7cde85b31d516e0
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Piotr Kliczewski <piotr.kliczewski at gmail.com>


More information about the vdsm-patches mailing list