관리-도구
편집 파일: simarray.cpython-39.pyc
a ����V��dɀ���������������������@���s����d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlmZ�d�dlmZmZm Z m Z mZmZm Z mZmZmZmZmZmZmZmZ�dd��Zdd��Zdd ��ZG�d d��de�ZG�dd ��d e�ZG�dd��de�ZdS�)�����N)�size_human_2_size_bytes)�System�Volume�Disk�Pool� FileSystem�AccessGroup� FsSnapshot� NfsExport�md5�LsmError� TargetPort�ErrorNumber� JobStatus�Battery�int_divc��������������������s�����fdd�}|S�)Nc��������������� ������s:��z��|�i�|��W�S��t�jy��}�zdt|�d��tu�rNt|�d�d�rN|�d�j����t|�dkrftt j d��tt jdt|����W�Y�d�}~n�d�}~0��ty����t|�d��tu�r�t|�d�d�r�|�d�j������Y�nj�t�y4�}�zPt|�d��tu��rt|�d�d��r|�d�j����tt jdt|����W�Y�d�}~n d�}~0�0�d�S�)Nr����bs_objzdatabase is lockedz%Timeout to require lock on state filez%Got unexpected error from sqlite3: %szGot unexpected error: %s) �sqlite3�OperationalError�type�SimArray�hasattrr����trans_rollback�strr���r���ZTIMEOUT� PLUGIN_BUG� Exception)�argsZkargs� sql_errorZ base_error��method���9/usr/lib64/python3.9/site-packages/sim_plugin/simarray.py�wrapper���s.����� �" �z_handle_errors.<locals>.wrapperr ���)r���r"���r ���r���r!����_handle_errors���s����r#���c��������������� ���C���s:���dg}�t�dd�D�]}|��tdt�dd�����qd�|��S�)z. Generate a random VPD83 NAA_Type3 ID Z50r�������z%02x������)�range�appendr����randomZrandint�join)Zvpd�_r ���r ���r!����_random_vpd/���s����r,���c�����������������C���s,���i�}t�|�j�D�]\}}||�||d�<�q|S��Nr���)� enumerate�description)�cursor�row�d�idx�colr ���r ���r!���� _dict_factory9���s����r5���c�������������������@���s8��e�Zd�Zejdd��ejdd��ejdd��ejdd��ejdd��ej dd��ej dd��ejd d��ejd d��ej dd��ejdd��ejd d��ejdd��ejdd��iZejdd��ejdd��ejdd��ejdd��ejdd��ej dd��ej dd��ejdd��ejdd��ej dd��ejdd��ejdd��ejdd��ejdd��iZedd���Zd S�)!�PoolRAIDc�����������������C���s���|�dkS�r-���r �����xr ���r ���r!����<lambda>B��������zPoolRAID.<lambda>c�����������������C���s���|�dkS�r-���r ���r7���r ���r ���r!���r9���C���r:���c�����������������C���s���|�dkS��N����r ���r7���r ���r ���r!���r9���D���r:���c�����������������C���s���|�dkS��N����r ���r7���r ���r ���r!���r9���E���r:���c�����������������C���s���|�dkS�r=���r ���r7���r ���r ���r!���r9���F���r:���c�����������������C���s���|�dkS�r=���r ���r7���r ���r ���r!���r9���G���r:���c�����������������C���s���|�dkS��N����r ���r7���r ���r ���r!���r9���H���r:���c�����������������C���s���|�dko|�d�dkS�)Nr@���r<���r���r ���r7���r ���r ���r!���r9���I���r:���c�����������������C���s���|�dko|�d�dkS��N����r<���r���r ���r7���r ���r ���r!���r9���J���r:���c�����������������C���s���|�dko|�d�dkS��N����r<���r���r ���r7���r ���r ���r!���r9���K���r:���c�����������������C���s���|�dko|�d�dkS�rA���r ���r7���r ���r ���r!���r9���L���r:���c�����������������C���s���|�dko|�d�dkS�rC���r ���r7���r ���r ���r!���r9���M���r:���c�����������������C���s���|�dko|�d�dkS�rA���r ���r7���r ���r ���r!���r9���N���r:���c�����������������C���s���|�dko|�d�dkS�rC���r ���r7���r ���r ���r!���r9���O���r:���c�����������������C���s���|�S��Nr ���r7���r ���r ���r!���r9���S���r:���c�����������������C���s���|�S�rE���r ���r7���r ���r ���r!���r9���T���r:���c�����������������C���s���dS��N����r ���r7���r ���r ���r!���r9���U���r:���c�����������������C���s���|�d�S�rF���r ���r7���r ���r ���r!���r9���V���r:���c�����������������C���s���|�d�S�rF���r ���r7���r ���r ���r!���r9���W���r:���c�����������������C���s���|�d�S�rF���r ���r7���r ���r ���r!���r9���X���r:���c�����������������C���s���|�d�S�r;���r ���r7���r ���r ���r!���r9���Y���r:���c�����������������C���s ���t�|�d�S�r;����r���r7���r ���r ���r!���r9���Z���r:���c�����������������C���s���t�|�d�d�S��Nr<���rG���rH���r7���r ���r ���r!���r9���[���r:���c�����������������C���s���t�|�d�d�S�r;���rH���r7���r ���r ���r!���r9���\���r:���c�����������������C���s���|�d�S�r;���r ���r7���r ���r ���r!���r9���]���r:���c�����������������C���s���|�d�S�r?���r ���r7���r ���r ���r!���r9���^���r:���c�����������������C���s���t�|�d�d�S�rI���rH���r7���r ���r ���r!���r9���_���r:���c�����������������C���s���t�|�d�d�S�r;���rH���r7���r ���r ���r!���r9���`���r:���c�����������������C���sV���|�t�tj����vr"ttjd|����tj|��|�du�rHttjd||�f���tj|��|�S�)z� Return a integer indicating how many disks should be used as real data(not mirrored or parity) disks. Treating RAID 5 and 6 using fixed parity disk. z0data_disk_count(): Got unsupported raid type(%d)Fz;data_disk_count(): Illegal disk count(%d) for raid type(%d))�listr6����_RAID_DISK_CHK�keysr���r���r����_RAID_PARITY_DISK_COUNT_FUNC)� raid_type� disk_countr ���r ���r!����data_disk_countc���s�������zPoolRAID.data_disk_countN)�__name__� __module__�__qualname__r����RAID_TYPE_JBOD�RAID_TYPE_RAID0�RAID_TYPE_RAID1ZRAID_TYPE_RAID3ZRAID_TYPE_RAID4�RAID_TYPE_RAID5�RAID_TYPE_RAID6�RAID_TYPE_RAID10ZRAID_TYPE_RAID15ZRAID_TYPE_RAID16�RAID_TYPE_RAID50�RAID_TYPE_RAID60ZRAID_TYPE_RAID51ZRAID_TYPE_RAID61rK���rM����staticmethodrP���r ���r ���r ���r!���r6���@���s@��� � �r6���c�������������������@���s���e�Zd�ZdZde�ZdZdZdZdZdZ dZ dZd Ze jZejZejZejZd ZdZdZejejejejejejej gZ!g�d �Z"dd��Z#dd��Z$dd��Z%dd��Z&dd��Z'dd��Z(dd��Z)dd��Z*dd��Z+d�d!d"�Z,d#d$��Z-d%d&��Z.d�d(d)�Z/d*d+��Z0d,d-��Z1d.d/��Z2d0d1��Z3d2d3��Z4d4d5��Z5d6d7��Z6d�d9d:�Z7d�d;d<�Z8d=d>��Z9d�d?d@�Z:d�dAdB�Z;dCdD��Z<dEdF��Z=dGdH��Z>e?dIdJ���Z@d�dKdL�ZAdMdN��ZBdOdP��ZCdQdR��ZDdSdT��ZEdUdV��ZFdWdX��ZGdYdZ��ZHd�d[d\�ZId]d^��ZJd_d`��ZKe?dadb���ZLd�dcdd�ZMdedf��ZNdgdh��ZOdidj��ZPdkdl��ZQdmdn��ZRdodp��ZSdqdr��ZTdsdt��ZUd�dvdw�ZVdxdy��ZWdzd{��ZXd|d}��ZYd~d��ZZd�d�d��Z[d�d���Z\d�d���Z]d�d���Z^d�d���Z_d�d���Z`d�d���Zad�d���Zbd�d���Zcd�d���Zdd�d���Zed�d���Zfd�d���Zgd�d���Zhd�d���Zid�d���Zjd�d���Zkd�d���Zld�d���Zmd'S�)�� BackStorez4.1zLSM_SIMULATOR_DATA_%srG���r<���r>���zsim-01zLSM simulated storage plug-ini�������� ����#����)i� ��i�@��i����i���r^���i���i���i���c�������������� ���C���s ��t�j�|�s2t��t��|t�jt�jB����t��|d��||�_d�|�_ t j|tt |d��dd�|�_t|�j_d}|d7�}|d7�}|d7�}|d 7�}|d 7�}|d7�}|d7�}|d 7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d7�}|d 7�}|d!7�}|d"7�}|jf�i�d#tj�tjtjtjtjd$���}|�j���}z|�|��W�nt�t j�y��}�z d%t|�v��r�n|�W�Y�d�}~nBd�}~0��t j�y�}�zttjd&|�j���W�Y�d�}~n d�}~0�0�d�S�)'Ni�������Z IMMEDIATE)�timeoutZisolation_levelzPRAGMA foreign_keys = ON; z� CREATE TABLE systems ( id TEXT PRIMARY KEY, name TEXT NOT NULL, status INTEGER NOT NULL, status_info TEXT, read_cache_pct INTEGER, version TEXT NOT NULL); a%�� CREATE TABLE tgts ( id INTEGER PRIMARY KEY, port_type INTEGER NOT NULL, service_address TEXT NOT NULL, network_address TEXT NOT NULL, physical_address TEXT NOT NULL, physical_name TEXT NOT NULL); a��� CREATE TABLE pools ( id INTEGER PRIMARY KEY, name TEXT UNIQUE NOT NULL, status INTEGER NOT NULL, status_info TEXT, element_type INTEGER NOT NULL, unsupported_actions INTEGER, raid_type INTEGER NOT NULL, parent_pool_id INTEGER, member_type INTEGER, strip_size INTEGER, total_space LONG); a��� CREATE TABLE disks ( id INTEGER PRIMARY KEY, total_space LONG NOT NULL, disk_type INTEGER NOT NULL, status INTEGER NOT NULL, disk_prefix TEXT NOT NULL, location TEXT NOT NULL, owner_pool_id INTEGER, role TEXT, vpd83 TEXT, rpm INTEGER, link_type INTEGER, FOREIGN KEY(owner_pool_id) REFERENCES pools(id) ON DELETE SET DEFAULT); a;�� CREATE TABLE volumes ( id INTEGER PRIMARY KEY, vpd83 TEXT NOT NULL, name TEXT UNIQUE NOT NULL, total_space LONG NOT NULL, consumed_size LONG NOT NULL, admin_state INTEGER, is_hw_raid_vol INTEGER, write_cache_policy INTEGER NOT NULL, read_cache_policy INTEGER NOT NULL, phy_disk_cache INTEGER NOT NULL, pool_id INTEGER NOT NULL, FOREIGN KEY(pool_id) REFERENCES pools(id) ON DELETE CASCADE); zx CREATE TABLE ags ( id INTEGER PRIMARY KEY, name TEXT UNIQUE NOT NULL); z� CREATE TABLE inits ( id TEXT UNIQUE NOT NULL, init_type INTEGER NOT NULL, owner_ag_id INTEGER NOT NULL, FOREIGN KEY(owner_ag_id) REFERENCES ags(id) ON DELETE CASCADE); a�� CREATE TABLE vol_masks ( vol_id INTEGER NOT NULL, ag_id INTEGER NOT NULL, FOREIGN KEY(vol_id) REFERENCES volumes(id) ON DELETE CASCADE, FOREIGN KEY(ag_id) REFERENCES ags(id) ON DELETE CASCADE); aV�� CREATE TABLE vol_reps ( rep_type INTEGER, src_vol_id INTEGER NOT NULL, dst_vol_id INTEGER NOT NULL, FOREIGN KEY(src_vol_id) REFERENCES volumes(id) ON DELETE CASCADE, FOREIGN KEY(dst_vol_id) REFERENCES volumes(id) ON DELETE CASCADE); a`�� CREATE TABLE fss ( id INTEGER PRIMARY KEY, name TEXT UNIQUE NOT NULL, total_space LONG NOT NULL, consumed_size LONG NOT NULL, free_space LONG, pool_id INTEGER NOT NULL, FOREIGN KEY(pool_id) REFERENCES pools(id) ON DELETE CASCADE); a�� CREATE TABLE fs_snaps ( id INTEGER PRIMARY KEY, name TEXT UNIQUE NOT NULL, fs_id INTEGER NOT NULL, timestamp LONG NOT NULL, FOREIGN KEY(fs_id) REFERENCES fss(id) ON DELETE CASCADE); a-�� CREATE TABLE fs_clones ( src_fs_id INTEGER NOT NULL, dst_fs_id INTEGER NOT NULL, FOREIGN KEY(src_fs_id) REFERENCES fss(id) ON DELETE CASCADE, FOREIGN KEY(dst_fs_id) REFERENCES fss(id) ON DELETE CASCADE); ad�� CREATE TABLE exps ( id INTEGER PRIMARY KEY, fs_id INTEGER NOT NULL, exp_path TEXT UNIQUE NOT NULL, auth_type TEXT, anon_uid INTEGER, anon_gid INTEGER, options TEXT, FOREIGN KEY(fs_id) REFERENCES fss(id) ON DELETE CASCADE); z� CREATE TABLE exp_root_hosts ( host TEXT NOT NULL, exp_id INTEGER NOT NULL, FOREIGN KEY(exp_id) REFERENCES exps(id) ON DELETE CASCADE); z� CREATE TABLE exp_rw_hosts ( host TEXT NOT NULL, exp_id INTEGER NOT NULL, FOREIGN KEY(exp_id) REFERENCES exps(id) ON DELETE CASCADE); z� CREATE TABLE exp_ro_hosts ( host TEXT NOT NULL, exp_id INTEGER NOT NULL, FOREIGN KEY(exp_id) REFERENCES exps(id) ON DELETE CASCADE); z� CREATE TABLE jobs ( id INTEGER PRIMARY KEY, duration REAL NOT NULL, timestamp TEXT NOT NULL, data_type INTEGER, data_id INTEGER); z� CREATE TABLE batteries ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, type INTEGER NOT NULL, status INTEGER NOT NULL); a��� CREATE VIEW pools_view AS SELECT pool0.id, 'POOL_ID_' || SUBSTR('{ID_PADDING}' || pool0.id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_pool_id, pool0.name, pool0.status, pool0.status_info, pool0.element_type, pool0.unsupported_actions, pool0.raid_type, pool0.member_type, pool0.parent_pool_id, 'POOL_ID_' || SUBSTR('{ID_PADDING}' || pool0.parent_pool_id, -{ID_FMT_LEN}, {ID_FMT_LEN}) parent_lsm_pool_id, pool0.strip_size, pool1.total_space total_space, pool1.total_space - pool2.vol_consumed_size - pool3.fs_consumed_size - pool4.sub_pool_consumed_size free_space, pool1.data_disk_count, pool5.disk_count FROM pools pool0 LEFT JOIN ( SELECT pool.id, ifnull(pool.total_space, ifnull(SUM(disk.total_space), 0)) total_space, COUNT(disk.id) data_disk_count FROM pools pool LEFT JOIN disks disk ON pool.id = disk.owner_pool_id AND disk.role = 'DATA' GROUP BY pool.id ) pool1 ON pool0.id = pool1.id LEFT JOIN ( SELECT pool.id, ifnull(SUM(volume.consumed_size), 0) vol_consumed_size FROM pools pool LEFT JOIN volumes volume ON volume.pool_id = pool.id GROUP BY pool.id ) pool2 ON pool0.id = pool2.id LEFT JOIN ( SELECT pool.id, ifnull(SUM(fs.consumed_size), 0) fs_consumed_size FROM pools pool LEFT JOIN fss fs ON fs.pool_id = pool.id GROUP BY pool.id ) pool3 ON pool0.id = pool3.id LEFT JOIN ( SELECT pool.id, ifnull(SUM(sub_pool.total_space), 0) sub_pool_consumed_size FROM pools pool LEFT JOIN pools sub_pool ON sub_pool.parent_pool_id = pool.id GROUP BY pool.id ) pool4 ON pool0.id = pool4.id LEFT JOIN ( SELECT pool.id, COUNT(disk.id) disk_count FROM pools pool LEFT JOIN disks disk ON pool.id = disk.owner_pool_id GROUP BY pool.id ) pool5 ON pool0.id = pool5.id GROUP BY pool0.id; a�� CREATE VIEW tgts_view AS SELECT id, 'TGT_PORT_ID_' || SUBSTR('{ID_PADDING}' || id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_tgt_id, port_type, service_address, network_address, physical_address, physical_name FROM tgts; a��� CREATE VIEW disks_view AS SELECT id, 'DISK_ID_' || SUBSTR('{ID_PADDING}' || id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_disk_id, disk_prefix || '_' || id name, total_space, disk_type, role, status, vpd83, rpm, link_type, location, owner_pool_id FROM disks; af�� CREATE VIEW volumes_view AS SELECT id, 'VOL_ID_' || SUBSTR('{ID_PADDING}' || id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_vol_id, vpd83, name, total_space, consumed_size, admin_state, is_hw_raid_vol, write_cache_policy, read_cache_policy, phy_disk_cache, pool_id, 'POOL_ID_' || SUBSTR('{ID_PADDING}' || pool_id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_pool_id FROM volumes; a��� CREATE VIEW fss_view AS SELECT id, 'FS_ID_' || SUBSTR('{ID_PADDING}' || id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_fs_id, name, total_space, consumed_size, free_space, pool_id, 'POOL_ID_' || SUBSTR('{ID_PADDING}' || pool_id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_pool_id FROM fss; a��� CREATE VIEW bats_view AS SELECT id, 'BAT_ID_' || SUBSTR('{ID_PADDING}' || id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_bat_id, name, type, status FROM batteries; ap�� CREATE VIEW fs_snaps_view AS SELECT id, 'FS_SNAP_ID_' || SUBSTR('{ID_PADDING}' || id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_fs_snap_id, name, timestamp, fs_id, 'FS_ID_' || SUBSTR('{ID_PADDING}' || fs_id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_fs_id FROM fs_snaps; a;�� CREATE VIEW volumes_by_ag_view AS SELECT vol.id, 'VOL_ID_' || SUBSTR('{ID_PADDING}' || vol.id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_vol_id, vol.vpd83, vol.name, vol.total_space, vol.consumed_size, vol.pool_id, 'POOL_ID_' || SUBSTR('{ID_PADDING}' || vol.pool_id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_pool_id, vol.admin_state, vol.is_hw_raid_vol, vol_mask.ag_id ag_id, vol.write_cache_policy, vol.read_cache_policy, vol.phy_disk_cache FROM volumes vol LEFT JOIN vol_masks vol_mask ON vol_mask.vol_id = vol.id; a�� CREATE VIEW ags_view AS SELECT ag.id, 'AG_ID_' || SUBSTR('{ID_PADDING}' || ag.id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_ag_id, ag.name, CASE WHEN count(DISTINCT init.init_type) = 1 THEN init.init_type WHEN count(DISTINCT init.init_type) = 2 THEN {AG_INIT_TYPE_MIXED} ELSE {AG_INIT_TYPE_UNKNOWN} END init_type, group_concat(init.id, '{SPLITTER}') init_ids_str FROM ags ag LEFT JOIN inits init ON ag.id = init.owner_ag_id GROUP BY ag.id ORDER BY init.init_type; aO�� CREATE VIEW ags_by_vol_view AS SELECT ag_new.id, 'AG_ID_' || SUBSTR('{ID_PADDING}' || ag_new.id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_ag_id, ag_new.name, ag_new.init_type, ag_new.init_ids_str, vol_mask.vol_id vol_id FROM ( SELECT ag.id, ag.name, CASE WHEN count(DISTINCT init.init_type) = 1 THEN init.init_type WHEN count(DISTINCT init.init_type) = 2 THEN {AG_INIT_TYPE_MIXED} ELSE {AG_INIT_TYPE_UNKNOWN} END init_type, group_concat(init.id, '{SPLITTER}') init_ids_str FROM ags ag LEFT JOIN inits init ON ag.id = init.owner_ag_id GROUP BY ag.id ORDER BY init.init_type ) ag_new LEFT JOIN vol_masks vol_mask ON vol_mask.ag_id = ag_new.id ; ag�� CREATE VIEW exps_view AS SELECT exp.id, 'EXP_ID_' || SUBSTR('{ID_PADDING}' || exp.id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_exp_id, exp.fs_id, 'FS_ID_' || SUBSTR('{ID_PADDING}' || exp.fs_id, -{ID_FMT_LEN}, {ID_FMT_LEN}) lsm_fs_id, exp.exp_path, exp.auth_type, exp.anon_uid, exp.anon_gid, exp.options, exp2.exp_root_hosts_str, exp3.exp_rw_hosts_str, exp4.exp_ro_hosts_str FROM exps exp LEFT JOIN ( SELECT exp_t2.id, group_concat( exp_root_host.host, '{SPLITTER}') exp_root_hosts_str FROM exps exp_t2 LEFT JOIN exp_root_hosts exp_root_host ON exp_t2.id = exp_root_host.exp_id GROUP BY exp_t2.id ) exp2 ON exp.id = exp2.id LEFT JOIN ( SELECT exp_t3.id, group_concat( exp_rw_host.host, '{SPLITTER}') exp_rw_hosts_str FROM exps exp_t3 LEFT JOIN exp_rw_hosts exp_rw_host ON exp_t3.id = exp_rw_host.exp_id GROUP BY exp_t3.id ) exp3 ON exp.id = exp3.id LEFT JOIN ( SELECT exp_t4.id, group_concat( exp_ro_host.host, '{SPLITTER}') exp_ro_hosts_str FROM exps exp_t4 LEFT JOIN exp_ro_hosts exp_ro_host ON exp_t4.id = exp_ro_host.exp_id GROUP BY exp_t4.id ) exp4 ON exp.id = exp4.id GROUP BY exp.id; ; �0)Z ID_PADDINGZ ID_FMT_LENZAG_INIT_TYPE_MIXEDZAG_INIT_TYPE_UNKNOWNZSPLITTERzalready exists�LStored simulator state incompatible with simulator, please move or delete %s) �os�path�exists�close�open�O_WRONLY�O_CREAT�chmod� statefile� lastrowidr���Zconnect�intr����sql_connr5���Zrow_factory�formatr]����_ID_FMT_LENr���ZINIT_TYPE_ISCSI_WWPN_MIXEDZINIT_TYPE_UNKNOWN�_LIST_SPLITTERr0���Z executescriptr���r���Z DatabaseErrorr���r����INVALID_ARGUMENT)�selfrn���rc����sql_cmd�sql_curr���r ���r ���r!����__init__����s������������� � �� ���� � � � ��_���������)�G�� ��zBackStore.__init__c�����������������C���s\���|�����}t|�dks|d�s dS�d|d����v�rF|d�d�tjkrFdS�ttjd|�j���d�S�)Nr���F�versionTre���) �sim_syss�lenrL���r]����VERSION_SIGNATUREr���r���ru���rn���)rv���r{���r ���r ���r!����_check_version#��s�������zBackStore._check_versionc����������� ��� ���C���s���|������|����r|�����dS�|��dtjtjtjdtj tj d���td�}td�}td�}g�}tdd �D�]:}|��d d|t jt jt��dt jd |�d���|�|�j��qfg�}tdd�D�]F}|��d d|t jt jt��dt jd|�d���t|�d k�r�|�|�j��q�g�}tdd�D�]L}|��d d|t jt jt��t jt jd|�d���t|�d k��r|�|�j���qtdd�D�]2}|��d d|t jt jt��t jt jd|�d����q^|�jdtj|tjtjB�tjB�tjB�tj B�tj!tj"B�d�}|�j#d|tjtjB�tjB�|d��|�jdtj|tjtjB�tjB�d��|�jdtjtjB�tjB�tj$|d ��|��d!t%j&d"d"d"d#d$���|��d!t%j'd%d%d%d&d$���|��d!t%j(d'd(d)d*d$���|��d!t%j(d'd+d,d-d$���|��d!t%j(d'd.d,d-d$���|��d/d0t)j*t)jd1���|��d/d2t)j+t)jd1���|�����dS�dS�)3z^ Raise error if version not match. If empty database found, initiate. N�systemsr&���)�id�name�status�status_inforz����read_cache_pctZ1EiBZ2TiBZ512GiBr���r<����disksz2TiB SATA Diski ��zPort: %d Box: 1 Bay: 1)Zdisk_prefix�total_space� disk_typer�����vpd83�rpm� link_type�locationrB���z 2EiB SAS Diski�:��zPort: %d Box: 1 Bay: 2ra���z512GiB SSD DiskzPort: %d Box: 1 Bay: 3r$���z 2TiB SSD DiskzPort: %d Box: 1 Bay: 4zPool 1)r����rN����sim_disk_ids�element_type�unsupported_actionszPool 2(sub pool of Pool 1))r�����parent_pool_idr�����sizezPool 3)r����rN���r����r����Z lsm_test_aggr)r����r����rN���r����Ztgtsz50:0a:09:86:99:4b:8d:c5ZFC_a_0b)� port_type�service_address�network_address�physical_address� physical_namez50:0a:09:86:99:4b:8d:c6Z FCoE_b_0cz"iqn.1986-05.com.example:sim-tgt-03z sim-iscsi-tgt-3.example.com:3260za4:4e:31:47:f4:e0Z iSCSI_c_0dz 10.0.0.1:3260za4:4e:31:47:f4:e1Z iSCSI_c_0ez%[2001:470:1f09:efe:a64e:31ff::1]:3260� batteriesz'Battery SIMB01, 8000 mAh, 05 March 2016)r����r���r����z&Capacitor SIMC01, 500 J, 05 March 2016),�trans_beginr~����trans_commit� _data_addr]����SYS_ID�SYS_NAMEr���� STATUS_OKr}����_DEFAULT_READ_CACHE_PCTr���r'���r���Z TYPE_SATAr,���Z LINK_TYPE_ATAr(���ro���ZTYPE_SASZ LINK_TYPE_SASr|���ZTYPE_SSDZRPM_NON_ROTATING_MEDIUM�sim_pool_create_from_diskr���rV���r���ZELEMENT_TYPE_POOLZELEMENT_TYPE_FS�ELEMENT_TYPE_VOLUMEZELEMENT_TYPE_DELTAZELEMENT_TYPE_SYS_RESERVED�UNSUPPORTED_VOLUME_GROW�UNSUPPORTED_VOLUME_SHRINK�sim_pool_create_sub_poolrU���r ���ZTYPE_FCZ TYPE_FCOEZ TYPE_ISCSIr���Z TYPE_CHEMICALZTYPE_CAPACITOR) rv���Z size_bytes_1eZ size_bytes_2tZsize_bytes_512gZpool_1_disks�iZtest_pool_disksZssd_pool_disksZ pool_1_idr ���r ���r!����check_version_and_init1��sh����� �������� ����� ����������� �������� ����z BackStore.check_version_and_initc�����������������C���s$���|�j����}|�|��|j|�_|���S�)z9 Execute sql command and get all output. )rq���r0����executero���Zfetchall)rv���rw���rx���r ���r ���r!���� _sql_exec���s���� zBackStore._sql_execc�����������������C���s���d|�}|���|�S�)NzSELECT * FROM %s�r����)rv���� table_namerw���r ���r ���r!���� _get_table���s����zBackStore._get_tablec�����������������C���s���|�j��d��d�S�)NzBEGIN IMMEDIATE TRANSACTION;)rq���r�����rv���r ���r ���r!���r�������s����zBackStore.trans_beginc�����������������C���s���|�j�����d�S�rE���)rq���Zcommitr����r ���r ���r!���r�������s����zBackStore.trans_commitc�����������������C���s���|�j�����d�S�rE���)rq���Zrollbackr����r ���r ���r!���r������s����zBackStore.trans_rollbackc�����������������C���sR���t�|����}dd��t�|����D��}d|dd�|��dd�|��f�}|��|��d�S�)Nc�����������������S���s ���g�|�]}|d�u�rdnt�|��qS�)Nr&���)r�����.0�vr ���r ���r!���� <listcomp>���s���z'BackStore._data_add.<locals>.<listcomp>z INSERT INTO %s (%s) VALUES (%s);z'%s'z', ')rJ���rL����valuesr*���r����)rv���r����Z data_dictrL���r����rw���r ���r ���r!���r�������s���� ���zBackStore._data_addFc�����������������C���sZ���d||f�}|���|�}|rRt|�dkr*d�S�t|�dkr>|d�S�ttjdt�����n|S�d�S�)NzSELECT * FROM %s WHERE %sr���rG���z%_data_find(): Got non-unique data: %s)r����r|���r���r���r����locals)rv����table� condition�flag_uniquerw���Z sim_datasr ���r ���r!���� _data_find��s���� �zBackStore._data_findc�����������������C���s6���|d�u�rd|||f�}nd||||f�}|���|��d�S�)Nz#UPDATE %s SET %s=NULL WHERE id='%s'z#UPDATE %s SET %s='%s' WHERE id='%s'r����)rv���r�����data_idZcolumn_name�valuerw���r ���r ���r!����_data_update��s����� �zBackStore._data_updatec�����������������C���s���d||f�}|���|��d�S�)NzDELETE FROM %s WHERE %s;r����)rv���r����r����rw���r ���r ���r!����_data_delete��s����zBackStore._data_deleteNc�����������������C���s*���|���dt�dtj�t���||d���|�jS�)z* Return a job id(Integer) �jobsZLSM_SIM_TIME)�duration� timestamp� data_typer����)r����rf����getenvr]����JOB_DEFAULT_DURATION�timero���)rv���Z job_data_typer����r ���r ���r!����sim_job_create#��s������zBackStore.sim_job_createc�����������������C���s���|���dd|���d�S�)Nr�����id="%s"�r����)rv���� sim_job_idr ���r ���r!����sim_job_delete4��s����zBackStore.sim_job_deletec�����������������C���s����|�j�dd|�dd�}|du�r(ttjd��|d�dkrZtt���t|d ���|d��d ��}nd }d}d}|dk�rrd}|d kr�d }|d�tjkr�|�� |d��}|d�}nJ|d�tj kr�|��|d��}|d�}n$|d�tjkr�|�� |d��}|d�}|||fS�) zg Return (progress, data_type, data) tuple. progress is the integer of percent. r�����id=%sT�r����N� Job not foundr����r���r�����d���r����r����)r����r���r���� NOT_FOUND_JOBrp���r�����floatr]����JOB_DATA_TYPE_VOL� sim_vol_of_id�JOB_DATA_TYPE_FS�sim_fs_of_id�JOB_DATA_TYPE_FS_SNAP�sim_fs_snap_of_id)rv���r����Zsim_job�progress�datar����r ���r ���r!����sim_job_status7��s:������� zBackStore.sim_job_statusc�����������������C���s ���|���d�S�)z0 Return a list of sim_sys dict. r����r����r����r ���r ���r!���r{���\��s����zBackStore.sim_syssc�����������������C���s���t�dd��|��dd|��D���S�)Nc�����������������s���s���|�]}|d��V��qdS�)�lsm_disk_idNr ����r����r2���r ���r ���r!���� <genexpr>c��s����z1BackStore.lsm_disk_ids_of_pool.<locals>.<genexpr>� disks_view�owner_pool_id="%s"�rJ���r�����rv����sim_pool_idr ���r ���r!����lsm_disk_ids_of_poolb��s ������zBackStore.lsm_disk_ids_of_poolc�����������������C���s ���|���d�S�)z1 Return a list of sim_disk dict. r����r����r����r ���r ���r!���� sim_disksh��s����zBackStore.sim_disksc�����������������C���s ���|���d�S�)z1 Return a list of sim_pool dict. � pools_viewr����r����r ���r ���r!���� sim_poolsn��s����zBackStore.sim_poolsc�����������������C���s���|���d|tjd�S�)Nr����r���)�_sim_data_of_idr����NOT_FOUND_POOLr����r ���r ���r!����sim_pool_of_idt��s�����zBackStore.sim_pool_of_idr���c����������� ������C���s����|dkrt�j}|tjks"|tjkr(t�j}|��d|tjd|||tj |d���t �|t|��}|�j }|d�|��D�]$} |��d| d|��|��d| dd��ql||d���D�]$} |��d| d|��|��d| dd ��q�|S�) Nr����poolsr&���)r����r����r����r����r����rN����member_type� strip_sizer����Z owner_pool_id�roleZDATAZPARITY)r]����DEFAULT_STRIP_SIZEr���rV���rT����BLK_SIZEr����r���r�����MEMBER_TYPE_DISKr6���rP���r|���ro���r����) rv���r����r����rN���r����r����r����rP���r����Zsim_disk_idr ���r ���r!���r����x��sB���� ���� � �z#BackStore.sim_pool_create_from_diskc�������������� ���C���s,���|���d|tjd||tjtj||d� ��|�jS�)Nr����r&���) r����r����r����r����r����rN���r����r����r����)r����r���r����r����RAID_TYPE_OTHER�MEMBER_TYPE_POOLro���)rv���r����r����r����r����r����r ���r ���r!���r�������s������z"BackStore.sim_pool_create_sub_poolc�����������������C���s���|���d|��d�d�S�)Nz3SELECT COUNT(id) FROM disks WHERE owner_pool_id=%s;r���r����r����r ���r ���r!����sim_pool_disks_count���s��������zBackStore.sim_pool_disks_countc�����������������C���s���|���d|��d�d�S�)NzCSELECT COUNT(id) FROM disks WHERE owner_pool_id=%s and role='DATA';r���r����r����r ���r ���r!����sim_pool_data_disks_count���s�������z#BackStore.sim_pool_data_disks_countc�����������������C���s"���|r|���dd|��S�|��d�S�dS�)z0 Return a list of sim_vol dict. Zvolumes_by_ag_viewzag_id=%s�volumes_viewN�r����r�����rv���� sim_ag_idr ���r ���r!����sim_vols���s �����zBackStore.sim_volsc�����������������C���s8���|�j�|d|�dd�}|d�u�r4|r0t|d|���nd�S�|S�)Nr����Tr����z%s not found)r����r���)rv���r����r�����lsm_error_noZ data_name�sim_datar ���r ���r!���r�������s�����zBackStore._sim_data_of_idc�����������������C���s���|���d|tjd�S�)zD Return sim_vol if found. Raise error if not found. r����r���)r����r����NOT_FOUND_VOLUME�rv���� sim_vol_idr ���r ���r!���r�������s�����zBackStore.sim_vol_of_idc�����������������C���s&���|���|�}|d�|k�r"ttjd��d�S�)N� free_space�Insufficient space in pool)r����r���r����NOT_ENOUGH_SPACE)rv���r����� size_bytes�sim_poolr ���r ���r!����_check_pool_free_space���s ���� �z BackStore._check_pool_free_spacec�����������������C���s���|�t�j�d�t�j�t�j�S�rF���)r]���r����)r����r ���r ���r!����_block_rounding���s ������zBackStore._block_roundingc�������������� ���C���s����t��|�}|��||��t��}t��|d<�||d<�||d<�||d<�||d<�tj|d<�||d<�t�j|d<�t�j|d <�t�j |d <�z|�� d|��W�n6�tjy��}�zt tjd|���W�Y�d�}~n d�}~0�0�|�jS�) Nr����r�����pool_idr����� consumed_size�admin_state�is_hw_raid_vol�write_cache_policy�read_cache_policy�phy_disk_cache�volumes�+Name '%s' is already in use by other volume)r]���r����r�����dictr,���r����ADMIN_STATE_ENABLED�DEFAULT_WRITE_CACHE_POLICY�DEFAULT_READ_CACHE_POLICY�DEFAULT_PHYSICAL_DISK_CACHEr����r����IntegrityErrorr���r���� NAME_CONFLICTro���)rv���r����r����r����r���sim_volr���r ���r ���r!����sim_vol_create���s*���� �zBackStore.sim_vol_createc�����������������C���s����|���|�}|��|�r ttjd��|��|�}t|�dkrT|D�]}||kr:ttjd��q:|d�r�|��dd|d���D�]}|�� d|d �d d��qp|�� dd |d����n|�� dd |���dS�)zB This does not check whether volume exist or not. z Volume is masked to access grouprG���z%Requested volume has child dependencyr��r����r����r���r����r����r����Nr����r����r��)r�����_sim_ag_ids_of_masked_volr���r���� IS_MASKED�dst_sim_vol_ids_of_srcr|����HAS_CHILD_DEPENDENCYr����r����r����)rv���r����r���dst_sim_vol_ids�dst_sim_vol_idr2���r ���r ���r!����sim_vol_delete��s&���� � �� zBackStore.sim_vol_deletec�����������������C���sN���|���|��|��|��|��dd||f��}|r8ttjd��|��d||d���d�S�)N� vol_masks�ag_id="%s" AND vol_id="%s"z2Volume is already masked to requested access group)�ag_id�vol_id)r�����sim_ag_of_idr����r���r����NO_STATE_CHANGEr����)rv���r����r����� exist_maskr ���r ���r!����sim_vol_mask��s���� ��zBackStore.sim_vol_maskc�����������������C���sN���|���|��|��|��d||f�}|��d|�}|r>|��d|��nttjd��d�S�)Nr��r��z.Volume is not masked to requested access group)r����r��r����r����r���r���r��)rv���r����r����r����r��r ���r ���r!����sim_vol_unmask.��s���� �zBackStore.sim_vol_unmaskc�����������������C���s���t�dd��|��dd|��D���S�)Nc�����������������s���s���|�]}|d��V��qdS�)r��Nr ����r�����mr ���r ���r!���r����;��s����z6BackStore._sim_vol_ids_of_masked_ag.<locals>.<genexpr>r��z ag_id="%s"r����r����r ���r ���r!����_sim_vol_ids_of_masked_ag:��s ������z#BackStore._sim_vol_ids_of_masked_agc�����������������C���s���t�dd��|��dd|��D���S�)Nc�����������������s���s���|�]}|d��V��qdS�)r��Nr ���r"��r ���r ���r!���r����@��s����z6BackStore._sim_ag_ids_of_masked_vol.<locals>.<genexpr>r��zvol_id="%s"r����r����r ���r ���r!���r��?��s ������z#BackStore._sim_ag_ids_of_masked_volc�����������������C���s����t��|�}|��|�}|d�|kr,ttjd��|��|d��}||d��}|dkr�|d�tj@�rhttj d��|d�|k�r�ttj d��n|d�tj@�r�ttj d��|��d |d|��|��d |d |��d�S�)Nr����z%Volume size is identical to requestedr���r���r����z.Requested pool does not allow volume size growr����r����r��r��) r]���r����r����r���r���r��r����r���r����� NO_SUPPORTr����r����r����)rv���r�����new_size_bytesr��r����Z incrementr ���r ���r!����sim_vol_resizeD��s4���� ���� �zBackStore.sim_vol_resizec�����������������C���s(���|���|��tdd��|��dd|��D���S�)zL Return a list of dst_vol_id for provided source volume ID. c�����������������s���s���|�]}|d��V��qdS�)� dst_vol_idNr ���r����r ���r ���r!���r����i��s����z3BackStore.dst_sim_vol_ids_of_src.<locals>.<genexpr>�vol_reps�src_vol_id="%s")r����rJ���r�����rv����src_sim_vol_idr ���r ���r!���r��d��s���� ��z BackStore.dst_sim_vol_ids_of_srcc�����������������C���st���|���|��|���|��||kr d�S�|tjkr.d�S�tdd��|��dd|��D���}t|�dkr\d�S�|��d|||d���d�S�)Nc�����������������s���s���|�]}|d��V��qdS�)� src_vol_idNr ���)r�����rr ���r ���r!���r������s����z,BackStore.sim_vol_replica.<locals>.<genexpr>r)��zdst_vol_id="%s"rG���)r-��r(���rep_type)r����r���ZREPLICATE_COPYrJ���r����r|���r����)rv���r,��r��r/��Z blk_rangesZcur_src_sim_vol_idsr ���r ���r!����sim_vol_replican��s(���� ����zBackStore.sim_vol_replicac�����������������C���s*���|���|�sttjd��|��dd|���d�S�)Nz+Provided volume is not a replication sourcer)��r*��)r��r���r���r��r����r+��r ���r ���r!����sim_vol_src_replica_break���s ���� �z#BackStore.sim_vol_src_replica_breakc�����������������C���s6���|���|�}|d�|kr"ttjd��|��d|d|��d�S�)Nr��z,Volume admin state is identical to requestedr��)r����r���r���r��r����)rv���r����Znew_admin_stater��r ���r ���r!����sim_vol_state_change���s���� � �zBackStore.sim_vol_state_changec�����������������C���s���|�d���tj�|�d<�|�d=�|�S�)z= Update 'init_type' and 'init_ids' of sim_ag Zinit_ids_str�init_ids��splitr]���rt�����sim_agr ���r ���r!����_sim_ag_format���s �����zBackStore._sim_ag_formatc�����������������C���s.���|r|���dd|��}n |��d�}dd��|D��S�)NZags_by_vol_viewz vol_id=%s�ags_viewc�����������������S���s���g�|�]}t��|��qS�r ���)r]���r8���r�����ar ���r ���r!���r�������r:���z%BackStore.sim_ags.<locals>.<listcomp>r����)rv���r�����sim_agsr ���r ���r!���r<�����s����� zBackStore.sim_agsc�������������� ���C���sT���z|���d|||d���W�n6�tjyN�}�zttjd|���W�Y�d�}~n d�}~0�0�d�S�)N�inits)r����� init_typeZowner_ag_idz6Initiator '%s' is already in use by other access group)r����r���r��r���r���ZEXISTS_INITIATOR)rv���r>���init_idr����r���r ���r ���r!����_sim_init_create���s�������zBackStore._sim_init_createc�����������������C���s���d�S�rE���r ���)rv���r?���in_user�in_pass�out_user�out_passr ���r ���r!����iscsi_chap_auth_set���s����zBackStore.iscsi_chap_auth_setc�������������� ���C���sd���z|���dd|i��|�j}W�n6�tjyP�}�zttjd|���W�Y�d�}~n d�}~0�0�|��|||��|S�)N�agsr����z1Name '%s' is already in use by other access group)r����ro���r���r��r���r���r��r@��)rv���r����r>��r?��r����r���r ���r ���r!���� sim_ag_create���s���� �zBackStore.sim_ag_createc�����������������C���s4���|���|��|��|�r ttjd��|��dd|���d�S�)Nz!Access group has volume masked torF��r����)r��r$��r���r���r��r����r����r ���r ���r!���� sim_ag_delete���s���� �zBackStore.sim_ag_deletec�����������������C���sT���|���|�}||d�v�r"ttjd��|tjkrB|tjkrBttjd��|��|||��d�S�)Nr3��z!Initiator already in access groupz.Only support iSCSI IQN and WWPN initiator type) r��r���r���r��r���ZINIT_TYPE_ISCSI_IQNZINIT_TYPE_WWPNr%��r@��)rv���r����r?��r>��r7��r ���r ���r!����sim_ag_init_add���s���� � ��zBackStore.sim_ag_init_addc�����������������C���sR���|���|�}||d�vr"ttjd��t|d��dkr>ttjd��|��dd|���d�S�)Nr3��z(Initiator is not in defined access grouprG���z6Refused to remove the last initiator from access groupr=��r����)r��r���r���r��r|���ZLAST_INIT_IN_ACCESS_GROUPr����)rv���r����r?��r7��r ���r ���r!����sim_ag_init_delete���s���� ��zBackStore.sim_ag_init_deletec�����������������C���s ���|���d|tjd�}t�|��|S�)Nr9��zAccess Group)r����r���ZNOT_FOUND_ACCESS_GROUPr]���r8��)rv���r����r7��r ���r ���r!���r�����s����� zBackStore.sim_ag_of_idc�����������������C���s ���|���d�S�)z/ Return a list of sim_fs dict. �fss_viewr����r����r ���r ���r!����sim_fss���s����zBackStore.sim_fssTc�����������������C���s���t�j}|sd�}|��d||d�S�)NrK��zFile System)r����NOT_FOUND_FSr����)rv���� sim_fs_idZraise_errorr����r ���r ���r!���r������s���� �zBackStore.sim_fs_of_idc�������������� ���C���sp���t��|�}|��||��z|��d|||||d���W�n6�tjyh�}�zttjd|���W�Y�d�}~n d�}~0�0�|�j S�)N�fss)r����r����r��r����r���z'Name '%s' is already in use by other fs) r]���r����r����r����r���r��r���r���r��ro���)rv���r����r����r����r���r ���r ���r!���� sim_fs_create��s"���� ���zBackStore.sim_fs_createc�����������������C���s4���|���|��|��|�r ttjd��|��dd|���d�S�)Nz*Requested file system has child dependencyrO��r����)r�����clone_dst_sim_fs_ids_of_srcr���r���r��r�����rv���rN��r ���r ���r!���� sim_fs_delete��s���� �zBackStore.sim_fs_deletec�����������������C���s����t��|�}|��|�}|d�|kr,ttjd��|��|d��}||d�krf|d�||d��k�rfttjd��|��d|d|��|��d|d|��|��d|d|��d�S�)Nr����z*File System size is identical to requestedr���r����r����rO��r��) r]���r����r����r���r���r��r����r����r����)rv���rN��r&���sim_fsr����r ���r ���r!���� sim_fs_resize%��s ���� ���zBackStore.sim_fs_resizec�����������������C���s���|���|��|��dd|��S�)N� fs_snaps_viewz fs_id="%s")r����r����rR��r ���r ���r!����sim_fs_snaps;��s���� zBackStore.sim_fs_snapsc�����������������C���s2���|���d|tjd�}|r.|d�|kr.ttjd��|S�)NrV��zFile system snapshot�fs_idzFDefined file system snapshot ID is not belong to requested file system)r����r����NOT_FOUND_FS_SSr���)rv����sim_fs_snap_idrN���sim_fs_snapr ���r ���r!���r����?��s������zBackStore.sim_fs_snap_of_idc�������������� ���C���sd���|���|��z |��d||tt����d���W�n2�tjy\�}�zttjd��W�Y�d�}~n d�}~0�0�|�j S�)N�fs_snaps)r����rX��r����z6The name is already used by other file system snapshot) r����r����rp���r����r���r��r���r���r��ro���)rv���rN��r����r���r ���r ���r!����sim_fs_snap_createJ��s���� ��zBackStore.sim_fs_snap_createc�����������������C���s���|���|��|r|��||��d�S�rE����r����r����)rv���rN��rZ���files� restore_files�flag_all_filesr ���r ���r!����sim_fs_snap_restoreX��s���� zBackStore.sim_fs_snap_restorec�����������������C���s*���|���|��|��||��|��dd|���d�S�)Nr\��r����)r����r����r����)rv���rZ��rN��r ���r ���r!����sim_fs_snap_deletea��s���� zBackStore.sim_fs_snap_deletec�����������������C���s���d|�}|���|��d�S�)Nz&DELETE FROM fs_snaps WHERE fs_id='%s';r����)rv���rN��rw���r ���r ���r!����sim_fs_snap_del_by_fsf��s����zBackStore.sim_fs_snap_del_by_fsc�����������������C���s:���|���|��|���|��|r$|��||��|��d||d���d�S�)N� fs_clones)� src_fs_id� dst_fs_id)r����r����r����)rv���� src_sim_fs_id� dst_sim_fs_idrZ��r ���r ���r!����sim_fs_clonej��s���� �zBackStore.sim_fs_clonec�����������������C���s���|���|��|r|��||��d�S�rE���r^��)rv���rN���src_fs_name�dst_fs_namerZ��r ���r ���r!����sim_fs_file_cloney��s���� zBackStore.sim_fs_file_clonec�����������������C���s(���|���|��tdd��|��dd|��D���S�)zM Return a list of dst_fs_id for provided clone source fs ID. c�����������������s���s���|�]}|d��V��qdS�)rg��Nr ���r����r ���r ���r!���r�������s����z8BackStore.clone_dst_sim_fs_ids_of_src.<locals>.<genexpr>re���src_fs_id="%s")r����rJ���r�����rv���rh��r ���r ���r!���rQ�����s���� ��z%BackStore.clone_dst_sim_fs_ids_of_srcc�����������������C���s���|���dd|���d�S�)Nre��rn��r����ro��r ���r ���r!����sim_fs_src_clone_break���s����z BackStore.sim_fs_src_clone_breakc�����������������C���sB���dD�]8}d|�}||�r.||���tj�||<�ng�||<�||=�q|S�)N)� root_hosts�rw_hosts�ro_hostsz exp_%s_strr4��)rv����sim_expZkey_namer����r ���r ���r!����_sim_exp_format���s����� zBackStore._sim_exp_formatc��������������������s���t���fdd����d�D���S�)Nc�����������������3���s���|�]}����|�V��qd�S�rE���)ru���r�����er����r ���r!���r�������s���z%BackStore.sim_exps.<locals>.<genexpr>� exps_view)rJ���r����r����r ���r����r!����sim_exps���s�����zBackStore.sim_expsc�����������������C���s���|���|��d|tjd��S�)Nrx��z NFS Export)ru��r����r����NOT_FOUND_NFS_EXPORT�rv���� sim_exp_idr ���r ���r!���� sim_exp_of_id���s������zBackStore.sim_exp_of_idc �������������� ���C���s����|d�u�rdt���d�d���}|��|��z|��d|||||| d���W�n2�tjyt�} �zttjd��W�Y�d�} ~ n d�} ~ 0�0�|�j}|D�]}|��d||d���q�|D�]} |��d| |d���q�|D�]}|��d ||d���q�|S�) Nz/nfs_exp_%srD����exps)rX���exp_path�anon_uid�anon_gid� auth_type�optionsz/Export path is already used by other NFS exportZexp_root_hosts)�host�exp_idZexp_rw_hostsZexp_ro_hosts) r,���r����r����r���r��r���r���r��ro���)rv���rN��r��rq��rr��rs��r���r���r���r���r���r|��Z root_hostZrw_hostZro_hostr ���r ���r!����sim_exp_create���sF���� �� �� � � zBackStore.sim_exp_createc�����������������C���s���|���|��|��dd|���d�S�)Nr~��r����)r}��r����r{��r ���r ���r!����sim_exp_delete���s���� zBackStore.sim_exp_deletec�����������������C���s ���|���d�S�)z0 Return a list of sim_tgt dict. Z tgts_viewr����r����r ���r ���r!����sim_tgts���s����zBackStore.sim_tgtsc�����������������C���s ���|���d�S�)z0 Return a list of sim_bat dict. Z bats_viewr����r����r ���r ���r!����sim_bats���s����zBackStore.sim_batsc�����������������C���s���|���|��|��d|d|��d�S�)Nr��r���r����r����)rv���r�����pdcr ���r ���r!����sim_vol_pdc_set���s���� zBackStore.sim_vol_pdc_setc�����������������C���s���|���|��|��d|d|��d�S�)Nr��r��r���)rv���r�����rcpr ���r ���r!����sim_vol_rcp_set���s���� zBackStore.sim_vol_rcp_setc�����������������C���s���|���|��|��d|d|��d�S�)Nr��r��r���)rv���r�����wcpr ���r ���r!����sim_vol_wcp_set���s���� zBackStore.sim_vol_wcp_set)F)NN)r���r���)r���)N)N)r���)N)N)T)N)nrQ���rR���rS���ZVERSIONr}���r����r����r����r����r����r����r����r����r���ZMODE_HARDWARE_RAID�SYS_MODEr����WRITE_CACHE_POLICY_AUTOr���READ_CACHE_POLICY_ENABLEDr��ZPHYSICAL_DISK_CACHE_DISABLEDr ��r����rt���rs���rU���rV���rW���rX���rY���rZ���r[����SUPPORTED_VCR_RAID_TYPES�SUPPORTED_VCR_STRIP_SIZESry���r~���r����r����r����r����r����r���r����r����r����r����r����r����r����r{���r����r����r����r����r����r����r����r����r����r����r����r����r\���r����r��r��r ��r!��r$��r��r'��r��r0��r1��r2��r8��r<��r@��rE��rG��rH��rI��rJ��r��rL��r����rP��rS��rU��rW��r����r]��rb��rc��rd��rj��rm��rQ��rp��ru��ry��r}��r���r���r���r���r���r���r���r ���r ���r ���r!���r]���v���s�����������4 % ��� 0�� �� $ *r]���c�������������������@���s��e�Zd�Ze�de���d��Zedd���Z edd���Z edd���Zed d ���Zedd���Z ed d���Zedd���Zedd���Zedd���Zd�dd�Zed�dd��Zed�dd��Zed�dd��Zed�dd ��Zed!d"���Zed#d$���Zed�d%d&��Zed'd(���Zed)d*���Zed+d,���Zed�d-d.��Zed/d0���Zed1d2���Z ed�d4d5��Z!ed�d6d7��Z"ed�d8d9��Z#ed�d:d;��Z$ed�d<d=��Z%ed�d>d?��Z&ed�d@dA��Z'ed�dBdC��Z(ed�dDdE��Z)ed�dFdG��Z*edHdI���Z+edJdK���Z,ed�dLdM��Z-ed�dNdO��Z.ed�dPdQ��Z/ed�dRdS��Z0ed�dTdU��Z1edVdW���Z2ed�dXdY��Z3ed�dZd[��Z4ed�d\d]��Z5ed^d_���Z6ed�d`da��Z7ed�dbdc��Z8eddde���Z9ed�dfdg��Z:ed�dhdi��Z;ed�djdk��Z<edldm���Z=edndo���Z>ed�dpdq��Z?ed�drds��Z@ed�dtdu��ZAed�dvdw��ZBed�dxdy��ZCed�dzd{��ZDed�d|d}��ZEed�d~d��ZFed�d�d���ZGed�d����ZHed�d����ZIed�d����ZJed�d����ZKed�d����ZLed�d����ZMed�d�d���ZNed�d�d���ZOed�d����ZPed�d����ZQed�d����ZRed�d�d���ZSed�d�d���ZTed�d�d���ZUdS�)�r���ZLSM_SIM_DATAz /lsm_sim_datac�����������������C���s2���zt�|�tj�d����W�S��ty,���|�Y�n0�d�S�rE���)rp���r]���rs���� ValueError)Zlsm_idZ lsm_errorr ���r ���r!����_lsm_id_to_sim_id���s����zSimArray._lsm_id_to_sim_idc�����������������C���s���t��|�ttjd��S�)Nr����)r���r���r���r���r����)�job_idr ���r ���r!����_sim_job_id_of���s�����zSimArray._sim_job_id_ofc�����������������C���s���t��|�ttjd��S�)N�Pool not found)r���r���r���r���r����)r���r ���r ���r!����_sim_pool_id_of���s�����zSimArray._sim_pool_id_ofc�����������������C���s���t��|�ttjd��S��N�Volume not found)r���r���r���r���r����)r��r ���r ���r!����_sim_vol_id_of���s�����zSimArray._sim_vol_id_ofc�����������������C���s���t��|�ttjd��S�)NzFile system not found)r���r���r���r���rM��)rX��r ���r ���r!���� _sim_fs_id_of��s�����zSimArray._sim_fs_id_ofc�����������������C���s���t��|�ttjd��S�)NzFile system snapshot not found)r���r���r���r���rY��)�snap_idr ���r ���r!����_sim_fs_snap_id_of ��s������zSimArray._sim_fs_snap_id_ofc�����������������C���s���t��|�ttjd��S��NzFile system export not found�r���r���r���r���rz��)r���r ���r ���r!����_sim_exp_id_of��s������zSimArray._sim_exp_id_ofc�����������������C���s���t��|�ttjd��S�r���r���)r��r ���r ���r!���� _sim_ag_id_of��s������zSimArray._sim_ag_id_ofc�����������������C���s4���|d�u�rt�j}t||�|�_|�j����||�_||�_d�S�rE���)r���� SIM_DATA_FILEr]���r���r����rn���rc���)rv���rn���rc���r ���r ���r!���ry�����s���� zSimArray.__init__Nc�����������������C���s���|�j��||�}dtj|f�S�)NzJOB_ID_%0*d)r���r����r]���rs���)rv���r����Zsim_data_idr����r ���r ���r!����_job_create(��s����zSimArray._job_creater���c����������� ������C���s~���t��|�}|�j�|�\}}}tj}|dkr0tj}d�}|tjkrJt�� |�}n*|tj kr`t��|�}n|tjkrtt�� |�}|||fS�)Nr����)r���r���r���r����r���Z INPROGRESSZCOMPLETEr]���r�����_sim_vol_2_lsmr����� _sim_fs_2_lsmr�����_sim_fs_snap_2_lsm) rv���r����flagsr����r����r����r����r����r����r ���r ���r!���� job_status,��s���� � zSimArray.job_statusc�����������������C���s*���|�j�����|�j��t�|���|�j�����d�S�rE���)r���r����r����r���r���r����)rv���r���r���r ���r ���r!����job_free@��s���� zSimArray.job_freec�����������������C���s"���t�|�jtt|d���|�_||�_d�S�)Nrb���)r]���rn���rp���r���r���rc���)rv����msr���r ���r ���r!����time_out_setG��s����zSimArray.time_out_setc�����������������C���s���|�j�S�rE���)rc����rv���r���r ���r ���r!����time_out_getM��s����zSimArray.time_out_getc�������������� ���C���s0���t�|�d�|�d�|�d�|�d�|�d�tj|�d�d�S�)Nr����r����r����r����rz���r����)Z_fw_version�_modeZ_read_cache_pct)r���r]���r���)�sim_sysr ���r ���r!����_sim_sys_2_lsmQ��s�����zSimArray._sim_sys_2_lsmc�����������������C���s���t�dd��|�j���D���S�)Nc�����������������s���s���|�]}t��|�V��qd�S�rE���)r���r���)r����r���r ���r ���r!���r����]��s����z#SimArray.systems.<locals>.<genexpr>)rJ���r���r{���r����r ���r ���r!���r���[��s�����zSimArray.systemsc�����������������C���sD���|j�tjkrttjd��|�j����|�j�dtjd|��|�j� ���d�S�)N�System not foundr���r����) r����r]���r����r���r����NOT_FOUND_SYSTEMr���r����r����r����)rv����systemZread_pctr���r ���r ���r!����system_read_cache_pct_updatea��s���� � z%SimArray.system_read_cache_pct_updatec�������������� ���C���s>���t�|�d�|�d�|�d�tjtt|�d�tj��|�d�tj|�d��S�)NZ lsm_vol_idr����r����r����r���lsm_pool_id)r���r]���r����rp���r���r����)r��r ���r ���r!���r���m��s���� � �zSimArray._sim_vol_2_lsmc�����������������C���s���t�dd��|�j���D���S�)Nc�����������������s���s���|�]}t��|�V��qd�S�rE����r���r���r����r ���r ���r!���r����w��r:���z#SimArray.volumes.<locals>.<genexpr>)rJ���r���r����r����r ���r ���r!���r��u��s����zSimArray.volumesc����������� ��� ���C���s^���|�d�}|�d�}|�d�}|�d�}|�d�}|�d�}t�j}|�d�}|�d�} t|||| |||||� S�) Nr���r����r����r����r����r����r����r����)r]���r����r���) r����r���r����r����r����r����r�����sys_idr����r����r ���r ���r!����_sim_pool_2_lsmy��s���� �zSimArray._sim_pool_2_lsmc�����������������C���s0���|�j�����|�j����}|�j�����tdd��|D���S�)Nc�����������������s���s���|�]}t��|�V��qd�S�rE���)r���r���)r����r����r ���r ���r!���r�������s���z!SimArray.pools.<locals>.<genexpr>)r���r����r����r���rJ���)rv���r���r����r ���r ���r!���r�������s���� �zSimArray.poolsc�������������� ���C���sj���t�j}|�d�d�u�r|t�jO�}t�|�d�|�d�|�d�tjtt|�d�tj��|tj|�d�|�d�|�d�|�d �d �S�)Nr����r����r����r����r����r����r����r����r����)Z_vpd83Z _locationZ_rpmZ _link_type)r���r�����STATUS_FREEr]���r����rp���r���r����)�sim_diskZdisk_statusr ���r ���r!����_sim_disk_2_lsm���s���� �zSimArray._sim_disk_2_lsmc�����������������C���s���t�dd��|�j���D���S�)Nc�����������������s���s���|�]}t��|�V��qd�S�rE���)r���r���)r����r���r ���r ���r!���r�������s����z!SimArray.disks.<locals>.<genexpr>)rJ���r���r����r����r ���r ���r!���r�������s�����zSimArray.disksFc����������� ������C���sT���|du�r|�j�����|�j�j||t�|�|d�}|r4|S�|��tj|�} |�j�����| dfS�)z� The '_internal_use' parameter is only for SimArray internal use. This method will return the new sim_vol id instead of job_id when '_internal_use' marked as True. F)r��N) r���r����r��r���r���r���r]���r����r����) rv���r���Zvol_namer����Zthinpr���� _internal_use�_is_hw_raid_volZnew_sim_vol_idr���r ���r ���r!���� volume_create���s���� � zSimArray.volume_createc�����������������C���s2���|�j�����|�j��t�|���|����}|�j�����|S�rE���)r���r����r��r���r���r���r�����rv���r��r���r���r ���r ���r!���� volume_delete���s ���� zSimArray.volume_deletec�����������������C���sB���|�j�����t�|�}|�j��||��|��tj|�}|�j�����|d�fS�rE���) r���r����r���r���r'��r���r]���r����r����)rv���r��r&��r���r����r���r ���r ���r!���� volume_resize���s���� zSimArray.volume_resizec����������� ������C���sj���|�j�����t�|�}|�j��|�}|�j|||d�tjdd�}|�j��|||��|�� t j|�} |�j�����| d�fS�)Nr����T�r���) r���r����r���r���r����r���r����PROVISION_FULLr0��r���r]���r����r����) rv���Zdst_pool_idr/��r-��Znew_vol_namer���r,��Zsrc_sim_volr��r���r ���r ���r!����volume_replicate���s���� � zSimArray.volume_replicatec�����������������C���s���|t�jkrttjd��t�jS��Nr���)r]���r����r���r���r���r����)rv���r���r���r ���r ���r!����!volume_replicate_range_block_size���s���� z*SimArray.volume_replicate_range_block_sizec�����������������C���s>���|�j�����|�j��t�|�t�|�||��|����}|�j�����|S�rE���)r���r����r0��r���r���r���r����)rv���r/��r-��r(��Zrangesr���r���r ���r ���r!����volume_replicate_range���s���� � zSimArray.volume_replicate_rangec�����������������C���s.���|�j�����|�j��t�|�tj��|�j�����d�S�rE���)r���r����r2��r���r���r���r ��r�����rv���r��r���r ���r ���r!���� volume_enable��s���� � zSimArray.volume_enablec�����������������C���s.���|�j�����|�j��t�|�tj��|�j�����d�S�rE���)r���r����r2��r���r���r���ZADMIN_STATE_DISABLEDr����r���r ���r ���r!����volume_disable��s���� � zSimArray.volume_disablec�����������������C���s2���t��|�}|�j�|�}|D�]}||kr�dS�qdS�)NTF)r���r���r���r��)rv���r��r���r,��r��ri��r ���r ���r!����volume_child_dependency��s���� z SimArray.volume_child_dependencyc�����������������C���s2���|�j�����|�j��t�|���|����}|�j�����|S�rE���)r���r����r1��r���r���r���r����r���r ���r ���r!����volume_child_dependency_rm:��s ���� z#SimArray.volume_child_dependency_rmc�����������������C���s(���t�|�d�|�d�|�d�|�d�|�d�tj�S�)N� lsm_fs_idr����r����r����r���)r���r]���r����)rT��r ���r ���r!���r���D��s���� �zSimArray._sim_fs_2_lsmc�����������������C���s���t�dd��|�j���D���S�)Nc�����������������s���s���|�]}t��|�V��qd�S�rE���)r���r���)r�����fr ���r ���r!���r����L��r:���zSimArray.fs.<locals>.<genexpr>)rJ���r���rL��r����r ���r ���r!����fsJ��s����zSimArray.fsc�����������������C���sL���|s|�j�����|�j��||t�|��}|r,|S�|��tj|�}|�j�����|d�fS�rE���) r���r����rP��r���r���r���r]���r����r����)rv���r���Zfs_namer����r���r���Z new_sim_fs_idr���r ���r ���r!���� fs_createN��s���� � zSimArray.fs_createc�����������������C���s2���|�j�����|�j��t�|���|����}|�j�����|S�rE���)r���r����rS��r���r���r���r����)rv���rX��r���r���r ���r ���r!���� fs_deleted��s ���� zSimArray.fs_deletec�����������������C���sB���t��|�}|�j����|�j�||��|��tj|�}|�j����|d�fS�rE���) r���r���r���r����rU��r���r]���r����r����)rv���rX��r&��r���rN��r���r ���r ���r!���� fs_resizel��s���� zSimArray.fs_resizec�����������������C���s����|�j�����d�}|rt�|�}t�|�}|�j��|�}|d�}|�j|||d�dd�} |�j��|| |��|��t j | �} |�j�����| d�fS�)Nr���r����Tr���)r���r����r���r���r���r����r���rj��r���r]���r����r����)rv���rf��rl��r���r���rZ��rh��Z src_sim_fsr���ri��r���r ���r ���r!����fs_cloneu��s ���� � zSimArray.fs_clonec�����������������C���sJ���|�j�����d�}|rt�|�}|�j��t�|�|||��|����}|�j�����|S�rE���)r���r����r���r���rm��r���r���r����)rv���rX��rk��rl��r���r���rZ��r���r ���r ���r!���� fs_file_clone���s���� � zSimArray.fs_file_clonec�����������������C���s���t�|�d�|�d�|�d��S�)NZlsm_fs_snap_idr����r����)r ���)r[��r ���r ���r!���r������s�����zSimArray._sim_fs_snap_2_lsmc�����������������C���s ���t�dd��|�j�t�|��D���S�)Nc�����������������s���s���|�]}t��|�V��qd�S�rE���)r���r���)r�����sr ���r ���r!���r�������s����z(SimArray.fs_snapshots.<locals>.<genexpr>)rJ���r���rW��r���r���)rv���rX��r���r ���r ���r!����fs_snapshots���s�����zSimArray.fs_snapshotsc�����������������C���s>���|�j�����|�j��t�|�|�}|��tj|�}|�j�����|d�fS�rE���) r���r����r]��r���r���r���r]���r����r����)rv���rX��Z snap_namer���rZ��r���r ���r ���r!����fs_snapshot_create���s���� �� zSimArray.fs_snapshot_createc�����������������C���s:���|�j�����|�j��t�|�t�|���|����}|�j�����|S�rE���)r���r����rc��r���r���r���r���r����)rv���rX��r���r���r���r ���r ���r!����fs_snapshot_delete���s���� � zSimArray.fs_snapshot_deletec����������� ������C���sL���|�j�����d�}|rt�|�}|�j��t�|�||||��|����}|�j�����|S�rE���)r���r����r���r���rb��r���r���r����) rv���rX��r���r_��r`��ra��r���rZ��r���r ���r ���r!����fs_snapshot_restore���s���� � zSimArray.fs_snapshot_restorec�����������������C���sh���t��|�}|du�r|�j����|�j�|�g�krR|�j�|�g�krR|du�rN|�j����dS�|du�rd|�j����dS�)NFT)r���r���r���r����rQ��rW��r���)rv���rX��r_��r���r���rN��r ���r ���r!����fs_child_dependency���s���� � zSimArray.fs_child_dependencyc�����������������C���sb���|�j�����|�j||dd�du�r*ttjd��t�|�}|�j��|��|�j�� |��|�� ��}|�j�����|S�)z� Assuming API defination is break all clone relationship and remove all snapshot of this source file system. Tr���Fz9No snapshot or fs clone target found for this file system)r���r����r���r���r���r��r���r���rp��rd��r���r����)rv���rX��r_��r���rh��r���r ���r ���r!����fs_child_dependency_rm���s���� � zSimArray.fs_child_dependency_rmc�����������������C���sB���t�|�d�|�d�|�d�|�d�|�d�|�d�|�d�|�d�|�d �|�d �� S�)NZ lsm_exp_idr���r��r���rq��rr��rs��r���r���r���)r ���)rt��r ���r ���r!����_sim_exp_2_lsm���s�����zSimArray._sim_exp_2_lsmc�����������������C���s���dd��|�j����D��S�)Nc�����������������S���s���g�|�]}t��|��qS�r ���)r���r���rv��r ���r ���r!���r�������r:���z$SimArray.exports.<locals>.<listcomp>)r���ry��r���r ���r ���r!����exports���s����zSimArray.exportsc����������� ������C���sL���|�j�����|�j��t�|�|||||||| � }|�j��|�}|�j�����t�|�S�rE���)r���r����r���r���r���r}��r����r���) rv���rX��r��rq��rr��rs��r���r���r���r���r���r|��rt��r ���r ���r!���� fs_export���s���� � zSimArray.fs_exportc�����������������C���s*���|�j�����|�j��t�|���|�j�����d�S�rE���)r���r����r���r���r���r����)rv���r���r���r ���r ���r!����fs_unexport ��s���� zSimArray.fs_unexportc�����������������C���s"���t�|�d�|�d�|�d�|�d�tj�S�)NZ lsm_ag_idr����r3��r>��)r���r]���r����r6��r ���r ���r!���� _sim_ag_2_lsm ��s�����zSimArray._sim_ag_2_lsmc�����������������C���s���t�dd��|�j���D���S�)Nc�����������������s���s���|�]}t��|�V��qd�S�rE����r���r���r:��r ���r ���r!���r���� ��r:���zSimArray.ags.<locals>.<genexpr>)rJ���r���r<��r����r ���r ���r!���rF�� ��s����zSimArray.agsc�����������������C���sP���|t�jkrttjd��|�j����|�j�|||�}|�j�|�}|�j� ���t �|�S�r���)r]���r����r���r���r���r���r����rG��r��r����r���r���)rv���r����r?��r>��r���r���Z new_sim_ag_id� new_sim_agr ���r ���r!����access_group_create ��s���� zSimArray.access_group_createc�����������������C���s*���|�j�����|�j��t�|���|�j�����d�S�rE���)r���r����rH��r���r���r����)rv���r��r���r ���r ���r!����access_group_delete& ��s���� zSimArray.access_group_deletec�����������������C���sD���t��|�}|�j����|�j�|||��|�j�|�}|�j����t��|�S�rE���)r���r���r���r����rI��r��r����r���)rv���r��r?��r>��r���r����r���r ���r ���r!����access_group_initiator_add- ��s���� z#SimArray.access_group_initiator_addc�����������������C���sB���t��|�}|�j����|�j�||��|�j�|�}|�j����t��|�S�rE���)r���r���r���r����rJ��r��r����r���)rv���r��r?��r>��r���r����r7��r ���r ���r!����access_group_initiator_delete6 ��s���� z&SimArray.access_group_initiator_deletec�����������������C���s2���|�j�����|�j��t�|�t�|���|�j�����d�S�rE���)r���r����r ��r���r���r���r�����rv���r��r��r���r ���r ���r!����volume_maskC ��s���� � zSimArray.volume_maskc�����������������C���s2���|�j�����|�j��t�|�t�|���|�j�����d�S�rE���)r���r����r!��r���r���r���r����r���r ���r ���r!���� volume_unmaskK ��s���� � zSimArray.volume_unmaskc�����������������C���s6���|�j�����|�j�jt�|�d�}|�j�����dd��|D��S�)N)r����c�����������������S���s���g�|�]}t��|��qS�r ���r���r����r ���r ���r!���r����[ ��r:���z?SimArray.volumes_accessible_by_access_group.<locals>.<listcomp>)r���r����r����r���r���r���)rv���r��r���r����r ���r ���r!����"volumes_accessible_by_access_groupS ��s���� � z+SimArray.volumes_accessible_by_access_groupc�����������������C���s6���|�j�����|�j�jt�|�d�}|�j�����dd��|D��S�)N)r����c�����������������S���s���g�|�]}t��|��qS�r ���r���r:��r ���r ���r!���r����c ��r:���z<SimArray.access_groups_granted_to_volume.<locals>.<listcomp>)r���r����r<��r���r���r���)rv���r��r���r<��r ���r ���r!����access_groups_granted_to_volume] ��s���� � z(SimArray.access_groups_granted_to_volumec�����������������C���s,���|�j�����|�j��|||||��|�j�����d�S�rE���)r���r����rE��r����)rv���r?��rA��rB��rC��rD��r���r ���r ���r!����iscsi_chap_authe ��s���� � zSimArray.iscsi_chap_authc�����������������C���s.���t�|�d�|�d�|�d�|�d�|�d�|�d�tj�S�)NZ lsm_tgt_idr����r����r����r����r����)r ���r]���r����)Zsim_tgtr ���r ���r!����_sim_tgt_2_lsms ��s���� �zSimArray._sim_tgt_2_lsmc�����������������C���s���t�dd��|�j���D���S�)Nc�����������������s���s���|�]}t��|�V��qd�S�rE���)r���r����r�����tr ���r ���r!���r����} ��r:���z(SimArray.target_ports.<locals>.<genexpr>)rJ���r���r���r����r ���r ���r!����target_ports{ ��s����zSimArray.target_portsc�����������������C���s����|�j��t�|jttjd���}tj }t j}|d�tj krH|�j��|d��}|d�}|d�}|d�}|}|t jksx|t jkr�|||||gS�|t jkr�ttjd|d����|t jks�|t jkr�tj }nt|d �|��}|||||gS�) Nr���r����r����rN���rO���r����z;volume_raid_info(): Got unsupported RAID_TYPE_MIXED pool %sr���rP���)r���r����r���r���r���r���r���r����r]���r����r���ZOPT_IO_SIZE_UNKNOWNr���r����ZRAID_TYPE_UNKNOWNr����ZRAID_TYPE_MIXEDr���rV���rT���rp���)rv����lsm_volr����Zmin_io_sizeZopt_io_sizerN���rO���r����r ���r ���r!����volume_raid_info ��s@���� �� � � �� �zSimArray.volume_raid_infoc�����������������C���sp���|�j��t�|jttjd���}|d�}g�}|tj kr@|d�g}n"|tj kr\|�j��|d��}ntj}|d�||fS�)Nr���r����Zparent_lsm_pool_idr����rN���) r���r����r���r���r����r���r���r����r���r����r����r����ZMEMBER_TYPE_UNKNOWN)rv���Zlsm_poolr����r����Z member_idsr ���r ���r!����pool_member_info� ��s���� �� zSimArray.pool_member_infoc�����������������C���s$���|j�tjkrttjd��tjtjfS�r���)r����r]���r����r���r���r���r���r���)rv���r���r ���r ���r!����volume_raid_create_cap_get� ��s �����z#SimArray.volume_raid_create_cap_getc����������� ��� ���C���s4��|t�jvrttjd��|tjkr(t�j}n|t�jvr>ttjd��|�j � ���d|�}dd��|D��}|D�]"}|jtj @�sbttjd|j���qbz&|�j j|||tjtjtjB�|d�}W�n6�tjy��} �zttjd|���W�Y�d�} ~ n d�} ~ 0�0�|�j �|�} |�j| d �|| d �d�tjdd d�}|�j �|�}|�j ����t�|�S�)Nz%Provided 'raid_type' is not supportedz&Provided 'strip_size' is not supportedzPool for volume %sc�����������������S���s"���g�|�]}t��|jttjd����qS�)zDisk not found)r���r���r����r���r���ZNOT_FOUND_DISKr����r ���r ���r!���r����� ��s�����z/SimArray.volume_raid_create.<locals>.<listcomp>z'Disk %s is not in DISK.STATUS_FREE mode)r����rN���r����r����r����r����r��r���r����i���TrG���)r���r���)r]���r���r���r���r%��r���ZVCR_STRIP_SIZE_DEFAULTr����r���r���r����r����r���r���Z DISK_NOT_FREEr����r����r���r����r����r����r���r��r��r����r���r���r����r����r���r���) rv���r����rN���r����r����Z pool_namer����Zdiskr����r���r����r����r��r ���r ���r!����volume_raid_create� ��sb���� � � ���� � � zSimArray.volume_raid_createc�����������������C���s&���t��|jttjd��}|�j�|�}d�S�r����r���r���r����r���r���r����r���r�����rv����volumer���Z sim_volume_idr��r ���r ���r!����volume_ident_led_on� ��s���� �zSimArray.volume_ident_led_onc�����������������C���s&���t��|jttjd��}|�j�|�}d�S�r���r���r���r ���r ���r!����volume_ident_led_off� ��s���� �zSimArray.volume_ident_led_offc�����������������C���s"���t�|�d�|�d�|�d�|�d�tj�S�)NZ lsm_bat_idr����r���r����)r���r]���r����)�sim_batr ���r ���r!����_sim_bat_2_lsm ��s���� �zSimArray._sim_bat_2_lsmc�����������������C���s���t�dd��|�j���D���S�)Nc�����������������s���s���|�]}t��|�V��qd�S�rE���)r���r���r���r ���r ���r!���r���� ��r:���z%SimArray.batteries.<locals>.<genexpr>)rJ���r���r���r����r ���r ���r!���r���� ��s����zSimArray.batteriesc�����������������C���s����|�j��t�|jttjd���}tj }tj }d}|�j����D�]}|d�tj kr8d}q8|d�tjkrj|r�tj}n*|d�tjkr�tj}n|d�tjkr�tj}|d�tjkr�tj}n|d�tjkr�tj}|d�||d�||d�gS�)Nr���Fr����Tr��r��r��)r���r����r���r���r����r���r���r����r���Z WRITE_CACHE_STATUS_WRITE_THROUGHZREAD_CACHE_STATUS_DISABLEDr���r���r����r���ZWRITE_CACHE_STATUS_WRITE_BACKZWRITE_CACHE_POLICY_WRITE_BACKZWRITE_CACHE_POLICY_UNKNOWNZWRITE_CACHE_STATUS_UNKNOWNr���ZREAD_CACHE_STATUS_ENABLEDZREAD_CACHE_POLICY_UNKNOWNZREAD_CACHE_STATUS_UNKNOWN)rv���r���r��Zwrite_cache_statusZread_cache_statusZflag_battery_okr���r ���r ���r!����volume_cache_info ��s>���� �����zSimArray.volume_cache_infoc�����������������C���s<���|�j�����t�|jttjd��}|�j��||��|�j�� ���d�S�r���) r���r����r���r���r����r���r���r����r���r����)rv���r���r���r���r����r ���r ���r!����!volume_physical_disk_cache_update2 ��s���� �z*SimArray.volume_physical_disk_cache_updatec�����������������C���s<���|�j�����t�|jttjd��}|�j��||��|�j�� ���d�S�r���) r���r����r���r���r����r���r���r����r���r����)rv���r���r���r���r����r ���r ���r!���� volume_write_cache_policy_update; ��s���� �z)SimArray.volume_write_cache_policy_updatec�����������������C���s<���|�j�����t�|jttjd��}|�j��||��|�j�� ���d�S�r���) r���r����r���r���r����r���r���r����r���r����)rv���r���r���r���r����r ���r ���r!����volume_read_cache_policy_updateD ��s���� �z(SimArray.volume_read_cache_policy_update)NN)r���)r���)r���)r���)r���)r���)r���Fr���)r���)r���)r���)r���)r���)r���)r���)r���)r���)r���F)r���)r���)r���)r���)r���)r���)r���)r���F)r���)r���)r���)r���)r���)r���)r���)r���)r���)r���)r���)r���)r���)r���)r���)r���)r���)r���)VrQ���rR���rS���rf���r�����tempfileZ gettempdirr���r\���r���r���r���r���r���r���r���r���r#���ry���r���r���r���r���r���r���r���r���r���r��r���r����r���r����r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���rF��r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r����r��r��r��r��r ���r ���r ���r!���r������sH�� � ���� ���� ��� �� �� �� % 4 $r���)r)���r��rf���r����r���Zlsmr���r���r���r���r���r���r���r ���r ���r���r���r ���r���r���r���r���r#���r,���r5����objectr6���r]���r���r ���r ���r ���r!����<module>���s2���D 6�������������