diff options
Diffstat (limited to 'raidguessfs.py')
-rwxr-xr-x | raidguessfs.py | 63 |
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': |