Current File : //usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyo
�
.�P`c@sddlZddlZddlZddlZddlZddlmZddlmZmZm	Z	m
Z
mZmZm
Z
mZmZmZmZmZmZmZmZd�Zd�Zd�Zdefd��YZd	efd
��YZdefd��YZdS(
i����N(tsize_human_2_size_bytes(tSystemtVolumetDisktPoolt
FileSystemtAccessGroupt
FsSnapshott	NfsExporttmd5tLsmErrort
TargetPorttErrorNumbert	JobStatustBatterytint_divcs�fd�}|S(Ncsiy�||�SWnQtjk
r�}t|d�tkrct|dd�rc|djj�nt|�dkr�tt	j
d��ntt	jdt|���n�tk
r�t|d�tkr�t|dd�r�|djj�n�nltk
rd}t|d�tkrEt|dd�rE|djj�ntt	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:tdd�D])}|jtdtjdd���qWdj|�S(s.
    Generate a random VPD83 NAA_Type3 ID
    t50iis%02xi�t(trangetappendRtrandomtrandinttjoin(tvpdt_((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_random_vpd:s	'cCs<i}x/t|j�D]\}}||||d<qW|S(Ni(t	enumeratetdescription(tcursortrowtdtidxtcol((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
_dict_factoryDstPoolRAIDcBs�eZid�ej6d�ej6d�ej6d�ej6d�ej6d�ej6d�ej	6d�ej
6d�ej6d	�ej6d
�ej
6d�ej6d�ej6d
�ej6Zid�ej6d�ej6d�ej6d�ej6d�ej6d�ej6d�ej	6d�ej
6d�ej6d�ej6d�ej
6d�ej6d�ej6d�ej6Zed��ZRS(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|d�S(Ni(R(R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6escCst|d�dS(Nii(R(R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6fscCst|d�dS(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|d�dS(Nii(R(R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6jscCst|d�dS(Ni(R(R5((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR6kscCs}|ttjj��kr4ttjd|��ntj||�tkrlttjd||f��ntj||�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	Bs�eZdZdeee�fZdZdZdZdZdZ	dZ
dZdd	Ze
jZejZejZejZd
ZdZdZejejejejejejej gZ!d
d	dd	dd	dd	dd	dd	dd	d	d	gZ"d�Z#d�Z$d�Z%d�Z&d�Z'd�Z(d�Z)d�Z*d�Z+e,d�Z-d�Z.d�Z/e0e0d�Z1d�Z2d �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&d0�ZCd1�ZDd2�ZEd3�ZFd4�ZGd5�ZHd6�ZId7�ZJe0d8�ZKd9�ZLd:�ZMeAd;��ZNe0d<�ZOd=�ZPd>�ZQd?�ZRd@�ZSdA�ZTdB�ZUdC�ZVdD�ZWeXdE�ZYdF�ZZdG�Z[dH�Z\dI�Z]e0dJ�Z^dK�Z_dL�Z`dM�ZadN�ZbdO�ZcdP�ZddQ�ZedR�ZfdS�ZgdT�ZhdU�ZidV�ZjdW�ZkdX�ZldY�ZmdZ�Znd[�Zod\�ZpRS(]s4.1sLSM_SIMULATOR_DATA_%s_%siiissim-01sLSM simulated storage plug-inii�ii
t#iiii i@icCs�tjj|�sHtjtj|tjtjB��tj|d�n||_d|_
tj|dt
t|d��dd�|_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+|j��nXdS(,Ni�ttimeouti�tisolation_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|dj�kr^|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�|j�r$|j�dS|jditjd6tjd6tjd6dd6tj	d6tj
d	6�td
�}td�}g}xtdd
�D]n}|jdidd6|d6t
jd6t
jd6t�d6dd6t
jd6d|d6�|j|j�q�Wg}x�tdd�D]�}|jdidd6|d6t
jd6t
jd6t�d6dd6t
jd6d|d6�t|�d
kr#|j|j�q#q#Wg}x�tdd�D]�}|jdidd6|d6t
jd6t
jd6t�d6t
jd6t
jd6d|d6�t|�d
kr�|j|j�q�q�Wxrtdd �D]a}|jdid!d6|d6t
jd6t
jd6t�d6t
jd6t
jd6d"|d6�qZW|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�|j�dSdS(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|_|j�S(s9
        Execute sql command and get all output.
        (RhR.texecuteRetfetchall(RrRsRt((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt	_sql_exec�s
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|jjd�dS(NsBEGIN IMMEDIATE TRANSACTION;(RhR�(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR�scCs|jj�dS(N(Rhtcommit(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR�scCs|jj�dS(N(Rhtrollback(Rr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRscCs�t|j��}gt|j��D]$}|dkr=dn	t|�^q%}d|ddj|�ddj|�f}|j|�dS(NR#s INSERT INTO %s (%s) VALUES (%s);s'%s's', '(R7R9tvaluesRdRR(R�(RrR�t	data_dictR9tvR�Rs((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR�s=cCsyd||f}|j|�}|rqt|�dkr;dSt|�dkrU|dSttjdt���n|SdS(NsSELECT * FROM %s WHERE %siis%_data_find(): Got non-unique data: %s(R�RxRdR
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�(RrR�tdata_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�(RrR�R�Rs((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_data_delete7scCsH|jditjdtj�d6tj�d6|d6|d6�|jS(s*
        Return a job id(Integer)
        tjobstLSM_SIM_TIMEtdurationt	timestampt	data_typeR�(R�R[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(NR�sid="%s"(R�(Rrt
sim_job_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_job_deleteJscCsE|jdd|dt�}|dkr=ttjd��nttj�t|d�|dd�}d}d}|dkr�d}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.
        R�sid=%sR�s
Job not foundR�R�idiR�R�N(R�RzRdR
Rt
NOT_FOUND_JOBRgR�tfloatRPtJOB_DATA_TYPE_VOLt
sim_vol_of_idtJOB_DATA_TYPE_FStsim_fs_of_idtJOB_DATA_TYPE_FS_SNAPtsim_fs_snap_of_id(RrR�tsim_jobtprogresstdataR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_job_statusMs.	)	

cCs
|jd�S(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|�D��S(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
|jd�S(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
|jd�S(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_pools�scCs|jd|tjd�S(NR�R(t_sim_data_of_idRtNOT_FOUND_POOL(RrR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_pool_of_id�sic
Cs7|dkrtj}n|tjks6|tjkrBtj}n|jdi|d6tjd6dd6|d6|d6|d	6tj	d
6|d6�t
j|t|��}|j
}x>|| D]2}	|jd|	d
|�|jd|	dd�q�Wx>||D]2}	|jd|	d
|�|jd|	dd�q�W|S(NitpoolsR~RR#R�R�R�R<tmember_typet
strip_sizeR�t
owner_pool_idtroletDATAtPARITY(RPtDEFAULT_STRIP_SIZERRCRAtBLK_SIZER�RR�tMEMBER_TYPE_DISKR4R>RxReR�(
RrR~R�R<R�R�R�R>R�tsim_disk_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR��s<

	cCs_|jdi	|d6tjd6dd6|d6|d6tjd6tjd	6|d
6|d6�|jS(NR�R~RR#R�R�R�R<R�R�R�(R�RR�RtRAID_TYPE_OTHERtMEMBER_TYPE_POOLRe(RrR~R�R�R�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR��s


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_count�scCs|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_count�scCs+|r|jdd|�S|jd�SdS(s0
        Return a list of sim_vol dict.
        tvolumes_by_ag_viewsag_id=%stvolumes_viewN(R�R�(Rrt	sim_ag_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vols�scCsO|j|d|dt�}|dkrK|rDt|d|��qKdSn|S(Nsid=%sR�s%s not found(R�RzRdR
(RrR�R�tlsm_error_not	data_nametsim_data((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR��scCs|jd|tjd�S(sD
        Return sim_vol if found. Raise error if not found.
        RR(R�RtNOT_FOUND_VOLUME(Rrt
sim_vol_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR��scCs8|j|�}|d|kr4ttjd��ndS(Nt
free_spacesInsufficient space in pool(R�R
RtNOT_ENOUGH_SPACE(RrR�t
size_bytestsim_pool((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_check_pool_free_space�s	cCs|tjdtjtjS(Ni(RPR(R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_block_rounding�scCs�tj|�}|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(
NR�R~tpool_idR�t
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_CACHER�RtIntegrityErrorR
Rt
NAME_CONFLICTRe(RrR~RR�Rtsim_volR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_create�s(	









cCs|j|�}|j|�r3ttjd��n|j|�}t|�dkr�x2|D]'}||kr[ttjd��q[q[Wn|dr�x<|jdd|d�D] }|j	d|d	d
d�q�W|jdd|d�n|jd
d|�dS(sB
        This does not check whether volume exist or not.
        s Volume is masked to access groupis%Requested volume has child dependencyRR�sowner_pool_id="%s"RR�R}R�R�sid="%s"RN(R�t_sim_ag_ids_of_masked_volR
Rt	IS_MASKEDtdst_sim_vol_ids_of_srcRxtHAS_CHILD_DEPENDENCYR�R�RdR�(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�}|rQttjd��n|jdi|d6|d6�dS(Nt	vol_maskssag_id="%s" AND vol_id="%s"s2Volume is already masked to requested access grouptag_idtvol_id(R�tsim_ag_of_idR�R
RtNO_STATE_CHANGER�Rd(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|�nttjd��dS(Nsag_id="%s" AND vol_id="%s"R.s.Volume is not masked to requested access group(R�R1R�R�R
RR2Rd(RrRR	R�R3((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_unmaskBs

	cCs$td�|jdd|�D��S(Ncss|]}|dVqdS(R0N((R�tm((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|�D��S(Ncss|]}|dVqdS(R/N((R�R6((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|krCttjd��n|j|d�}||d}|dkr�|dtj@r�ttj	d��n|d|kr�ttj
d��q�n&|dtj@r�ttj	d��n|jd	|d|�|jd	|d
|�dS(NR�s%Volume size is identical to requestedRiR�s.Requested pool does not allow volume size growRsInsufficient space in poolRR(
RPRR�R
RR2R�RR�t
NO_SUPPORTRR�R�(RrRtnew_size_bytesR%Rt	increment((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_resizeYs0cCs1|j|�td�|jdd|�D��S(sL
        Return a list of dst_vol_id for provided source volume ID.
        css|]}|dVqdS(t
dst_vol_idN((R�R0((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys	<genexpr>�stvol_repsssrc_vol_id="%s"(R�R7R�(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|d6�dS(Ncss|]}|dVqdS(t
src_vol_idN((R�tr((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys	<genexpr>�sR=sdst_vol_id="%s"iR?R<trep_type(R�RtREPLICATE_COPYR7R�RxR�(RrR>R,RAt
blk_rangestcur_src_sim_vol_ids((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_replica�s"

cCs<|j|�s$ttjd��n|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_break�scCsN|j|�}|d|kr4ttjd��n|jd|d|�dS(NRs,Volume admin state is identical to requestedR(R�R
RR2R�(RrRtnew_admin_stateR%((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_state_change�s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_format�s
cCsN|r|jdd|�}n|jd�}g|D]}tj|�^q5S(Ntags_by_vol_views	vol_id=%stags_view(R�R�RPRM(RrRtsim_agsta((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRP�s
cCs\y)|jdi|d6|d6|d6�Wn,tjk
rW}ttjd|��nXdS(NtinitsR}t	init_typetowner_ag_ids6Initiator '%s' is already in use by other access group(R�RR#R
RtEXISTS_INITIATOR(RrRStinit_idR	R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_init_create�scCsdS(N(Rd(RrRVtin_usertin_passtout_usertout_pass((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytiscsi_chap_auth_set�scCsjy$|jdi|d6�|j}Wn,tjk
rR}ttjd|��nX|j|||�|S(NtagsR~s1Name '%s' is already in use by other access group(R�ReRR#R
RR$RW(RrR~RSRVR	R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
sim_ag_create�s
cCsI|j|�|j|�r1ttjd��n|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_delete�s
cCs~|j|�}||dkr4ttjd��n|tjkrg|tjkrgttjd��n|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_add�scCsw|j|�}||dkr4ttjd��nt|d�dkr_ttjd��n|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(R�RtNOT_FOUND_ACCESS_GROUPRPRM(RrR	RL((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR1s
	
cCs
|jd�S(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||d�S(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
		cCs�tj|�}|j||�y7|jdi|d6|d6|d6|d6|d6�Wn,tjk
r�}ttjd|��nX|j	S(NtfssR~R�RRRs'Name '%s' is already in use by other fs(
RPRRR�RR#R
RR$Re(RrR~RR�R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
sim_fs_create*s cCsI|j|�|j|�r1ttjd��n|jdd|�dS(Ns*Requested file system has child dependencyRksid="%s"(R�tclone_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
cCs�tj|�}|j|�}|d|krCttjd��n|j|d�}||dkr�|d||dkr�ttjd��n|jd|d|�|jd|d|�|jd|d|�dS(NR�s*File System size is identical to requestedRRsInsufficient space in poolRkR(	RPRR�R
RR2R�RR�(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"(R�R�(RrRi((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_snaps`s
cCsJ|jd|tjd�}|rF|d|krFttjd��n|S(NRqsFile system snapshottfs_idsFDefined file system snapshot ID is not belong to requested file system(R�RtNOT_FOUND_FS_SSR
(Rrtsim_fs_snap_idRitsim_fs_snap((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR�ds	cCst|j|�y5|jdi|d6|d6ttj��d6�Wn(tjk
rl}ttjd��nX|j	S(Ntfs_snapsR~RsR�s6The name is already used by other file system snapshot(
R�R�RgR�RR#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(R�R�(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"(R�R�R�(RrRuRi((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_snap_delete�s
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_fs�s
cCsU|j|�|j|�|r3|j||�n|jdi|d6|d6�dS(Nt	fs_clonest	src_fs_idt	dst_fs_id(R�R�R�(Rrt
src_sim_fs_idt
dst_sim_fs_idRu((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_clone�s

cCs*|j|�|r&|j||�ndS(N(R�R�(RrRitsrc_fs_nametdst_fs_nameRu((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_file_clone�s
cCs1|j|�td�|jdd|�D��S(sM
        Return a list of dst_fs_id for provided clone source fs ID.
        css|]}|dVqdS(R�N((R�R0((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys	<genexpr>�sRssrc_fs_id="%s"(R�R7R�(RrR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRm�s
cCs|jdd|�dS(NRssrc_fs_id="%s"(R�(RrR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_fs_src_clone_break�scCs`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_format�s



cs#t�fd��jd�D��S(Nc3s|]}�j|�VqdS(N(R�(R�te(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_exps�scCs"|j|jd|tjd��S(NR�s
NFS Export(R�R�RtNOT_FOUND_NFS_EXPORT(Rrt
sim_exp_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
sim_exp_of_id�sc
Cs0|dkr dt�d }n|j|�y>|jdi|d6|d6|d6|d6|d6|	d	6�Wn(tjk
r�}
ttjd
��nX|j	}x,|D]$}|jdi|d6|d
6�q�Wx,|D]$}
|jdi|
d6|d
6�q�Wx,|D]$}|jdi|d6|d
6�qW|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+R�R�RR#R
RR$Re(RrRiR�R�R�R�R�R�R�R�RR�t	root_hosttrw_hosttro_host((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_exp_create�sJ

	


cCs%|j|�|jdd|�dS(NR�sid="%s"(R�R�(RrR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_exp_delete�s
cCs
|jd�S(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
|jd�S(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(R�R�(RrRtpdc((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_pdc_sets
cCs'|j|�|jd|d|�dS(NRR(R�R�(RrRtrcp((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_rcp_sets
cCs'|j|�|jd|d|�dS(NRR(R�R�(RrRtwcp((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsim_vol_wcp_sets
(qR?R@tVERSIONR	RyR�R�R�R�R�R�RR�RtMODE_HARDWARE_RAIDtSYS_MODERtWRITE_CACHE_POLICY_AUTOR tREAD_CACHE_POLICY_ENABLEDR!tPHYSICAL_DISK_CACHE_DISABLEDR"R�RnRkRBRCRFRGRHRKRLtSUPPORTED_VCR_RAID_TYPEStSUPPORTED_VCR_STRIP_SIZESRuR{R�R�R�R�R�RR�R:R�R�R�RdR�R�R�RwR�R�R�R�R�R�RRR
R�R�RRORR&R-R4R5R7R'R;R)RERFRHRMRPRWR\R^R_RbRdR1RgRzR�RlRnRpRrR�RxR|R}R~R�R�RmR�R�R�R�R�R�R�R�R�R�R�(((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRP�s�
				*	���		�							
	
			#					)	
						
			#	
 	
	

								
																						2					RcBs%eZejdej�d�Zed��Zed��Z	ed��Z
ed��Zed��Zed��Z
ed��Zed	��Zed
��ZdOdOd�Zedd
��Zedd��Zedd��Zedd��Zed��Zed��Zedd��Zed��Zed��Zed��Zedd��Zed��Zed��Z ede!dd��Z"edd��Z#edd��Z$edd��Z%edd��Z&edd��Z'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!d0��Z8edd1��Z9ed2��Z:edd3��Z;edd4��Z<edd5��Z=ed6��Z>ed7��Z?edd8��Z@edd9��ZAedd:��ZBedd;��ZCedd<��ZDedd=��ZEedd>��ZFedd?��ZGedd@��ZHedA��ZIedB��ZJedC��ZKedD��ZLedE��ZMedF��ZNeddG��ZOeddH��ZPedI��ZQedJ��ZRedK��ZSeddL��ZTeddM��ZUeddN��ZVRS(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|ttjd��S(Ns
Job not found(RR�R
RR�(tjob_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_job_id_of&scCstj|ttjd��S(NsPool not found(RR�R
RR�(R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_pool_id_of+scCstj|ttjd��S(NsVolume not found(RR�R
RR(R0((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_vol_id_of0scCstj|ttjd��S(NsFile system not found(RR�R
RRh(Rs((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
_sim_fs_id_of6scCstj|ttjd��S(NsFile system snapshot not found(RR�R
RRt(tsnap_id((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_fs_snap_id_of<scCstj|ttjd��S(NsFile system export not found(RR�R
RR�(R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_exp_id_ofCscCstj|ttjd��S(NsFile system export not found(RR�R
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_FILERPRR�RcRR(RrRcRR((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRuQs
	cCs&|jj||�}dtj|fS(NsJOB_ID_%0*d(RR�RPRk(RrR�tsim_data_idR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_job_create[s	ic	Cs�tj|�}|jj|�\}}}tj}|dkrKtj}nd}|tj	krrtj
|�}nB|tjkr�tj|�}n!|tj
kr�tj|�}n|||fS(Nid(RR�RR�R
t
INPROGRESStCOMPLETERdRPR�t_sim_vol_2_lsmR�t
_sim_fs_2_lsmR�t_sim_fs_snap_2_lsm(	RrR�tflagsR�R�R�R
RR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
job_status`s		cCs7|jj�|jjtj|��|jj�dS(N(RR�R�RR�R�Rd(RrR�R�((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_get�scCs@t|d|d|d|dd|ddtjd|d	�S(
NR}R~RR�t_fw_versionRvt_modet_read_cache_pctR�(RRPR�(tsim_sys((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_sys_2_lsm�s
	cCstd�|jj�D��S(Ncss|]}tj|�VqdS(N(RR�(R�R�((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'ttjd��n|jj�|jjdtjd|�|jj	�dS(NsSystem not foundR|R�(R}RPR�R
RtNOT_FOUND_SYSTEMRR�R�R�Rd(Rrtsystemtread_pctR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytsystem_read_cache_pct_update�s


c
CsOt|d|d|dtjtt|dtj��|dtj|d�S(Nt
lsm_vol_idR~R�R�Rtlsm_pool_id(RRPRRgRR�(R%((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR��s

cCstd�|jj�D��S(Ncss|]}tj|�VqdS(N(RR�(R�R�((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�sc

Cs{|d}|d}|d}|d}|d}|d}tj}|d}|d}	t||||	|||||�	S(	NR�R~R�RRR�R�R�(RPR�R(
RRR~R�RRR�tsys_idR�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_pool_2_lsm�s





	

cCs=|jj�|jj�}|jj�td�|D��S(Ncss|]}tj|�VqdS(N(RR�(R�R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pys	<genexpr>�s(RR�R�RR7(RrR�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR��s


cCs�tj}|ddkr)|tjO}nt|d|d|dtjtt|dtj��|tjd|dd|d	d
|dd|d
�S(NR�R�R~R�R�t_vpd83R�t	_locationR�t_rpmR�t
_link_typeR�(	RR�RdtSTATUS_FREERPRRgRR�(tsim_disktdisk_status((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_disk_2_lsm�s	

cCstd�|jj�D��S(Ncss|]}tj|�VqdS(N(RR�(R�R�((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��sc
Csy|tkr|jj�n|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:RR�R&RR�R�RPR�R�Rd(
RrRtvol_nameRtthinpR�t
_internal_uset_is_hw_raid_voltnew_sim_vol_idR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
volume_create�s		
cCsC|jj�|jjtj|��|j�}|jj�|S(N(RR�R-RR�R�R�(RrR0R�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
volume_delete�s


cCs[|jj�tj|�}|jj||�|jtj|�}|jj�|dfS(N(
RR�RR�R;R�RPR�R�Rd(RrR0R9R�RR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
volume_resize�s

c
Cs�|jj�tj|�}|jj|�}|j|||dtjdt�}|jj	|||�|j
tj|�}	|jj
�|	dfS(NR�R�(RR�RR�R�R�RtPROVISION_FULLRzRER�RPR�R�Rd(
Rrtdst_pool_idRAR?tnew_vol_nameR�R>tsrc_sim_volR,R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_replicates


cCs+|tjkr$ttjd��ntjS(NsSystem not found(RPR�R
RR�R(RrR�R�((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(RR�RERR�R�R�(RrRAR?R<trangesR�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_replicate_range#s
	
cCs=|jj�|jjtj|�tj�|jj�dS(N(	RR�RHRR�RRR�Rd(RrR0R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
volume_enable5s

	
cCs=|jj�|jjtj|�tj�|jj�dS(N(	RR�RHRR�RtADMIN_STATE_DISABLEDR�Rd(RrR0R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_disable=s

	
cCsFtj|�}|jj|�}x|D]}||kr(tSq(WtS(N(RR�RR)RzR:(RrR0R�R>R+R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_child_dependencyEs
cCsC|jj�|jjtj|��|j�}|jj�|S(N(RR�RFRR�R�R�(RrR0R�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_child_dependency_rm`s
	
cCs0t|d|d|d|d|dtj�S(Nt	lsm_fs_idR~R�RR�(RRPR�(Ro((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR�kscCstd�|jj�D��S(Ncss|]}tj|�VqdS(N(RR�(R�tf((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|jj�n|jj||tj|��}|rA|S|jtj|�}|jj�|dfS(N(
RR�RlRR�R�RPR�R�Rd(RrRtfs_nameRR�R�t
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(RR�RnRR�R�R�(RrRsR�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt	fs_delete�s


cCs[tj|�}|jj�|jj||�|jtj|�}|jj�|dfS(N(
RR�RR�RpR�RPR�R�Rd(RrRsR9R�RiR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt	fs_resize�s

cCs�|jj�d}|r+tj|�}ntj|�}|jj|�}|d}|j|||ddt�}	|jj	||	|�|j
tj|	�}
|jj
�|
dfS(NR�R�R�(RR�RdRR�R�R�RRzR�R�RPR�R�(RrR�R�R�R�RuR�t
src_sim_fsRR�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_clone�s

	
cCsj|jj�d}|r+tj|�}n|jjtj|�|||�|j�}|jj�|S(N(	RR�RdRR�R�R�R�R�(RrRsR�R�R�R�RuR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
fs_file_clone�s
	
cCst|d|d|d�S(Ntlsm_fs_snap_idR~R�(R(Rv((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyR��s
cCs)td�|jjtj|��D��S(Ncss|]}tj|�VqdS(N(RR�(R�ts((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_snapshots�s	cCsW|jj�|jjtj|�|�}|jtj|�}|jj�|dfS(N(
RR�RxRR�R�RPR�R�Rd(RrRst	snap_nameR�RuR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_snapshot_create�s
	
cCsO|jj�|jjtj|�tj|��|j�}|jj�|S(N(RR�R}RR�R�R�R�(RrRsR�R�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_snapshot_delete�s
	
c	Csm|jj�d}|r+tj|�}n|jjtj|�||||�|j�}|jj�|S(N(	RR�RdRR�R|R�R�R�(	RrRsR�RyRzR{R�RuR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_snapshot_restore�s
	
cCs�tj|�}|tkr+|jj�n|jj|�gkr{|jj|�gkr{|tkrw|jj�ntS|tkr�|jj�ntS(N(	RR�R:RR�RmRrRRz(RrRsRyR�R�Ri((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_child_dependency�scCs�|jj�|j||dt�tkr@ttjd��ntj	|�}|jj
|�|jj|�|j�}|jj
�|S(s�
        Assuming API defination is break all clone relationship and remove
        all snapshot of this source file system.
        R�s9No snapshot or fs clone target found for this file system(RR�RRzR:R
RR2RR�R�R~R�R�(RrRsRyR�R�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_child_dependency_rm�s

cCsMt|d|d|d|d|d|d|d|d|d	|d
�
S(Nt
lsm_exp_idR�R�R�R�R�R�R�R�R�(R(R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_exp_2_lsm	s
cCs)g|jj�D]}tj|�^qS(N(RR�RR(RrR�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytexports	sc

Csl|jj�|jjtj|�||||||||	�	}|jj|�}|jj�tj|�S(N(RR�R�RR�R�R�R(
RrRsR�R�R�R�R�R�R�R�R�R�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt	fs_export	s
	
cCs7|jj�|jjtj|��|jj�dS(N(RR�R�RR�R�Rd(RrR�R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytfs_unexport(	s

cCs)t|d|d|d|dtj�S(Nt	lsm_ag_idR~RJRS(RRPR�(RL((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
_sim_ag_2_lsm/	scCstd�|jj�D��S(Ncss|]}tj|�VqdS(N(RR(R�RQ((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$ttjd��n|jj�|jj|||�}|jj|�}|jj	�t
j|�S(NsSystem not found(RPR�R
RR�RR�R^R1R�RR(RrR~RVRSR�R�t
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|��|jj�dS(N(RR�R_RR�R�Rd(RrR/R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytaccess_group_deleteE	s

cCs^tj|�}|jj�|jj|||�|jj|�}|jj�tj|�S(N(RR�RR�RbR1R�R(RrR/RVRSR�R	R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytaccess_group_initiator_addL	s

cCs[tj|�}|jj�|jj||�|jj|�}|jj�tj|�S(N(RR�RR�RdR1R�R(RrR/RVRSR�R	RL((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytaccess_group_initiator_deleteU	s

cCsC|jj�|jjtj|�tj|��|jj�dS(N(RR�R4RR�R�R�Rd(RrR/R0R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_mask_	s
	
cCsC|jj�|jjtj|�tj|��|jj�dS(N(RR�R5RR�R�R�Rd(RrR/R0R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt
volume_unmaskh	s
	
cCsX|jj�|jjdtj|��}|jj�g|D]}tj|�^q?S(NR	(RR�R
RR�RR�(RrR/R�R
R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt"volumes_accessible_by_access_groupq	s


cCsX|jj�|jjdtj|��}|jj�g|D]}tj|�^q?S(NR(RR�RPRR�RR(RrR0R�RPRQ((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytaccess_groups_granted_to_volume{	s


cCs:|jj�|jj|||||�|jj�dS(N(RR�R\R�Rd(RrRVRXRYRZR[R�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytiscsi_chap_auth�	s

	
cCs7t|d|d|d|d|d|dtj�S(Nt
lsm_tgt_idR�R�R�R�R�(RRPR�(tsim_tgt((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt_sim_tgt_2_lsm�	s
cCstd�|jj�D��S(Ncss|]}tj|�VqdS(N(RR%(R�tt((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
jkr�ttjd|d��n|t
jks
|t
jkrtj	}nt|d	|�}|||||gS(
NsPool not foundR�R�R<R=R�s;volume_raid_info(): Got unsupported RAID_TYPE_MIXED pool %sR�R>(RR�RR�RR
RR�RPRRtOPT_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 foundR�tparent_lsm_pool_idR}R<(
RR�RR�R}R
RR�RRRR�tMEMBER_TYPE_UNKNOWN(Rrtlsm_poolRR�t
member_ids((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytpool_member_info�	s	
	cCs7|jtjkr'ttjd��ntjtjfS(NsSystem not found(R}RPR�R
RR�R�R�(RrR�((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_raid_create_cap_get�	sc
Cs�|tjkr$ttjd��n|tjkr?tj}n$|tjkrcttjd��n|j	j
�d|}g|D]'}tj|j
ttjd��^q�}x:|D]2}|jtj@s�ttjd|j
��q�q�WyD|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<R�R�R�R�s+Name '%s' is already in use by other volumeR�RiR�R�i("RPR�R
RR8RtVCR_STRIP_SIZE_DEFAULTR�R�RR�RR�R}tNOT_FOUND_DISKRRR�t
DISK_NOT_FREER�RR�R�R�RR#R$R�R�R�RzR�R�R�(RrR~R<R�R�t	pool_nameR0R�tdiskR�RRRR%((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_raid_create�	sP

1
	



cCs7tj|jttjd��}|jj|�}dS(NsVolume not found(	RR�R}R
RRRR�Rd(RrtvolumeR�t
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(	RR�R}R
RRRR�Rd(RrR;R�R<R%((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_ident_led_off
s	cCs)t|d|d|d|dtj�S(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�|jj�D��S(Ncss|]}tj|�VqdS(N(RRA(R�R&((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�|r�tj}q�n>|dtjkr�tj}n|dtjkr�tj}n|dtjkrtj}n|dtjkrtj}n|d||d||dgS(NsVolume not foundRRRR(RR�RR�R}R
RRRt WRITE_CACHE_STATUS_WRITE_THROUGHtREAD_CACHE_STATUS_DISABLEDR:R�RR�RzR�tWRITE_CACHE_STATUS_WRITE_BACKtWRITE_CACHE_POLICY_WRITE_BACKtWRITE_CACHE_POLICY_UNKNOWNtWRITE_CACHE_STATUS_UNKNOWNR�tREAD_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|jj�tj|jttjd��}|jj||�|jj	�dS(NsVolume not found(
RR�RR�R}R
RRR�R�(RrR;R�R�R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt!volume_physical_disk_cache_updateL
s
cCsR|jj�tj|jttjd��}|jj||�|jj	�dS(NsVolume not found(
RR�RR�R}R
RRR�R�(RrR;R�R�R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt volume_write_cache_policy_updateU
s
cCsR|jj�tj|jttjd��}|jj||�|jj	�dS(NsVolume not found(
RR�RR�R}R
RRR�R�(RrR;R�R�R((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pytvolume_read_cache_policy_update^
s
N(WR?R@R[R�ttempfilet
gettempdirR�ROR�R�R�R�R�R�R�R�R!RuRdR�R�R�R�R�R�R|R�R�RR�R�R�R�R:R�R�R�R�R�R�R�R�R�R�R�R�RRRRRR�R
RR
RRRRRRRRR]RRRRRRR R!R"R%R'R.R3R4R:R=R>RAR�RNRORPRQ(((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyRs�	


		
		&
4		"(R&RRR[R�RtlsmRRRRRRRRRR	R
RRR
RRR!R+R3tobjectR4RPR(((s;/usr/lib/python2.7/site-packages/lsm/plugin/sim/simarray.pyt<module>s$d		
	8�������