Viewing File: /usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyc


.P`c@sddlZddlZddlZddlZddlZddlmZddlmZmZm	Z	m
Z
mZmZm
Z
mZmZmZmZmZmZmZmZdZdZdZdefdYZd	efd
YZdefdYZdS(
iN(tsize_human_2_size_bytes(tSystemtVolumetDisktPoolt
FileSystemtAccessGroupt
FsSnapshott	NfsExporttmd5tLsmErrort
TargetPorttErrorNumbert	JobStatustBatterytint_divcsfd}|S(Ncsiy||SWnQtjk
r}t|dtkrct|ddrc|djjnt|dkrtt	j
dntt	jdt|ntk
rt|dtkrt|ddr|djjnnltk
rd}t|dtkrEt|ddrE|djjntt	jdt|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]\}}||||d<qW|S(Ni(t	enumeratetdescription(tcursortrowtdtidxtcol((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
_dict_factoryDstPoolRAIDcBseZidej6dej6dej6dej6dej6dej6dej	6dej
6dej6d	ej6d
ej
6dej6dej6d
ej6Zidej6dej6dej6dej6dej6dej6dej	6dej
6dej6dej6dej
6dej6dej6dej6ZedZRS(cCs
|dkS(Ni((tx((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt<lambda>MscCs
|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
dZdd	Ze
jZejZejZejZd
ZdZd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|_
tj|dt
t|ddd|_t|j_d}|d7}|d7}|d	7}|d
7}|d7}|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_tjk
rS}d*t|krJq|n/tjk
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_connR3trow_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	6td
}td}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#tstatus_infoRvtread_cache_pctt2TiBt512GiBiitdiskss2TiB SATA Disktdisk_prefixttotal_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(,ttrans_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_poolRBRtTYPE_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.pyRscCs|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	conditiontflag_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_idtcolumn_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}|dkr=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(tlsm_disk_idN((t.0R0((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys	<genexpr>xst
disks_viewsowner_pool_id="%s"(R7R(Rrtsim_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|d6t
j|t|}|j
}x>|| D]2}	|jd|	d
||jd|	ddqWx>||D]2}	|jd|	d
||jd|	ddqW|S(NitpoolsR~RR#RRRR<tmember_typet
strip_sizeRt
owner_pool_idtroletDATAtPARITY(RPtDEFAULT_STRIP_SIZERRCRAtBLK_SIZERRRtMEMBER_TYPE_DISKR4R>RxReR(
RrR~RR<RRRR>Rtsim_disk_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs<

	cCs_|jdi	|d6tjd6dd6|d6|d6tjd6tjd	6|d
6|d6|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<||d<tj|d<||d<tj|d<tj|d	<tj	|d
<y|j
d|Wn,tjk
r}t
tjd|nX|jS(
NRR~tpool_idRt
consumed_sizetadmin_statetis_hw_raid_voltwrite_cache_policytread_cache_policytphy_disk_cachetvolumess+Name '%s' is already in use by other volume(RPRRtdictR+RtADMIN_STATE_ENABLEDtDEFAULT_WRITE_CACHE_POLICYtDEFAULT_READ_CACHE_POLICYtDEFAULT_PHYSICAL_DISK_CACHERRtIntegrityErrorR
Rt
NAME_CONFLICTRe(RrR~RRRtsim_volR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_creates(	









cCs|j|}|j|r3ttjdn|j|}t|dkrx2|D]'}||kr[ttjdq[q[Wn|drx<|jdd|dD] }|j	d|d	d
dqW|jdd|dn|jd
d|dS(sB
        This does not check whether volume exist or not.
        s Volume is masked to access groupis%Requested volume has child dependencyRRsowner_pool_id="%s"RRR}RRsid="%s"RN(Rt_sim_ag_ids_of_masked_volR
Rt	IS_MASKEDtdst_sim_vol_ids_of_srcRxtHAS_CHILD_DEPENDENCYRRRdR(RrRR%tdst_sim_vol_idstdst_sim_vol_idR0((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_deletes$

cCss|j||j||jdd||f}|rQttjdn|jdi|d6|d6dS(Nt	vol_maskssag_id="%s" AND vol_id="%s"s2Volume is already masked to requested access grouptag_idtvol_id(Rtsim_ag_of_idRR
RtNO_STATE_CHANGERRd(RrRR	t
exist_mask((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_mask2s

cCsk|j||j|d||f}|jd|}|rU|jd|nttjddS(Nsag_id="%s" AND vol_id="%s"R.s.Volume is not masked to requested access group(RR1RRR
RR2Rd(RrRR	RR3((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_unmaskBs

	cCs$td|jdd|DS(Ncss|]}|dVqdS(R0N((Rtm((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys	<genexpr>QsR.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	<genexpr>VsR.svol_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	<genexpr>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	<genexpr>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_typetowner_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(NRfsFile System(RtNOT_FOUND_FSRdR(Rrt	sim_fs_idtraise_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_idRitsim_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(RrRitsrc_fs_nametdst_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	<genexpr>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||<n
g||<||=qW|S(Nt
root_hoststrw_hoststro_hostss
exp_%s_str(RKRPRn(Rrtsim_exptkey_nameR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_exp_formats



cs#tfdjdDS(Nc3s|]}j|VqdS(N(R(Rte(Rr(s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys	<genexpr>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]$}|jdi|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
edZedZedZ
edZed	Zed
ZdOdOdZed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|tjSWntk
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(NsJOB_ID_%0*d(RRRPRk(RrRtsim_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|tjkrtj|}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	<genexpr>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~RRRtlsm_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	<genexpr>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	<genexpr>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
|dd|d
S(NRRR~RRt_vpd83Rt	_locationRt_rpmRt
_link_typeR(	RRRdtSTATUS_FREERPRRgRR(tsim_disktdisk_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	<genexpr>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
tj|}	|jj
|	dfS(NRR(RRRRRRRtPROVISION_FULLRzRERRPRRRd(
Rrtdst_pool_idRAR?tnew_vol_nameRR>tsrc_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	<genexpr>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

cCs|jjd}|r+tj|}ntj|}|jj|}|d}|j|||ddt}	|jj	||	||j
tj|	}
|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	<genexpr>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.pytfs_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	<genexpr>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.pytvolume_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(RRPR(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	<genexpr>	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_volRtmin_io_sizetopt_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]'}tj|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 tj!|
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	<genexpr>(
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
RRR
RRR!R+R3tobjectR4RPR(((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt<module>s$d		
	8
Back to Directory File Manager