def _resetDMP(sid, explicit_unmap=False, delete_nodes=False): # If mpath has been turned on since the sr/vdi was attached, we # might be trying to unmap it before the daemon has been started # This is unnecessary (and will fail) so just return. deactivate_MPdev(sid) if not _is_mpath_daemon_running(): util.SMlog( "Warning: Trying to unmap mpath device when multipathd not running" ) return # If the multipath daemon is running, but we were initially plugged # with multipathing set to no, there may be no map for us in the multipath # tables. In that case, list_paths will return [], but remove_map might # throw an exception. Catch it and ignore it. if explicit_unmap: util.SMlog("Explicit unmap") # Remove map from conf file, if any try: wwid_conf.edit_wwid(sid, True) except: util.SMlog("WARNING: exception raised while attempting to" " modify multipath.conf") try: mpath_cli.reconfigure() except: util.SMlog("WARNING: exception raised while attempting to" " reconfigure") time.sleep(5) devices = mpath_cli.list_paths(sid) try: mpath_cli.remove_map(sid) except: util.SMlog("Warning: Removing the path failed") pass for device in devices: mpath_cli.remove_path(device) if delete_nodes: _delete_node(device) else: mpath_cli.ensure_map_gone(sid) path = "/dev/mapper/%s" % sid if not util.wait_for_nopath(path, 10): util.SMlog("MPATH: WARNING - path did not disappear [%s]" % path) else: util.SMlog("MPATH: path disappeared [%s]" % path)
def map_by_scsibus(sid,npaths=0): # Synchronously creates/refreshs the MP map for a single SCSIid. # Gathers the device vector from /dev/disk/by-scsibus - we expect # there to be 'npaths' paths util.SMlog("map_by_scsibus: sid=%s" % sid) devices = [] # Wait for up to 60 seconds for n devices to appear for attempt in range(0,60): devices = scsiutil._genReverseSCSIidmap(sid) # If we've got the right number of paths, or we don't know # how many devices there ought to be, tell multipathd about # the paths, and return. if(len(devices)>=npaths or npaths==0): # Enable this device's sid: it could be blacklisted # We expect devices to be blacklisted according to their # wwid only. We go through the list of paths until we have # a definite answer about the device's blacklist status. # If the path we are checking is down, we cannot tell. for dev in devices: try: if wwid_conf.is_blacklisted(dev): try: wwid_conf.edit_wwid(sid) except: util.SMlog("WARNING: exception raised while " "attempting to modify multipath.conf") try: mpath_cli.reconfigure() except: util.SMlog("WARNING: exception raised while " "attempting to reconfigure") time.sleep(5) break except wwid_conf.WWIDException as e: util.SMlog(e.errstr) else: util.SMlog("Device 'SCSI_id: {}' is inaccessible; " "All paths are down.".format(sid)) __map_explicit(devices) return time.sleep(1) __map_explicit(devices)
def _resetDMP(sid,explicit_unmap=False,delete_nodes=False): # If mpath has been turned on since the sr/vdi was attached, we # might be trying to unmap it before the daemon has been started # This is unnecessary (and will fail) so just return. deactivate_MPdev(sid) if not _is_mpath_daemon_running(): util.SMlog("Warning: Trying to unmap mpath device when multipathd not running") return # If the multipath daemon is running, but we were initially plugged # with multipathing set to no, there may be no map for us in the multipath # tables. In that case, list_paths will return [], but remove_map might # throw an exception. Catch it and ignore it. if explicit_unmap: util.SMlog("Explicit unmap") # Remove map from conf file, if any try: wwid_conf.edit_wwid(sid, True) except: util.SMlog("WARNING: exception raised while attempting to" " modify multipath.conf") try: mpath_cli.reconfigure() except: util.SMlog("WARNING: exception raised while attempting to" " reconfigure") time.sleep(5) devices = mpath_cli.list_paths(sid) try: mpath_cli.remove_map(sid) except: util.SMlog("Warning: Removing the path failed") pass for device in devices: mpath_cli.remove_path(device) if delete_nodes: _delete_node(device) else: mpath_cli.ensure_map_gone(sid) path = "/dev/mapper/%s" % sid if not util.wait_for_nopath(path, 10): util.SMlog("MPATH: WARNING - path did not disappear [%s]" % path) else: util.SMlog("MPATH: path disappeared [%s]" % path)
def map_by_scsibus(sid, npaths=0): # Synchronously creates/refreshs the MP map for a single SCSIid. # Gathers the device vector from /dev/disk/by-scsibus - we expect # there to be 'npaths' paths util.SMlog("map_by_scsibus: sid=%s" % sid) devices = [] # Wait for up to 60 seconds for n devices to appear for attempt in range(0, 60): devices = scsiutil._genReverseSCSIidmap(sid) # If we've got the right number of paths, or we don't know # how many devices there ought to be, tell multipathd about # the paths, and return. if (len(devices) >= npaths or npaths == 0): # Enable this device's sid: it could be blacklisted # We expect devices to be blacklisted according to their # wwid only. We go through the list of paths until we have # a definite answer about the device's blacklist status. # If the path we are checking is down, we cannot tell. for dev in devices: try: if wwid_conf.is_blacklisted(dev): try: wwid_conf.edit_wwid(sid) except: util.SMlog("WARNING: exception raised while " "attempting to modify multipath.conf") try: mpath_cli.reconfigure() except: util.SMlog("WARNING: exception raised while " "attempting to reconfigure") time.sleep(5) break except wwid_conf.WWIDException as e: util.SMlog(e.errstr) else: util.SMlog("Device 'SCSI_id: {}' is inaccessible; " "All paths are down.".format(sid)) __map_explicit(devices) return time.sleep(1) __map_explicit(devices)
def map_by_scsibus(sid,npaths=0): # Synchronously creates/refreshs the MP map for a single SCSIid. # Gathers the device vector from /dev/disk/by-scsibus - we expect # there to be 'npaths' paths util.SMlog("map_by_scsibus: sid=%s" % sid) devices = [] # Wait for up to 60 seconds for n devices to appear for attempt in range(0,60): devices = scsiutil._genReverseSCSIidmap(sid) # If we've got the right number of paths, or we don't know # how many devices there ought to be, tell multipathd about # the paths, and return. if(len(devices)>=npaths or npaths==0): # Enable this device's sid: it could be blacklisted # We expect devices to be blacklisted according to their # wwid only. Checking the first one is sufficient if wwid_conf.is_blacklisted(devices[0]): try: wwid_conf.edit_wwid(sid) except: util.SMlog("WARNING: exception raised while attempting to" " modify multipath.conf") try: mpath_cli.reconfigure() except: util.SMlog("WARNING: exception raised while attempting to" " reconfigure") time.sleep(5) __map_explicit(devices) return time.sleep(1) __map_explicit(devices)
def map_by_scsibus(sid, npaths=0): # Synchronously creates/refreshs the MP map for a single SCSIid. # Gathers the device vector from /dev/disk/by-scsibus - we expect # there to be 'npaths' paths util.SMlog("map_by_scsibus: sid=%s" % sid) devices = [] # Wait for up to 60 seconds for n devices to appear for attempt in range(0, 60): devices = scsiutil._genReverseSCSIidmap(sid) # If we've got the right number of paths, or we don't know # how many devices there ought to be, tell multipathd about # the paths, and return. if (len(devices) >= npaths or npaths == 0): # Enable this device's sid: it could be blacklisted # We expect devices to be blacklisted according to their # wwid only. Checking the first one is sufficient if wwid_conf.is_blacklisted(devices[0]): try: wwid_conf.edit_wwid(sid) except: util.SMlog("WARNING: exception raised while attempting to" " modify multipath.conf") try: mpath_cli.reconfigure() except: util.SMlog("WARNING: exception raised while attempting to" " reconfigure") time.sleep(5) __map_explicit(devices) return time.sleep(1) __map_explicit(devices)