summaryrefslogtreecommitdiff
path: root/raidguessfs.py
diff options
context:
space:
mode:
Diffstat (limited to 'raidguessfs.py')
-rwxr-xr-xraidguessfs.py63
1 files changed, 30 insertions, 33 deletions
diff --git a/raidguessfs.py b/raidguessfs.py
index bb26b3f..bd256bf 100755
--- a/raidguessfs.py
+++ b/raidguessfs.py
@@ -50,7 +50,7 @@ class RaidGuessFS(fuse.Fuse):
# Early initialisations (notably modules and the static directory tree part)
self.d = mydisks.MyDisks()
- self.raid = myraid.MyRaid()
+ self.raid = myraid.MyRaid(self.d)
self.bmp = mybinview.MyBinView()
self.st = mystat.MyStat()
self.tasks = mytasks.MyTasks(self.d)
@@ -63,7 +63,7 @@ class RaidGuessFS(fuse.Fuse):
self.settings = [
'disk_count',
'raid_start', 'raid_end', 'raid_chunk_size',
- 'raid_disk_order', 'raid_layout',
+ 'raid_type', 'raid_disk_order', 'raid_layout', 'raid_subraid_count',
'bmp_height', 'bmp_width', 'bmp_start_offset',
'task_start', 'task_kill', 'task_find_files_pathlist'
]
@@ -71,15 +71,15 @@ class RaidGuessFS(fuse.Fuse):
self.settings_getters = [
self.d.get_disk_count,
self.raid.get_raid_start, self.raid.get_raid_end, self.raid.get_raid_chunk_size,
- self.raid.get_raid_disk_order_str, self.raid.get_raid_layout,
+ self.raid.get_raid_type, self.raid.get_raid_disk_order_str, self.raid.get_raid_layout, self.raid.get_raid_subraid_count,
self.bmp.get_bmp_height, self.bmp.get_bmp_width, self.bmp.get_bmp_start_offset,
self.get_task_start, self.get_task_kill, self.tasks.get_find_files_pathlist_str,
]
self.settings_updaters = [
self.update_disk_count,
- self.update_raid_start, self.update_raid_end, self.update_raid_chunk_size, self.update_raid_disk_order,
- self.raid.set_raid_layout,
+ self.update_raid_start, self.update_raid_end, self.update_raid_chunk_size,
+ self.update_raid_type, self.update_raid_disk_order, self.raid.set_raid_layout, self.update_raid_subraid_count,
self.update_bmp_height, self.update_bmp_width, self.update_bmp_start_offset,
self.tasks.task_start, self.tasks.task_kill, self.tasks.append_find_files_pathlist
]
@@ -88,17 +88,12 @@ class RaidGuessFS(fuse.Fuse):
self.dentries = {
'/' : [ fuse.Direntry(name) for name in ['config','disk','raid','tasks','visual'] ],
'/config': [ fuse.Direntry(name) for name in self.settings ],
- '/raid' : [ fuse.Direntry(name) for name in myraid.MyRaid.RAID_TYPES ],
+ '/raid' : [ fuse.Direntry(name) for name in ['disk_parity','disk_xor','raid_result'] ],
'/tasks' : [ fuse.Direntry(name) for name in self.tasks.TASK_NAMES ],
'/disk' : [ ], # Filled in _refresh_disk_dentries()
'/visual': [ ], # Filled in _refresh_disk_dentries()
}
- for raid_type in myraid.MyRaid.RAID_TYPES:
- self.dentries.update( {
- '/raid/%s'%raid_type: [ fuse.Direntry(name) for name in ['disk_parity','disk_xor','raid_result'] ],
- }
- )
logging.debug("Exit. RaidGuessFS.__init__()")
def _refresh_disk_dentries(self):
@@ -124,12 +119,9 @@ class RaidGuessFS(fuse.Fuse):
def _refresh_raid_fattr(self):
"""Update the raid computed attributes after a config change"""
logging.debug("Enter _refresh_raid_fattr()")
-
- for raid_type in myraid.MyRaid.RAID_TYPES:
- self.fattr['/raid/%s/disk_parity'%raid_type].st_size = self.raid.sizeof_disk_parity(raid_type)
- self.fattr['/raid/%s/disk_xor' %raid_type].st_size = self.raid.sizeof_disk_xor (raid_type)
- self.fattr['/raid/%s/raid_result'%raid_type].st_size = self.raid.sizeof_raid_result(raid_type)
-
+ self.fattr['/raid/disk_parity'].st_size = self.raid.sizeof_disk_parity()
+ self.fattr['/raid/disk_xor' ].st_size = self.raid.sizeof_disk_xor()
+ self.fattr['/raid/raid_result'].st_size = self.raid.sizeof_raid_result()
logging.debug("Exit. _refresh_raid_fattr()")
def _split_path(self,path):
@@ -155,7 +147,6 @@ class RaidGuessFS(fuse.Fuse):
self.d.set_disk_count(i)
self.d.open_disks()
self._refresh_disk_dentries()
- self.raid.set_disks(self.d)
self.raid.set_raid_end(min(self.d.disks_size)-1)
self.update_raid_disk_order(range(i))
@@ -187,10 +178,22 @@ class RaidGuessFS(fuse.Fuse):
self.raid.set_raid_end(i)
self._refresh_raid_fattr()
+ def update_raid_subraid_count(self, arg):
+ i = self._aton(arg)
+ self.raid.set_subraid_count(i)
+ self._refresh_raid_fattr()
+
def update_raid_chunk_size(self, arg):
i = self._aton(arg,False)
self.raid.set_raid_chunk_size(i)
+ def update_raid_type(self, arg):
+ if arg in myraid.MyRaid.RAID_TYPES:
+ self.raid.set_raid_type(arg)
+ self._refresh_raid_fattr()
+ else:
+ raise ValueError('update_raid_type() : raid type could be in %s'%myraid.MyRaid.RAID_TYPES)
+
def update_raid_disk_order(self, arg):
logging.debug("Enter update_raid_disk_order(%s)"%arg)
if type(arg) is str:
@@ -233,13 +236,9 @@ class RaidGuessFS(fuse.Fuse):
'/tasks/%s'%s: self.st.make_fake_file(4096) for s in self.tasks.TASK_NAMES
})
- for raid_type in myraid.MyRaid.RAID_TYPES:
- self.fattr.update( {
- '/raid/%s/disk_parity'%raid_type: self.st.make_fake_file(0),
- '/raid/%s/disk_xor'%raid_type: self.st.make_fake_file(0),
- '/raid/%s/raid_result'%raid_type: self.st.make_fake_file(0),
- })
-
+ self.fattr.update( {
+ '/raid/%s'%s: self.st.make_fake_file(0) for s in ['disk_parity', 'disk_xor', 'raid_result']
+ })
self.d.set_disks_path([getattr(self.parser.values,'disk%02d'%d) for d in range(self.d.max_disks)])
self.update_disk_count(len(self.d.disk_paths))
@@ -311,14 +310,12 @@ class RaidGuessFS(fuse.Fuse):
return self.bmp.read(self.d.disks[i],offset,size)
if path_chuncks[0] == 'raid':
- raid_type=path_chuncks[2]
- if raid_type in myraid.MyRaid.RAID_TYPES:
- if path_chuncks[4] == 'disk_parity':
- return self.raid.read_disk_parity(raid_type,offset,size)
- if path_chuncks[4] == 'disk_xor':
- return self.raid.read_disk_xor(raid_type,offset,size)
- if path_chuncks[4] == 'raid_result':
- return self.raid.read_raid_result(raid_type,offset,size)
+ if path_chuncks[1] == 'disk_parity':
+ return self.raid.read_disk_parity(offset,size)
+ if path_chuncks[1] == 'disk_xor':
+ return self.raid.read_disk_xor(offset,size)
+ if path_chuncks[1] == 'raid_result':
+ return self.raid.read_raid_result(offset,size)
if path_chuncks[0] == 'tasks':
if path_chuncks[1] == 'find_bootsect':