def _initiate_rescan(self, wait_for_completion=True, raise_error=False): from infi.devicemanager import DeviceManager from infi.storagemodel.base.gevent_wrapper import joinall, defer, spawn dm = DeviceManager() rescan_callables = (defer(controller.rescan) for controller in dm.storage_controllers) greenlets = [spawn(item) for item in rescan_callables] if wait_for_completion: joinall(greenlets, raise_error=True)
def asi_context(self): from infi.asi import create_platform_command_executer, create_os_file handle = create_os_file(self.get_pdo()) executer = create_platform_command_executer(handle) executer.call = defer(executer.call) try: yield executer finally: handle.close()
def get_physical_drive_number(self): """returns the drive number of the disk. if the disk is hidden (i.e. part of MPIODisk), it returns -1 """ try: number = defer(self.get_ioctl_interface().storage_get_device_number)() return -1 if number == 0xffffffff else number except WindowsException: return -1
def asi_context(self): from infi.asi import create_platform_command_executer, create_os_file handle = create_os_file(self._get_access_path()) executer = create_platform_command_executer(handle) executer.call = gevent_wrapper.defer(executer.call) try: yield executer finally: handle.close()
def get_physical_drive_number(self): """returns the drive number of the disk. if the disk is hidden (i.e. part of MPIODisk), it returns -1 """ try: number = defer( self.get_ioctl_interface().storage_get_device_number)() return -1 if number == 0xffffffff else number except WindowsException: return -1
def asi_context(self): import os from infi.asi import create_platform_command_executer, create_os_file handle = create_os_file(self.get_block_access_path()) executer = create_platform_command_executer(handle, timeout=QUERY_TIMEOUT) executer.call = gevent_wrapper.defer(executer.call) try: yield executer finally: handle.close()
def asi_context(self): import os from infi.asi.unix import OSFile from infi.asi.linux import LinuxIoctlCommandExecuter handle = OSFile(os.open(self.get_block_access_path(), os.O_RDWR)) executer = LinuxIoctlCommandExecuter(handle) executer.call = gevent_wrapper.defer(executer.call) try: yield executer finally: handle.close()
def asi_context(self): import os from infi.asi import create_platform_command_executer, create_os_file from .scsi import SG_TIMEOUT_IN_MS path = os.path.join("/dev", self.sysfs_device.get_scsi_generic_device_name()) handle = create_os_file(path) executer = create_platform_command_executer(handle, timeout=SG_TIMEOUT_IN_MS) executer.call = gevent_wrapper.defer(executer.call) try: yield executer finally: handle.close()
def asi_context(self): import os from infi.asi import create_platform_command_executer, create_os_file # if sgen is not loaded we can't open the device if not os.path.exists(self.get_block_access_path()) and os.path.exists(self.get_block_access_path().strip(":array_ctrl")): msg = "can't query device {} since block access path doesn't exist (sgen is not loaded)".format(self.get_display_name()) raise ScsiGenericNotLoaded(msg) handle = create_os_file(self.get_block_access_path()) executer = create_platform_command_executer(handle, timeout=QUERY_TIMEOUT) executer.call = gevent_wrapper.defer(executer.call) try: yield executer finally: handle.close()
def asi_context(self): import os from infi.asi import create_platform_command_executer, create_os_file # if sgen is not loaded we can't open the device if not os.path.exists(self.get_block_access_path()) and os.path.exists( self.get_block_access_path().strip(":array_ctrl")): msg = "can't query device {} since block access path doesn't exist (sgen is not loaded)".format( self.get_display_name()) raise ScsiGenericNotLoaded(msg) handle = create_os_file(self.get_block_access_path()) executer = create_platform_command_executer(handle, timeout=QUERY_TIMEOUT) executer.call = gevent_wrapper.defer(executer.call) try: yield executer finally: handle.close()
def get_hctl(self): from infi.dtypes.hctl import HCTL return HCTL(*defer(self.get_ioctl_interface().scsi_get_address)())
def _get_hwid(self): hwid = defer(getattr)(self._device_object, 'hardware_ids')[0] hwid = hwid.replace('SCSI\\Disk', '').replace('SCSI\\Array', '').replace('MPIO\\Disk', '') return hwid
def get_size_in_bytes(self): return defer(self.get_ioctl_interface().disk_get_drive_geometry_ex)()
def get_pdo(self): try: return defer(getattr)(self._device_object, 'psuedo_device_object') except KeyError: logger.exception("Getting device pdo raised KeyError") raise DeviceError()