Nir Soffer has uploaded a new change for review.

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

hba: Run fc-scan in supervdsm

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

Change-Id: If78a464d7d14ce0d0fcf218c7f897d5b810185e4
Signed-off-by: Nir Soffer <nsof...@redhat.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/87/35587/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 56e38c4..e0e115d 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, \
@@ -368,6 +369,10 @@
     def fuser(self, *args, **kwargs):
         return fuser.fuser(*args, **kwargs)
 
+    @logDecorator
+    def hbaRescan(self):
+        return hba._rescan()
+
     def __udevReloadRules(self, guid):
         if self.__udevOperationReload():
             reload = "--reload"


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If78a464d7d14ce0d0fcf218c7f897d5b810185e4
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsof...@redhat.com>
_______________________________________________
vdsm-patches mailing list
vdsm-patches@lists.fedorahosted.org
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to