.P`c@sddlZddlZddlZddlZddlZddlmZddlmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZdZdZdZdefdYZd efd YZd efd YZdS( iN(tsize_human_2_size_bytes(tSystemtVolumetDisktPoolt FileSystemt AccessGroupt FsSnapshott NfsExporttmd5tLsmErrort TargetPortt ErrorNumbert JobStatustBatterytint_divcsfd}|S(Ncsiy||SWnQtjk r}t|dtkrct|ddrc|djjnt|dkrtt j dntt j dt|ntk rt|dtkrt|ddr|djjnnlt k rd}t|dtkrEt|ddrE|djjntt j dt|nXdS(Nitbs_objsdatabase is lockeds%Timeout to require lock on state files%Got unexpected error from sqlite3: %ssGot unexpected error: %s( tsqlite3tOperationalErrorttypetSimArraythasattrRttrans_rollbacktstrR R tTIMEOUTt PLUGIN_BUGt Exception(targstkargst sql_errort base_error(tmethod(s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytwrapper s,)  ))((RR ((Rs;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_handle_errorsscCsSdg}x:tddD])}|jtdtjddqWdj|S(s. Generate a random VPD83 NAA_Type3 ID t50iis%02xit(trangetappendRtrandomtrandinttjoin(tvpdt_((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt _random_vpd:s 'cCs<i}x/t|jD]\}}||||dMscCs |dkS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6NscCs |dkS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6OscCs |dkS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6PscCs |dkS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6QscCs |dkS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6RscCs |dkS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6SscCs|dko|ddkS(Niii((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6TscCs|dko|ddkS(Niii((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6UscCs|dko|ddkS(Niii((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6VscCs|dko|ddkS(Niii((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6WscCs|dko|ddkS(Niii((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6XscCs|dko|ddkS(Niii((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6YscCs|dko|ddkS(Niii((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6ZscCs|S(N((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6^scCs|S(N((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6_scCsdS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6`scCs|dS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6ascCs|dS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6bscCs|dS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6cscCs|dS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6dscCs t|dS(Ni(R(R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6escCst|ddS(Nii(R(R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6fscCst|ddS(Ni(R(R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6gscCs|dS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6hscCs|dS(Ni((R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6iscCst|ddS(Nii(R(R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6jscCst|ddS(Ni(R(R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6kscCs}|ttjjkr4ttjd|ntj||tkrlttjd||fntj||S(s 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. s0data_disk_count(): Got unsupported raid type(%d)s;data_disk_count(): Illegal disk count(%d) for raid type(%d)( tlistR4t_RAID_DISK_CHKtkeysR R RtFalset_RAID_PARITY_DISK_COUNT_FUNC(t raid_typet disk_count((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytdata_disk_countns (t__name__t __module__RtRAID_TYPE_JBODtRAID_TYPE_RAID0tRAID_TYPE_RAID1tRAID_TYPE_RAID3tRAID_TYPE_RAID4tRAID_TYPE_RAID5tRAID_TYPE_RAID6tRAID_TYPE_RAID10tRAID_TYPE_RAID15tRAID_TYPE_RAID16tRAID_TYPE_RAID50tRAID_TYPE_RAID60tRAID_TYPE_RAID51tRAID_TYPE_RAID61R8R;t staticmethodR>(((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR4Ks>                          t BackStorec BseZdZdeeefZdZdZdZdZdZ dZ dZ dd Z e jZejZejZejZd Zd Zd Zejejejejejejej gZ!d d dd dd dd dd dd dd d d gZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+e,dZ-dZ.dZ/e0e0dZ1dZ2d Z3d!Z4d"Z5d#Z6d$Z7d%Z8d&d&d'Z9d&d(Z:d)Z;e0d*Z<e0d+Z=d,Z>d-Z?d.Z@eAd/ZBd&d0ZCd1ZDd2ZEd3ZFd4ZGd5ZHd6ZId7ZJe0d8ZKd9ZLd:ZMeAd;ZNe0d<ZOd=ZPd>ZQd?ZRd@ZSdAZTdBZUdCZVdDZWeXdEZYdFZZdGZ[dHZ\dIZ]e0dJZ^dKZ_dLZ`dMZadNZbdOZcdPZddQZedRZfdSZgdTZhdUZidVZjdWZkdXZldYZmdZZnd[Zod\ZpRS(]s4.1sLSM_SIMULATOR_DATA_%s_%siiissim-01sLSM simulated storage plug-iniiii t#iiii i@icCstjj|sHtjtj|tjtjBtj|dn||_d|_ t j |dt t|ddd|_t|j_d}|d7}|d7}|d 7}|d 7}|d 7}|d 7}|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}|d#7}|jid$tjd%6tjd&6tjd'6tjd(6tjd)6}|jj}y|j|Wn_t jk rS}d*t|krJq|n/t jk r}ttj d+|jnXdS(,Nittimeoutitisolation_levelt IMMEDIATEsPRAGMA foreign_keys = ON; s 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); s% 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); s 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); s 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); s; 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); sx CREATE TABLE ags ( id INTEGER PRIMARY KEY, name TEXT UNIQUE NOT NULL); s 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); s  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); sV 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); s` 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); s 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); s- 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); sd 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); s CREATE TABLE exp_root_hosts ( host TEXT NOT NULL, exp_id INTEGER NOT NULL, FOREIGN KEY(exp_id) REFERENCES exps(id) ON DELETE CASCADE); s CREATE TABLE exp_rw_hosts ( host TEXT NOT NULL, exp_id INTEGER NOT NULL, FOREIGN KEY(exp_id) REFERENCES exps(id) ON DELETE CASCADE); s CREATE TABLE exp_ro_hosts ( host TEXT NOT NULL, exp_id INTEGER NOT NULL, FOREIGN KEY(exp_id) REFERENCES exps(id) ON DELETE CASCADE); s CREATE TABLE jobs ( id INTEGER PRIMARY KEY, duration REAL NOT NULL, timestamp TEXT NOT NULL, data_type INTEGER, data_id INTEGER); s CREATE TABLE batteries ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, type INTEGER NOT NULL, status INTEGER NOT NULL); s 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; s 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; s 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; sf 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; s 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; s 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; sp 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; s; 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; s 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; sO 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 ; sg 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; ; t0t ID_PADDINGt ID_FMT_LENtAG_INIT_TYPE_MIXEDtAG_INIT_TYPE_UNKNOWNtSPLITTERsalready existssLStored simulator state incompatible with simulator, please move or delete %s(!tostpathtexiststclosetopentO_WRONLYtO_CREATtchmodt statefiletNonet lastrowidRtconnecttintRtsql_connR3t row_factorytformatRPt _ID_FMT_LENRtINIT_TYPE_ISCSI_WWPN_MIXEDtINIT_TYPE_UNKNOWNt_LIST_SPLITTERR.t executescriptRRt DatabaseErrorR R tINVALID_ARGUMENT(tselfRcRRtsql_cmdtsql_curR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt__init__s#  '        ]'E     cCs{|j}t|dks)|d r-tSd|djkr^|ddtjkr^tSttj d|j dS(NitversionsLStored simulator state incompatible with simulator, please move or delete %s( tsim_sysstlenR:R9RPtVERSION_SIGNATUREtTrueR R RqRc(RrRw((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_check_version-s c Cs*|j|jr$|jdS|jditjd6tjd6tjd6dd6tj d6tj d 6t d }t d }g}xt d d D]n}|jdidd6|d6t jd6t jd6td6dd6t jd6d|d6|j|jqWg}xt d dD]}|jdidd6|d6t jd6t jd6td6dd6t jd6d|d6t|d kr#|j|jq#q#Wg}xt d dD]}|jdidd6|d6t jd6t jd6td6t jd6t jd6d|d6t|d kr|j|jqqWxrt d d D]a}|jdid!d6|d6t jd6t jd6td6t jd6t jd6d"|d6qZW|jdd#d$tjd%|d&tjtjBtjBtjBtj Bd'tj!tj"B}|j#dd(d)|d&tjtjBtjBd*||jdd+d$tjd%|d&tjtjBtjB|jdd,d&tjtjBtjBd$tj$d%||jd-it%j&d.6d/d06d/d16d/d26d3d46|jd-it%j'd.6d5d06d5d16d5d26d6d46|jd-it%j(d.6d7d06d8d16d9d26d:d46|jd-it%j(d.6d7d06d;d16d<d26d=d46|jd-it%j(d.6d7d06d>d16d<d26d=d46|jd?id@d6t)j*dA6t)jd6|jd?idBd6t)j+dA6t)jd6|jdSdS(Cs^ Raise error if version not match. If empty database found, initiate. NtsystemstidtnametstatusR#t status_infoRvtread_cache_pctt2TiBt512GiBiitdiskss2TiB SATA Diskt disk_prefixt total_spacet disk_typetvpd83i trpmt link_typesPort: %d Box: 1 Bay: 1tlocationis 2TiB SAS Diski:sPort: %d Box: 1 Bay: 2is512GiB SSD DisksPort: %d Box: 1 Bay: 3is 2TiB SSD DisksPort: %d Box: 1 Bay: 4sPool 1R<t sim_disk_idst element_typetunsupported_actionssPool 2(sub pool of Pool 1)tparent_pool_idtsizesPool 3t lsm_test_aggrttgtst port_types50:0a:09:86:99:4b:8d:c5tservice_addresstnetwork_addresstphysical_addresstFC_a_0bt physical_names50:0a:09:86:99:4b:8d:c6t FCoE_b_0cs"iqn.1986-05.com.example:sim-tgt-03s sim-iscsi-tgt-3.example.com:3260sa4:4e:31:47:f4:e0t iSCSI_c_0ds 10.0.0.1:3260sa4:4e:31:47:f4:e1t iSCSI_c_0es%[2001:470:1f09:efe:a64e:31ff::1]:3260t batteriess'Battery SIMB01, 8000 mAh, 05 March 2016Rs&Capacitor SIMC01, 500 J, 05 March 2016(,t trans_beginR{t trans_committ _data_addRPtSYS_IDtSYS_NAMERt STATUS_OKRyt_DEFAULT_READ_CACHE_PCTRR$Rt TYPE_SATAR+t LINK_TYPE_ATAR%RetTYPE_SASt LINK_TYPE_SASRxtTYPE_SSDtRPM_NON_ROTATING_MEDIUMtsim_pool_create_from_diskRRCRtELEMENT_TYPE_POOLtELEMENT_TYPE_FStELEMENT_TYPE_VOLUMEtELEMENT_TYPE_DELTAtELEMENT_TYPE_SYS_RESERVEDtUNSUPPORTED_VOLUME_GROWtUNSUPPORTED_VOLUME_SHRINKtsim_pool_create_sub_poolRBR tTYPE_FCt TYPE_FCOEt TYPE_ISCSIRt TYPE_CHEMICALtTYPE_CAPACITOR(Rrt size_bytes_2ttsize_bytes_512gt pool_1_diskstittest_pool_diskstssd_pool_diskst pool_1_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytcheck_version_and_init;s.                                                       cCs2|jj}|j||j|_|jS(s9 Execute sql command and get all output. (RhR.texecuteRetfetchall(RrRsRt((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt _sql_execs  cCsd|}|j|S(NsSELECT * FROM %s(R(Rrt table_nameRs((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt _get_tables cCs|jjddS(NsBEGIN IMMEDIATE TRANSACTION;(RhR(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR scCs|jjdS(N(Rhtcommit(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRscCs|jjdS(N(Rhtrollback(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRscCst|j}gt|jD]$}|dkr=dn t|^q%}d|ddj|ddj|f}|j|dS(NR#s INSERT INTO %s (%s) VALUES (%s);s'%s's', '(R7R9tvaluesRdRR(R(RrRt data_dictR9tvRRs((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs=cCsyd||f}|j|}|rqt|dkr;dSt|dkrU|dSttjdtn|SdS(NsSELECT * FROM %s WHERE %siis%_data_find(): Got non-unique data: %s(RRxRdR R Rtlocals(Rrttablet conditiont flag_uniqueRst sim_datas((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt _data_findscCsI|dkr"d|||f}nd||||f}|j|dS(Ns#UPDATE %s SET %s=NULL WHERE id='%s's#UPDATE %s SET %s='%s' WHERE id='%s'(RdR(RrRtdata_idt column_nametvalueRs((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt _data_update-s  cCs!d||f}|j|dS(NsDELETE FROM %s WHERE %s;(R(RrRRRs((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt _data_delete7scCsH|jditjdtjd6tjd6|d6|d6|jS(s* Return a job id(Integer) tjobst LSM_SIM_TIMEtdurationt timestampt data_typeR(RR[tgetenvRPtJOB_DEFAULT_DURATIONttimeRe(Rrt job_data_typeR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_job_create;s  cCs|jdd|dS(NRsid="%s"(R(Rrt sim_job_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_job_deleteJscCsE|jdd|dt}|d kr=ttjdnttjt|d|dd}d }d }|dkrd}n|dkr8d}|d t j kr|j |d }|d }q8|d t j kr|j |d }|d }q8|d t jkr8|j|d }|d }q8n|||fS( sg Return (progress, data_type, data) tuple. progress is the integer of percent. Rsid=%sRs Job not foundRRidiRRN(RRzRdR R t NOT_FOUND_JOBRgRtfloatRPtJOB_DATA_TYPE_VOLt sim_vol_of_idtJOB_DATA_TYPE_FSt sim_fs_of_idtJOB_DATA_TYPE_FS_SNAPtsim_fs_snap_of_id(RrRtsim_jobtprogresstdataR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_job_statusMs.  )     cCs |jdS(s0 Return a list of sim_sys dict. R|(R(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRwpscCs$td|jdd|DS(Ncss|]}|dVqdS(t lsm_disk_idN((t.0R0((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys xst disks_viewsowner_pool_id="%s"(R7R(Rrt sim_pool_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytlsm_disk_ids_of_poolvscCs |jdS(s1 Return a list of sim_disk dict. R(R(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt sim_disks|scCs |jdS(s1 Return a list of sim_pool dict. t pools_view(R(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt sim_poolsscCs|jd|tjdS(NRR(t_sim_data_of_idR tNOT_FOUND_POOL(RrR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_pool_of_idsic Cs7|dkrtj}n|tjks6|tjkrBtj}n|jdi|d6tjd6dd6|d6|d6|d 6tj d 6|d 6t j |t |}|j }x>|| D]2} |jd | d ||jd | ddqWx>||D]2} |jd | d ||jd | ddqW|S(NitpoolsR~RR#RRRR<t member_typet strip_sizeRt owner_pool_idtroletDATAtPARITY(RPtDEFAULT_STRIP_SIZERRCRAtBLK_SIZERRRtMEMBER_TYPE_DISKR4R>RxReR( RrR~RR<RRRR>Rt sim_disk_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs<       cCs_|jdi |d6tjd6dd6|d6|d6tjd6tjd 6|d 6|d 6|jS( NRR~RR#RRRR<RRR(RRRRtRAID_TYPE_OTHERtMEMBER_TYPE_POOLRe(RrR~RRRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs    cCs|jd|ddS(Ns3SELECT COUNT(id) FROM disks WHERE owner_pool_id=%s;i(R(RrR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_pool_disks_countscCs|jd|ddS(NsCSELECT COUNT(id) FROM disks WHERE owner_pool_id=%s and role='DATA';i(R(RrR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_pool_data_disks_countscCs+|r|jdd|S|jdSdS(s0 Return a list of sim_vol dict. tvolumes_by_ag_viewsag_id=%st volumes_viewN(RR(Rrt sim_ag_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_volsscCsO|j|d|dt}|dkrK|rDt|d|qKdSn|S(Nsid=%sRs %s not found(RRzRdR (RrRRt lsm_error_not data_nametsim_data((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs cCs|jd|tjdS(sD Return sim_vol if found. Raise error if not found. RR(RR tNOT_FOUND_VOLUME(Rrt sim_vol_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs cCs8|j|}|d|kr4ttjdndS(Nt free_spacesInsufficient space in pool(RR R tNOT_ENOUGH_SPACE(RrRt size_bytestsim_pool((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_check_pool_free_spaces cCs|tjdtjtjS(Ni(RPR(R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_block_roundingscCstj|}|j||t}t|d<||d<||d<||d<||dQsR.s ag_id="%s"(R7R(RrR ((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_vol_ids_of_masked_agOs cCs$td|jdd|DS(Ncss|]}|dVqdS(R/N((RR6((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys VsR.s vol_id="%s"(R7R(RrR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR'Ts cCstj|}|j|}|d|krCttjdn|j|d}||d}|dkr|dtj@rttj dn|d|krttj dqn&|dtj @rttj dn|j d |d||j d |d |dS( NRs%Volume size is identical to requestedRiRs.Requested pool does not allow volume size growRsInsufficient space in poolRR( RPRRR R R2RRRt NO_SUPPORTRRR(RrRtnew_size_bytesR%Rt increment((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_resizeYs0    cCs1|j|td|jdd|DS(sL Return a list of dst_vol_id for provided source volume ID. css|]}|dVqdS(t dst_vol_idN((RR0((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys stvol_repsssrc_vol_id="%s"(RR7R(Rrtsrc_sim_vol_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR)|s  cCs|j||j|||kr*dS|tjkr=dStd|jdd|D}t|dkrydS|jdi|d6|d6|d6dS(Ncss|]}|dVqdS(t src_vol_idN((Rtr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys sR=sdst_vol_id="%s"iR?R<trep_type(RRtREPLICATE_COPYR7RRxR(RrR>R,RAt blk_rangestcur_src_sim_vol_ids((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_replicas"    cCs<|j|s$ttjdn|jdd|dS(Ns+Provided volume is not a replication sourceR=ssrc_vol_id="%s"(R)R R R2R(RrR>((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_src_replica_breaks  cCsN|j|}|d|kr4ttjdn|jd|d|dS(NRs,Volume admin state is identical to requestedR(RR R R2R(RrRtnew_admin_stateR%((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_state_changes cCs%|djtj|d<|d=|S(s= Update 'init_type' and 'init_ids' of sim_ag t init_ids_strtinit_ids(tsplitRPRn(tsim_ag((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_ag_formats cCsN|r|jdd|}n|jd}g|D]}tj|^q5S(Ntags_by_vol_views vol_id=%stags_view(RRRPRM(RrRtsim_agsta((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRPs cCs\y)|jdi|d6|d6|d6Wn,tjk rW}ttjd|nXdS(NtinitsR}t init_typet owner_ag_ids6Initiator '%s' is already in use by other access group(RRR#R R tEXISTS_INITIATOR(RrRStinit_idR R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_init_createscCsdS(N(Rd(RrRVtin_usertin_passtout_usertout_pass((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytiscsi_chap_auth_setscCsjy$|jdi|d6|j}Wn,tjk rR}ttjd|nX|j||||S(NtagsR~s1Name '%s' is already in use by other access group(RReRR#R R R$RW(RrR~RSRVR R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt sim_ag_creates cCsI|j||j|r1ttjdn|jdd|dS(Ns!Access group has volume masked toR]sid="%s"(R1R7R R R(R(RrR ((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt sim_ag_deletes   cCs~|j|}||dkr4ttjdn|tjkrg|tjkrgttjdn|j|||dS(NRJs!Initiator already in access groups.Only support iSCSI IQN and WWPN initiator type( R1R R R2RtINIT_TYPE_ISCSI_IQNtINIT_TYPE_WWPNR8RWRd(RrR RVRSRL((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_ag_init_adds  cCsw|j|}||dkr4ttjdnt|ddkr_ttjdn|jdd|dS(NRJs(Initiator is not in defined access groupis6Refused to remove the last initiator from access groupRRsid="%s"(R1R R R2RxtLAST_INIT_IN_ACCESS_GROUPR(RrR RVRL((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_ag_init_deletes  cCs,|jd|tjd}tj||S(NROs Access Group(RR tNOT_FOUND_ACCESS_GROUPRPRM(RrR RL((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR1s    cCs |jdS(s/ Return a list of sim_fs dict. tfss_view(R(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fssscCs.tj}|sd}n|jd||dS(NRfs File System(R t NOT_FOUND_FSRdR(Rrt sim_fs_idt raise_errorR ((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR"s   cCstj|}|j||y7|jdi|d6|d6|d6|d6|d6Wn,tjk r}ttjd|nX|j S(NtfssR~RRRRs'Name '%s' is already in use by other fs( RPRRRRR#R R R$Re(RrR~RRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt sim_fs_create*s cCsI|j||j|r1ttjdn|jdd|dS(Ns*Requested file system has child dependencyRksid="%s"(Rtclone_dst_sim_fs_ids_of_srcR R R*R(RrRi((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt sim_fs_delete=s   cCstj|}|j|}|d|krCttjdn|j|d}||dkr|d||dkrttjdn|jd|d||jd|d||jd|d|dS(NRs*File System size is identical to requestedRRsInsufficient space in poolRkR( RPRRR R R2RRR(RrRiR9tsim_fsR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt sim_fs_resizeFs" cCs!|j||jdd|S(Nt fs_snaps_views fs_id="%s"(RR(RrRi((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt sim_fs_snaps`s cCsJ|jd|tjd}|rF|d|krFttjdn|S(NRqsFile system snapshottfs_idsFDefined file system snapshot ID is not belong to requested file system(RR tNOT_FOUND_FS_SSR (Rrtsim_fs_snap_idRit sim_fs_snap((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRds   cCst|j|y5|jdi|d6|d6ttjd6Wn(tjk rl}ttjdnX|j S(Ntfs_snapsR~RsRs6The name is already used by other file system snapshot( RRRgRRR#R R R$Re(RrRiR~R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_snap_createos  cCs*|j||r&|j||ndS(N(RR(RrRiRutfilest restore_filestflag_all_files((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_snap_restores cCs5|j||j|||jdd|dS(NRwsid="%s"(RRR(RrRuRi((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_snap_deletes cCsd|}|j|dS(Ns&DELETE FROM fs_snaps WHERE fs_id='%s';(R(RrRiRs((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_snap_del_by_fss cCsU|j||j||r3|j||n|jdi|d6|d6dS(Nt fs_clonest src_fs_idt dst_fs_id(RRR(Rrt src_sim_fs_idt dst_sim_fs_idRu((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt sim_fs_clones  cCs*|j||r&|j||ndS(N(RR(RrRit src_fs_namet dst_fs_nameRu((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_file_clones cCs1|j|td|jdd|DS(sM Return a list of dst_fs_id for provided clone source fs ID. css|]}|dVqdS(RN((RR0((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys sRssrc_fs_id="%s"(RR7R(RrR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRms  cCs|jdd|dS(NRssrc_fs_id="%s"(R(RrR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_src_clone_breakscCs`xYdddgD]H}d|}||rG||jtj||st exps_view(R7R(Rr((Rrs;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_expsscCs"|j|jd|tjdS(NRs NFS Export(RRR tNOT_FOUND_NFS_EXPORT(Rrt sim_exp_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt sim_exp_of_ids c Cs0|dkr dtd }n|j|y>|jdi|d6|d6|d6|d6|d6| d 6Wn(tjk r} ttjd nX|j } x,|D]$} |jd i| d 6| d 6qWx,|D]$} |jdi| d 6| d 6qWx,|D]$}|jdi|d 6| d 6qW| S(Ns /nfs_exp_%sitexpsRstexp_pathtanon_uidtanon_gidt auth_typetoptionss/Export path is already used by other NFS exporttexp_root_hoststhosttexp_idt exp_rw_hostst exp_ro_hosts( RdR+RRRR#R R R$Re(RrRiRRRRRRRRRRt root_hosttrw_hosttro_host((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_exp_createsJ       cCs%|j||jdd|dS(NRsid="%s"(RR(RrR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_exp_deletes cCs |jdS(s0 Return a list of sim_tgt dict. t tgts_view(R(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_tgtsscCs |jdS(s0 Return a list of sim_bat dict. t bats_view(R(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_batsscCs'|j||jd|d|dS(NRR(RR(RrRtpdc((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_pdc_sets cCs'|j||jd|d|dS(NRR(RR(RrRtrcp((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_rcp_sets cCs'|j||jd|d|dS(NRR(RR(RrRtwcp((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_wcp_sets (qR?R@tVERSIONR RyRRRRRRRRRtMODE_HARDWARE_RAIDtSYS_MODERtWRITE_CACHE_POLICY_AUTOR tREAD_CACHE_POLICY_ENABLEDR!tPHYSICAL_DISK_CACHE_DISABLEDR"RRnRkRBRCRFRGRHRKRLtSUPPORTED_VCR_RAID_TYPEStSUPPORTED_VCR_STRIP_SIZESRuR{RRRRRRRR:RRRRdRRRRwRRRRRRRRR RRRRORR&R-R4R5R7R'R;R)RERFRHRMRPRWR\R^R_RbRdR1RgRzRRlRnRpRrRRxR|R}R~RRRmRRRRRRRRRRR(((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRPs         *         #      )           #                   2     RcBs%eZejdejdZedZedZ edZ edZ edZ edZ edZed Zed ZdOdOd Zed d Zed dZed dZed dZedZedZed dZedZedZedZed dZedZedZ ed e!d dZ"ed dZ#ed dZ$ed dZ%ed dZ&ed dZ'ed d Z(ed d!Z)ed d"Z*ed d#Z+ed$Z,ed%Z-ed e!d&Z.ed d'Z/ed d(Z0ed d)Z1ed d*Z2ed+Z3ed d,Z4ed d-Z5ed d.Z6ed/Z7ed e!d0Z8ed d1Z9ed2Z:ed d3Z;ed d4Z<ed d5Z=ed6Z>ed7Z?ed d8Z@ed d9ZAed d:ZBed d;ZCed d<ZDed d=ZEed d>ZFed d?ZGed d@ZHedAZIedBZJedCZKedDZLedEZMedFZNed dGZOed dHZPedIZQedJZRedKZSed dLZTed dMZUed dNZVRS(Pt LSM_SIM_DATAs /lsm_sim_datacCs4yt|tj SWntk r/|nXdS(N(RgRPRkt ValueError(tlsm_idt lsm_error((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_lsm_id_to_sim_ids cCstj|ttjdS(Ns Job not found(RRR R R(tjob_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_job_id_of&scCstj|ttjdS(NsPool not found(RRR R R(R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_pool_id_of+scCstj|ttjdS(NsVolume not found(RRR R R(R0((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_vol_id_of0scCstj|ttjdS(NsFile system not found(RRR R Rh(Rs((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt _sim_fs_id_of6scCstj|ttjdS(NsFile system snapshot not found(RRR R Rt(tsnap_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_fs_snap_id_of<scCstj|ttjdS(NsFile system export not found(RRR R R(R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_exp_id_ofCscCstj|ttjdS(NsFile system export not found(RRR R R(R/((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt _sim_ag_id_ofJscCsM|dkrtj}nt|||_|jj||_||_dS(N(RdRt SIM_DATA_FILERPRRRcRR(RrRcRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRuQs     cCs&|jj||}dtj|fS(Ns JOB_ID_%0*d(RRRPRk(RrRt sim_data_idR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt _job_create[s  ic Cstj|}|jj|\}}}tj}|dkrKtj}nd}|tj krrtj |}nB|tj krtj |}n!|tj krtj|}n|||fS(Nid(RRRRR t INPROGRESStCOMPLETERdRPRt_sim_vol_2_lsmRt _sim_fs_2_lsmRt_sim_fs_snap_2_lsm( RrRtflagsRRRR RR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt job_status`s    cCs7|jj|jjtj||jjdS(N(RRRRRRRd(RrRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytjob_freets  cCs1t|jtt|d|_||_dS(Ni(RPRcRgRRRRRd(RrtmsR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt time_out_set{s$ cCs|jS(N(RR(RrR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt time_out_getsc Cs@t|d|d|d|dd|ddtjd|d S( NR}R~RRt _fw_versionRvt_modet_read_cache_pctR(RRPR(tsim_sys((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_sys_2_lsms  cCstd|jjDS(Ncss|]}tj|VqdS(N(RR(RR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys s(R7RRw(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR|scCsa|jtjkr'ttjdn|jj|jjdtjd||jj dS(NsSystem not foundR|R( R}RPRR R tNOT_FOUND_SYSTEMRRRRRd(Rrtsystemtread_pctR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsystem_read_cache_pct_updates    c CsOt|d|d|dtjtt|dtj|dtj|dS(Nt lsm_vol_idR~RRRt lsm_pool_id(RRPRRgRR(R%((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs  cCstd|jjDS(Ncss|]}tj|VqdS(N(RR(RR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys s(R7RR (Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRsc Cs{|d}|d}|d}|d}|d}|d}tj}|d}|d} t|||| ||||| S( NRR~RRRRRR(RPRR( RRR~RRRRtsys_idRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_pool_2_lsms         cCs=|jj|jj}|jjtd|DS(Ncss|]}tj|VqdS(N(RR(RR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys s(RRRRR7(RrRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs   cCstj}|ddkr)|tjO}nt|d|d|dtjtt|dtj|tjd|dd|d d |d d |d S(NRRR~RRt_vpd83Rt _locationRt_rpmRt _link_typeR( RRRdt STATUS_FREERPRRgRR(tsim_diskt disk_status((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_disk_2_lsms   cCstd|jjDS(Ncss|]}tj|VqdS(N(RR(RR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys s(R7RR(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRsc Csy|tkr|jjn|jj||tj|d|}|rM|S|jtj|} |jj | dfS(s 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. RN( R:RRR&RRRRPRRRd( RrRtvol_nameRtthinpRt _internal_uset_is_hw_raid_voltnew_sim_vol_idR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt volume_creates    cCsC|jj|jjtj||j}|jj|S(N(RRR-RRRR(RrR0RR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt volume_deletes    cCs[|jjtj|}|jj|||jtj|}|jj|dfS(N( RRRRR;RRPRRRd(RrR0R9RRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt volume_resizes  c Cs|jjtj|}|jj|}|j|||dtjdt}|jj ||||j t j |} |jj | dfS(NRR(RRRRRRRtPROVISION_FULLRzRERRPRRRd( Rrt dst_pool_idRAR?t new_vol_nameRR>t src_sim_volR,R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_replicates   cCs+|tjkr$ttjdntjS(NsSystem not found(RPRR R RR(RrRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt!volume_replicate_range_block_sizes  cCsU|jj|jjtj|tj||||j}|jj|S(N(RRRERRRR(RrRAR?R<trangesRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_replicate_range#s     cCs=|jj|jjtj|tj|jjdS(N( RRRHRRRRRRd(RrR0R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt volume_enable5s    cCs=|jj|jjtj|tj|jjdS(N( RRRHRRRtADMIN_STATE_DISABLEDRRd(RrR0R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_disable=s    cCsFtj|}|jj|}x|D]}||kr(tSq(WtS(N(RRRR)RzR:(RrR0RR>R+R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_child_dependencyEs   cCsC|jj|jjtj||j}|jj|S(N(RRRFRRRR(RrR0RR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_child_dependency_rm`s     cCs0t|d|d|d|d|dtjS(Nt lsm_fs_idR~RRR(RRPR(Ro((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRkscCstd|jjDS(Ncss|]}tj|VqdS(N(RR(Rtf((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys ss(R7RRg(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfsqscCsm|s|jjn|jj||tj|}|rA|S|jtj|}|jj|dfS(N( RRRlRRRRPRRRd(RrRtfs_nameRRRt new_sim_fs_idR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt fs_createus  cCsC|jj|jjtj||j}|jj|S(N(RRRnRRRR(RrRsRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt fs_deletes    cCs[tj|}|jj|jj|||jtj|}|jj|dfS(N( RRRRRpRRPRRRd(RrRsR9RRiR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt fs_resizes   c Cs|jjd}|r+tj|}ntj|}|jj|}|d}|j|||ddt} |jj || ||j t j | } |jj | dfS(NRRR(RRRdRRRRRRzRRRPRR( RrRRRRRuRt src_sim_fsRRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_clones    cCsj|jjd}|r+tj|}n|jjtj|||||j}|jj|S(N( RRRdRRRRRR(RrRsRRRRRuR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt fs_file_clones    cCst|d|d|dS(Ntlsm_fs_snap_idR~R(R(Rv((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs cCs)td|jjtj|DS(Ncss|]}tj|VqdS(N(RR(Rts((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys s(R7RRrRR(RrRsR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt fs_snapshotss cCsW|jj|jjtj||}|jtj|}|jj|dfS(N( RRRxRRRRPRRRd(RrRst snap_nameRRuR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_snapshot_creates   cCsO|jj|jjtj|tj||j}|jj|S(N(RRR}RRRRR(RrRsRRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_snapshot_deletes     c Csm|jjd}|r+tj|}n|jjtj||||||j}|jj|S(N( RRRdRRR|RRR( RrRsRRyRzR{RRuR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_snapshot_restores     cCstj|}|tkr+|jjn|jj|gkr{|jj|gkr{|tkrw|jjntS|tkr|jjntS(N( RRR:RRRmRrRRz(RrRsRyRRRi((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_child_dependencys   cCs|jj|j||dttkr@ttjdntj |}|jj ||jj ||j }|jj |S(s Assuming API defination is break all clone relationship and remove all snapshot of this source file system. Rs9No snapshot or fs clone target found for this file system(RRRRzR:R R R2RRRR~RR(RrRsRyRRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_child_dependency_rms    c CsMt|d|d|d|d|d|d|d|d|d |d  S( Nt lsm_exp_idRRRRRRRRR(R(R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_exp_2_lsm s cCs)g|jjD]}tj|^qS(N(RRRR(RrRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytexports sc Csl|jj|jjtj||||||||| } |jj| } |jjtj| S(N(RRRRRRRR( RrRsRRRRRRRRRRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt fs_export s   cCs7|jj|jjtj||jjdS(N(RRRRRRRd(RrRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt fs_unexport( s  cCs)t|d|d|d|dtjS(Nt lsm_ag_idR~RJRS(RRPR(RL((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt _sim_ag_2_lsm/ scCstd|jjDS(Ncss|]}tj|VqdS(N(RR(RRQ((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys 7 s(R7RRP(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR]5 scCsu|tjkr$ttjdn|jj|jj|||}|jj|}|jj t j |S(NsSystem not found( RPRR R RRRR^R1RRR(RrR~RVRSRRt new_sim_ag_idt new_sim_ag((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytaccess_group_create9 s   cCs7|jj|jjtj||jjdS(N(RRR_RRRRd(RrR/R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytaccess_group_deleteE s  cCs^tj|}|jj|jj||||jj|}|jjtj|S(N(RRRRRbR1RR(RrR/RVRSRR R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytaccess_group_initiator_addL s   cCs[tj|}|jj|jj|||jj|}|jjtj|S(N(RRRRRdR1RR(RrR/RVRSRR RL((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytaccess_group_initiator_deleteU s   cCsC|jj|jjtj|tj||jjdS(N(RRR4RRRRRd(RrR/R0R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt volume_mask_ s     cCsC|jj|jjtj|tj||jjdS(N(RRR5RRRRRd(RrR/R0R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt volume_unmaskh s     cCsX|jj|jjdtj|}|jjg|D]}tj|^q?S(NR (RRR RRRR(RrR/RR R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt"volumes_accessible_by_access_groupq s    cCsX|jj|jjdtj|}|jjg|D]}tj|^q?S(NR(RRRPRRRR(RrR0RRPRQ((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytaccess_groups_granted_to_volume{ s    cCs:|jj|jj||||||jjdS(N(RRR\RRd(RrRVRXRYRZR[R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytiscsi_chap_auth s    cCs7t|d|d|d|d|d|dtjS(Nt lsm_tgt_idRRRRR(R RPR(tsim_tgt((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_tgt_2_lsm s cCstd|jjDS(Ncss|]}tj|VqdS(N(RR%(Rtt((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys s(R7RR(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt target_ports scCs=|jjtj|jttjd}tj }t j }|dt j krk|jj|d}n|d}|d}|d}|}|t jks|t jkr|||||gS|t jkrttjd|dn|t jks |t jkrtj }nt|d |}|||||gS( NsPool not foundRRR<R=Rs;volume_raid_info(): Got unsupported RAID_TYPE_MIXED pool %sRR>(RRRRRR R RRPRRtOPT_IO_SIZE_UNKNOWNRRtRAID_TYPE_UNKNOWNRtRAID_TYPE_MIXEDRRCRARg(Rrtlsm_volRt min_io_sizet opt_io_sizeR<R=R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_raid_info s4        cCs|jjtj|jttjd}|d}g}|tj kr\|dg}n1|tj kr|jj |d}n tj }|d||fS(NsPool not foundRtparent_lsm_pool_idR}R<( RRRRR}R R RRRRRtMEMBER_TYPE_UNKNOWN(Rrtlsm_poolRRt member_ids((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytpool_member_info s   cCs7|jtjkr'ttjdntjtjfS(NsSystem not found(R}RPRR R RRR(RrR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_raid_create_cap_get s  c Cs|tjkr$ttjdn|tjkr?tj}n$|tjkrcttjdn|j j d|}g|D]'}t j |j ttjd^q}x:|D]2}|jtj@sttjd|j qqWyD|j jd|d|d|d tjd tjtjBd |} Wn,tjk r]} ttjd |nX|j j| } |j| d || ddtjdtdd} |j j| } |j j t j!| S(Ns%Provided 'raid_type' is not supporteds&Provided 'strip_size' is not supportedsPool for volume %ssDisk not founds'Disk %s is not in DISK.STATUS_FREE modeR~R<RRRRs+Name '%s' is already in use by other volumeRRiRRi("RPRR R R8RtVCR_STRIP_SIZE_DEFAULTRRRRRRR}tNOT_FOUND_DISKRRRt DISK_NOT_FREERRRRRRR#R$RRRRzRRR(RrR~R<RRt pool_nameR0RtdiskRRRRR%((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_raid_create sP     1       cCs7tj|jttjd}|jj|}dS(NsVolume not found( RRR}R R RRRRd(RrtvolumeRt sim_volume_idR%((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_ident_led_on s   cCs7tj|jttjd}|jj|}dS(NsVolume not found( RRR}R R RRRRd(RrR;RR<R%((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_ident_led_off s   cCs)t|d|d|d|dtjS(Nt lsm_bat_idR~RR(RRPR(tsim_bat((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_bat_2_lsm! scCstd|jjDS(Ncss|]}tj|VqdS(N(RRA(RR&((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys ( s(R7RR(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR& scCs>|jjtj|jttjd}tj }tj }t }x3|jj D]"}|dt jkrUt}qUqUW|dtjkr|rtj}qn>|dtjkrtj}n|dtjkrtj}n|dtjkrtj}n|dtjkrtj}n|d||d||dgS(NsVolume not foundRRRR(RRRRR}R R RRt WRITE_CACHE_STATUS_WRITE_THROUGHtREAD_CACHE_STATUS_DISABLEDR:RRRRzRtWRITE_CACHE_STATUS_WRITE_BACKtWRITE_CACHE_POLICY_WRITE_BACKtWRITE_CACHE_POLICY_UNKNOWNtWRITE_CACHE_STATUS_UNKNOWNRtREAD_CACHE_STATUS_ENABLEDtREAD_CACHE_POLICY_UNKNOWNtREAD_CACHE_STATUS_UNKNOWN(RrR+R%twrite_cache_statustread_cache_statustflag_battery_okR@((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_cache_info* s2           cCsR|jjtj|jttjd}|jj|||jj dS(NsVolume not found( RRRRR}R R RRR(RrR;RRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt!volume_physical_disk_cache_updateL s   cCsR|jjtj|jttjd}|jj|||jj dS(NsVolume not found( RRRRR}R R RRR(RrR;RRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt volume_write_cache_policy_updateU s   cCsR|jjtj|jttjd}|jj|||jj dS(NsVolume not found( RRRRR}R R RRR(RrR;RRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_read_cache_policy_update^ s   N(WR?R@R[Rttempfilet gettempdirRRORRRRRRRRR!RuRdRRRRRRR|RRRRRRRR:RRRRRRRRRRRRRRRRRRR R R RRRRRRRRR]RRRRRRR R!R"R%R'R.R3R4R:R=R>RARRNRORPRQ(((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs           & 4  "(R&RRR[RRtlsmRRRRRRRRRR R R R R RRR!R+R3tobjectR4RPR(((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyts$     d  8