Discussion:
[Libstoragemgmt-devel] [PATCH 1/4] simarray.py: Fix raid type
Tony Asleson
2014-03-05 21:38:40 UTC
Permalink
Signed-off-by: Tony Asleson <***@redhat.com>
---
lsm/lsm/simarray.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lsm/lsm/simarray.py b/lsm/lsm/simarray.py
index 5d11133..3c8841b 100644
--- a/lsm/lsm/simarray.py
+++ b/lsm/lsm/simarray.py
@@ -2158,7 +2158,7 @@ class SimData(object):
if len(sim_vols) >= 1:
member_ids = [v['vol_id'] for v in sim_vols]
sim_pool = self._pool_create_from_volumes(
- pool_name, member_ids, disk_raid_type, raise_error)
+ pool_name, member_ids, vol_raid_type, raise_error)
if sim_pool:
return sim_pool
--
1.8.2.1
Tony Asleson
2014-03-05 21:38:42 UTC
Permalink
Some of the methods on the SimData class were being called
by SimArray. As methods that start with '_' are
considered private, I changed these to public.

Signed-off-by: Tony Asleson <***@redhat.com>
---
lsm/lsm/simarray.py | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/lsm/lsm/simarray.py b/lsm/lsm/simarray.py
index f280c28..ee8e7e3 100644
--- a/lsm/lsm/simarray.py
+++ b/lsm/lsm/simarray.py
@@ -109,7 +109,7 @@ class SimArray(object):
# to make sure that the data will work and not cause any
# undo confusion.
if self.data.version != SimData.SIM_DATA_VERSION or \
- self.data.signature != SimData._state_signature():
+ self.data.signature != SimData.state_signature():
SimArray._version_error(self.dump_file)
except AttributeError:
SimArray._version_error(self.dump_file)
@@ -153,8 +153,8 @@ class SimArray(object):
def _sim_pool_2_lsm(self, sim_pool, flags=0):
pool_id = sim_pool['pool_id']
name = sim_pool['name']
- total_space = self.data._pool_total_space(pool_id)
- free_space = self.data._pool_free_space(pool_id)
+ total_space = self.data.pool_total_space(pool_id)
+ free_space = self.data.pool_free_space(pool_id)
status = sim_pool['status']
sys_id = sim_pool['sys_id']
opt_data = OptionalData()
@@ -579,7 +579,7 @@ class SimData(object):
return "EXP_ID_%08d" % self.SIM_DATA_CUR_EXP_ID

@staticmethod
- def _state_signature():
+ def state_signature():
return 'LSM_SIMULATOR_DATA_%s' % md5(SimData.SIM_DATA_VERSION)

@staticmethod
@@ -589,7 +589,7 @@ class SimData(object):
def __init__(self):
self.tmo = SimData.SIM_DATA_TMO
self.version = SimData.SIM_DATA_VERSION
- self.signature = SimData._state_signature()
+ self.signature = SimData.state_signature()
self.job_num = 0
self.job_dict = {
# id: SimJob
@@ -695,11 +695,11 @@ class SimData(object):

return

- def _pool_free_space(self, pool_id):
+ def pool_free_space(self, pool_id):
"""
Calculate out the free size of certain pool.
"""
- free_space = self._pool_total_space(pool_id)
+ free_space = self.pool_total_space(pool_id)
for sim_vol in self.vol_dict.values():
if sim_vol['pool_id'] != pool_id:
continue
@@ -796,7 +796,7 @@ class SimData(object):
"%s(%d)" % (Pool.raid_type_to_str(raid_type),
raid_type))

