Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
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)