self.assert_equal(target, "symdir/onemegs")
return self._errors
-class HardlinkWorkload(Workload):
- """
- Hardlink file, check that it gets recovered as hardlink
- with referent inode pointing to the remote inode
- """
- def write(self):
- self._filesystem.set_allow_referent_inodes(True);
- self._mount.run_shell(["mkdir", "hardlink_dir"])
- self._mount.write_n_mb("hardlink_dir/file1", 1)
- self._mount.run_shell(["ln", "hardlink_dir/file1", "hardlink_dir/hl_file1"])
- self._mount.run_shell(["ln", "hardlink_dir/file1", "hardlink_dir/hl_file2"])
- self._filesystem.set_allow_referent_inodes(False);
-
- def validate(self):
- self._mount.run_shell(["sudo", "ls", "hardlink_dir"], omit_sudo=False)
- st_file1 = self._mount.lstat("hardlink_dir/file1")
- st_hl_file1 = self._mount.lstat("hardlink_dir/hl_file1")
- st_hl_file2 = self._mount.lstat("hardlink_dir/hl_file2")
- # link count check
- self.assert_equal(3, st_file1['st_nlink'])
- self.assert_equal(3, st_hl_file1['st_nlink'])
- self.assert_equal(3, st_hl_file2['st_nlink'])
- # ino number check
- self.assert_equal(st_file1['st_ino'], st_hl_file1['st_ino'])
- self.assert_equal(st_file1['st_ino'], st_hl_file2['st_ino'])
- # reverse link - referent inode list
- file1_ino = self._mount.path_to_ino("hardlink_dir/file1", follow_symlinks=False)
- file1_inode_dump = self._filesystem.mds_asok(['dump', 'inode', hex(file1_ino)])
- self.assert_equal(len(file1_inode_dump['referent_inodes']), 2)
- # remote link
- referent1_ino = file1_inode_dump['referent_inodes'][0]
- referent1_inode_dump = self._filesystem.mds_asok(['dump', 'inode', hex(referent1_ino)])
- self.assert_equal(file1_ino, referent1_inode_dump['remote_ino'])
- referent2_ino = file1_inode_dump['referent_inodes'][1]
- referent2_inode_dump = self._filesystem.mds_asok(['dump', 'inode', hex(referent2_ino)])
- self.assert_equal(file1_ino, referent2_inode_dump['remote_ino'])
- return self._errors
-
class NestedDirWorkload(Workload):
"""
Nested directories, one is lost.
def test_rebuild_symlink(self):
self._rebuild_metadata(SymlinkWorkload(self.fs, self.mount_a))
- def test_rebuild_hardlink(self):
- self._rebuild_metadata(HardlinkWorkload(self.fs, self.mount_a))
-
def test_rebuild_nested(self):
self._rebuild_metadata(NestedDirWorkload(self.fs, self.mount_a))