- def _pool_total_space(self, pool_id):
+ def pool_total_space(self, pool_id):
"""
Find out the correct size of RAID pool
"""
@@ -864,7 +864,7 @@ class SimData(object):
def volume_create(self, pool_id, vol_name, size_bytes, thinp, flags=0):
size_bytes = SimData._block_rounding(size_bytes)
# check free size
- free_space = self._pool_free_space(pool_id)
+ free_space = self.pool_free_space(pool_id)
if (free_space < size_bytes):
raise LsmError(ErrorNumber.SIZE_INSUFFICIENT_SPACE,
"Insufficient space in pool")
@@ -891,7 +891,7 @@ class SimData(object):
new_size_bytes = SimData._block_rounding(new_size_bytes)
if vol_id in self.vol_dict.keys():
pool_id = self.vol_dict[vol_id]['pool_id']
- free_space = self._pool_free_space(pool_id)
+ free_space = self.pool_free_space(pool_id)
if (free_space < new_size_bytes):
raise LsmError(ErrorNumber.SIZE_INSUFFICIENT_SPACE,
"Insufficient space in pool")
@@ -910,7 +910,7 @@ class SimData(object):
size_bytes = self.vol_dict[src_vol_id]['total_space']
size_bytes = SimData._block_rounding(size_bytes)
# check free size
- free_space = self._pool_free_space(dst_pool_id)
+ free_space = self.pool_free_space(dst_pool_id)
if (free_space < size_bytes):
raise LsmError(ErrorNumber.SIZE_INSUFFICIENT_SPACE,
"Insufficient space in pool")
@@ -1231,7 +1231,7 @@ class SimData(object):
def fs_create(self, pool_id, fs_name, size_bytes, flags=0):
size_bytes = SimData._block_rounding(size_bytes)
# check free size
- free_space = self._pool_free_space(pool_id)
+ free_space = self.pool_free_space(pool_id)
if (free_space < size_bytes):
raise LsmError(ErrorNumber.SIZE_INSUFFICIENT_SPACE,
"Insufficient space in pool")
@@ -1258,7 +1258,7 @@ class SimData(object):
new_size_bytes = SimData._block_rounding(new_size_bytes)
if fs_id in self.fs_dict.keys():
pool_id = self.fs_dict[fs_id]['pool_id']
- free_space = self._pool_free_space(pool_id)
+ free_space = self.pool_free_space(pool_id)
if (free_space < new_size_bytes):
raise LsmError(ErrorNumber.SIZE_INSUFFICIENT_SPACE,
"Insufficient space in pool")
@@ -1547,7 +1547,7 @@ class SimData(object):
# in that case we will check whether
# total_space == pool_free_size(sim_pool['pool_id'])
pool_id = sim_pool['pool_id']
- if self._pool_free_space(pool_id) > 0:
+ if self.pool_free_space(pool_id) > 0:
free_sim_pools.extend([sim_pool])
return sorted(
free_sim_pools,
@@ -1774,7 +1774,7 @@ class SimData(object):
else:
return None

- free_size = self._pool_free_space(member_id)
+ free_size = self.pool_free_space(member_id)
if free_size < size_bytes:
raise LsmError(ErrorNumber.SIZE_INSUFFICIENT_SPACE,
"Pool %s does not have requested free" %
@@ -1979,7 +1979,7 @@ class SimData(object):
if len(sim_pools) >= 1:
for sim_pool in sim_pools:
pool_id = sim_pool['pool_id']
- free_size = self._pool_free_space(pool_id)
+ free_size = self.pool_free_space(pool_id)
if free_size >= size_bytes:
return sim_pool
--
1.8.2.1
Tony Asleson
2014-03-05 21:38:43 UTC
Permalink
Signed-off-by: Tony Asleson <***@redhat.com>
---
lsm/lsm/simarray.py | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/lsm/lsm/simarray.py b/lsm/lsm/simarray.py
index ee8e7e3..97ab2be 100644
--- a/lsm/lsm/simarray.py
+++ b/lsm/lsm/simarray.py
@@ -34,6 +34,7 @@ from data import System, Volume, Disk, Pool, FileSystem, AccessGroup, \
# Used for format width for disks
D_FMT = 5

+
class SimJob(object):
"""
Simulates a longer running job, uses actual wall time. If test cases
@@ -141,7 +142,7 @@ class SimArray(object):
def _sim_vol_2_lsm(sim_vol):
return Volume(sim_vol['vol_id'], sim_vol['name'], sim_vol['vpd83'],
SimData.SIM_DATA_BLK_SIZE,
- int(sim_vol['total_space']/SimData.SIM_DATA_BLK_SIZE),
+ int(sim_vol['total_space'] / SimData.SIM_DATA_BLK_SIZE),
Volume.STATUS_OK, sim_vol['sys_id'],
sim_vol['pool_id'])

@@ -214,7 +215,8 @@ class SimArray(object):
for sim_disk in sim_disks:
disk = Disk(sim_disk['disk_id'], sim_disk['name'],
sim_disk['disk_type'], SimData.SIM_DATA_BLK_SIZE,
- int(sim_disk['total_space']/SimData.SIM_DATA_BLK_SIZE),
+ int(sim_disk['total_space'] /
+ SimData.SIM_DATA_BLK_SIZE),
Disk.STATUS_OK, sim_disk['sys_id'])
rc.extend([disk])
return SimArray._sort_by_id(rc)
@@ -762,7 +764,7 @@ class SimData(object):
raid_type == Pool.RAID_TYPE_RAID10):
if member_count % 2 == 1:
return 0
- return int(all_size/2)
+ return int(all_size / 2)
elif (raid_type == Pool.RAID_TYPE_RAID3 or
raid_type == Pool.RAID_TYPE_RAID4 or
raid_type == Pool.RAID_TYPE_RAID5):
@@ -772,7 +774,7 @@ class SimData(object):
elif raid_type == Pool.RAID_TYPE_RAID50:
if member_count < 6 or member_count % 2 == 1:
return 0
- return int(all_size - member_size*2)
+ return int(all_size - member_size * 2)
elif raid_type == Pool.RAID_TYPE_RAID6:
if member_count < 4:
return 0
@@ -780,17 +782,17 @@ class SimData(object):
elif raid_type == Pool.RAID_TYPE_RAID60:
if member_count < 8 or member_count % 2 == 1:
return 0
- return int(all_size - member_size*4)
+ return int(all_size - member_size * 4)
elif raid_type == Pool.RAID_TYPE_RAID51:
if member_count < 6 or member_count % 2 == 1:
return 0
- return int(all_size/2 - member_size)
+ return int(all_size / 2 - member_size)
elif raid_type == Pool.RAID_TYPE_RAID61:
if member_count < 8 or member_count % 2 == 1:
return 0
print "%s" % size_bytes_2_size_human(all_size)
print "%s" % size_bytes_2_size_human(member_size)
- return int(all_size/2 - member_size*2)
+ return int(all_size / 2 - member_size * 2)
raise LsmError(ErrorNumber.INTERNAL_ERROR,
"_size_of_raid() got invalid raid type: " +
"%s(%d)" % (Pool.raid_type_to_str(raid_type),
--
1.8.2.1
Tony Asleson
2014-03-05 21:38:41 UTC
Permalink
Re-worked code so that we create the disks in a loop
so that we can easily make a bunch more when needed.

Increased the width of the id number so that we can
accommodate the increased number of disks.

Signed-off-by: Tony Asleson <***@redhat.com>
---
lsm/lsm/simarray.py | 197 ++++++++++------------------------------------------
1 file changed, 36 insertions(+), 161 deletions(-)

diff --git a/lsm/lsm/simarray.py b/lsm/lsm/simarray.py
index 3c8841b..f280c28 100644
--- a/lsm/lsm/simarray.py
+++ b/lsm/lsm/simarray.py
@@ -31,6 +31,9 @@ from data import System, Volume, Disk, Pool, FileSystem, AccessGroup, \
Initiator, Snapshot, NfsExport, OptionalData


+# Used for format width for disks
+D_FMT = 5
+
class SimJob(object):
"""
Simulates a longer running job, uses actual wall time. If test cases
@@ -530,7 +533,7 @@ class SimData(object):
}
"""
SIM_DATA_BLK_SIZE = 512
- SIM_DATA_VERSION = "2.1"
+ SIM_DATA_VERSION = "2.2"
SIM_DATA_SYS_ID = 'sim-01'
SIM_DATA_INIT_NAME = 'NULL'
SIM_DATA_TMO = 30000 # ms
@@ -579,6 +582,10 @@ class SimData(object):
def _state_signature():
return 'LSM_SIMULATOR_DATA_%s' % md5(SimData.SIM_DATA_VERSION)

+ @staticmethod
+ def _disk_id(num):
+ return "DISK_ID_%0*d" % (D_FMT, num)
+
def __init__(self):
self.tmo = SimData.SIM_DATA_TMO
self.version = SimData.SIM_DATA_VERSION
@@ -596,7 +603,7 @@ class SimData(object):
'pool_id': 'POO1',
'name': 'Pool 1',
'member_type': Pool.MEMBER_TYPE_DISK_SATA,
- 'member_ids': ['DISK_ID_000', 'DISK_ID_001'],
+ 'member_ids': [SimData._disk_id(0), SimData._disk_id(1)],
'raid_type': Pool.RAID_TYPE_RAID1,
'status': SimData.SIM_DATA_POOL_STATUS,
'sys_id': SimData.SIM_DATA_SYS_ID,
@@ -613,12 +620,12 @@ class SimData(object):
'sys_id': SimData.SIM_DATA_SYS_ID,
'element_type': SimData.SIM_DATA_POOL_ELEMENT_TYPE,
},
- # lsm_test_aggr pool is requred by test/runtest.sh
+ # lsm_test_aggr pool is required by test/runtest.sh
'lsm_test_aggr': {
'pool_id': 'lsm_test_aggr',
'name': 'lsm_test_aggr',
'member_type': Pool.MEMBER_TYPE_DISK_SAS,
- 'member_ids': ['DISK_ID_002', 'DISK_ID_003'],
+ 'member_ids': [SimData._disk_id(2), SimData._disk_id(3)],
'raid_type': Pool.RAID_TYPE_RAID0,
'status': Pool.STATUS_OK,
'sys_id': SimData.SIM_DATA_SYS_ID,
@@ -635,163 +642,31 @@ class SimData(object):
}
disk_size_2t = size_human_2_size_bytes('2TiB')
disk_size_512g = size_human_2_size_bytes('512GiB')
- self.disk_dict = {
- 'DISK_ID_000': {
- 'disk_id': 'DISK_ID_000',
- 'name': 'SATA Disk 000',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SATA,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_001': {
- 'disk_id': 'DISK_ID_001',
- 'name': 'SATA Disk 001',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SATA,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_002': {
- 'disk_id': 'DISK_ID_002',
- 'name': 'SAS Disk 002',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SAS,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_003': {
- 'disk_id': 'DISK_ID_003',
- 'name': 'SAS Disk 003',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SAS,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- # More free disks for user to create pools on.
- 'DISK_ID_004': {
- 'disk_id': 'DISK_ID_004',
- 'name': 'SAS Disk 004',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SAS,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_005': {
- 'disk_id': 'DISK_ID_005',
- 'name': 'SAS Disk 005',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SAS,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_006': {
- 'disk_id': 'DISK_ID_006',
- 'name': 'SAS Disk 006',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SAS,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_007': {
- 'disk_id': 'DISK_ID_007',
- 'name': 'SAS Disk 007',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SAS,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_008': {
- 'disk_id': 'DISK_ID_008',
- 'name': 'SAS Disk 008',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SAS,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_009': {
- 'disk_id': 'DISK_ID_009',
- 'name': 'SSD Disk 009',
- 'total_space': disk_size_512g,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_010': {
- 'disk_id': 'DISK_ID_010',
- 'name': 'SSD Disk 010',
- 'total_space': disk_size_512g,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_011': {
- 'disk_id': 'DISK_ID_011',
- 'name': 'SSD Disk 011',
- 'total_space': disk_size_512g,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_012': {
- 'disk_id': 'DISK_ID_012',
- 'name': 'SSD Disk 012',
- 'total_space': disk_size_512g,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_013': {
- 'disk_id': 'DISK_ID_013',
- 'name': 'SSD Disk 013',
- 'total_space': disk_size_512g,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_014': {
- 'disk_id': 'DISK_ID_014',
- 'name': 'SSD Disk 014',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_015': {
- 'disk_id': 'DISK_ID_015',
- 'name': 'SSD Disk 015',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_016': {
- 'disk_id': 'DISK_ID_016',
- 'name': 'SSD Disk 016',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_017': {
- 'disk_id': 'DISK_ID_017',
- 'name': 'SSD Disk 017',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_018': {
- 'disk_id': 'DISK_ID_018',
- 'name': 'SSD Disk 018',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_019': {
- 'disk_id': 'DISK_ID_019',
- 'name': 'SSD Disk 019',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_020': {
- 'disk_id': 'DISK_ID_020',
- 'name': 'SSD Disk 020',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- 'DISK_ID_021': {
- 'disk_id': 'DISK_ID_021',
- 'name': 'SSD Disk 021',
- 'total_space': disk_size_2t,
- 'disk_type': Disk.DISK_TYPE_SSD,
- 'sys_id': SimData.SIM_DATA_SYS_ID,
- },
- }
+
+ # Make disks in a loop so that we can create many disks easily
+ # if we wish
+ self.disk_dict = {}
+
+ for i in range(0, 21):
+ d_id = SimData._disk_id(i)
+ d_size = disk_size_2t
+ d_name = "SATA Disk %0*d" % (D_FMT, i)
+ d_type = Disk.DISK_TYPE_SATA
+
+ if 2 <= i <= 8:
+ d_name = "SAS Disk %0*d" % (D_FMT, i)
+ d_type = Disk.DISK_TYPE_SAS
+ elif 9 <= i:
+ d_name = "SSD Disk %0*d" % (D_FMT, i)
+ d_type = Disk.DISK_TYPE_SSD
+ if i <= 13:
+ d_size = disk_size_512g
+
+ self.disk_dict[d_id] = dict(disk_id=d_id, name=d_name,
+ total_space=d_size,
+ disk_type=d_type,
+ sys_id=SimData.SIM_DATA_SYS_ID)
+
self.ag_dict = {
}
self.init_dict = {
--
1.8.2.1
Gris Ge
2014-03-05 23:44:49 UTC
Permalink
Hi Tony,

All the 4 patches look good to me.
Please proceed to commit.

Thanks.
--
Gris Ge
Loading...