def _resetDMP(sid,explicit_unmap=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")
        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)
    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)
Example #2
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)
Example #3
0
 def refresh_devices_if_needed(primarydevice, SCSIid, currentcapacity):
     devices = get_devices_by_SCSIid(SCSIid)
     if "/dev/mapper/" in primarydevice:
         devices = set(devices + mpath_cli.list_paths(SCSIid))
     devicesthatneedrefresh = get_outdated_size_devices(
         currentcapacity, devices)
     if devicesthatneedrefresh:
         # timing out avoids waiting for min(dev_loss_tmo, fast_io_fail_tmo)
         # if one or multiple devices don't answer
         util.timeout_call(10, refreshdev, devicesthatneedrefresh)
         if get_outdated_size_devices(currentcapacity,
                                      devicesthatneedrefresh):
             # in this state we shouldn't force resizing the mapper dev
             raise util.SMException("Failed to get %s to agree on the "
                                    "current capacity." %
                                    devicesthatneedrefresh)
Example #4
0
 def refresh_devices_if_needed(primarydevice, SCSIid, currentcapacity):
     devices = get_devices_by_SCSIid(SCSIid)
     if "/dev/mapper/" in primarydevice:
         devices = set(devices + mpath_cli.list_paths(SCSIid))
     devicesthatneedrefresh = get_outdated_size_devices(currentcapacity,
                                                        devices)
     if devicesthatneedrefresh:
         # timing out avoids waiting for min(dev_loss_tmo, fast_io_fail_tmo)
         # if one or multiple devices don't answer
         util.timeout_call(10, refreshdev, devicesthatneedrefresh)
         if get_outdated_size_devices(currentcapacity,
                                      devicesthatneedrefresh):
             # in this state we shouldn't force resizing the mapper dev
             raise util.SMException("Failed to get %s to agree on the "
                                    "current capacity."
                                    % devicesthatneedrefresh)
Example #5
0
def remove(scsi_id):
    paths=mpath_cli.list_paths(scsi_id)
    mpath_cli.remove_map(scsi_id)
    for path in paths:
        mpath_cli.remove_path(path)
Example #6
0
def remove(scsi_id):
    paths=mpath_cli.list_paths(scsi_id)
    mpath_cli.remove_map(scsi_id)
    for path in paths:
        mpath_cli.remove_path(path)