data_path = os.path.join(
'/var/lib/ceph/osd',
'ceph-{id}'.format(id=osd),
- 'current',
- '{pg}_head'.format(pg=pg)
+ 'fuse',
+ '{pg}_head'.format(pg=pg),
+ 'all',
)
# fuzz time
)
ls_out = ls_fp.getvalue()
- # find an object file we can mess with
+ # find an object file we can mess with (and not the pg info object)
osdfilename = next(line for line in ls_out.split('\n')
- if not line.startswith('__'))
+ if not line.endswith('::::head#'))
assert osdfilename is not None
# Get actual object name from osd stored filename
- objname, _ = osdfilename.split('__', 1)
- objname = objname.replace(r'\u', '_')
+ objname = osdfilename.split(':')[4]
return osd_remote, os.path.join(data_path, osdfilename), objname
osd_remote.run(
args=['sudo', 'dd',
'if=/dev/zero',
- 'of=%s' % path,
+ 'of=%s/data' % path,
'bs=1', 'count=1', 'conv=notrunc']
)
@contextlib.contextmanager
def _test_with_file(self, messup_cmd, *checks):
temp = tempfile.mktemp()
- backup_cmd = ['sudo', 'cp', self.path, temp]
+ backup_cmd = ['sudo', 'cp', os.path.join(self.path, 'data'), temp]
self.osd.run(args=backup_cmd)
self.osd.run(args=messup_cmd.split())
yield checks
- restore_cmd = ['sudo', 'mv', temp, self.path]
+ create_cmd = ['sudo', 'mkdir', self.path]
+ self.osd.run(args=create_cmd, check_status=False)
+ restore_cmd = ['sudo', 'cp', temp, os.path.join(self.path, 'data')]
self.osd.run(args=restore_cmd)
def remove(self):
- cmd = 'sudo rm {path}'.format(path=self.path)
+ cmd = 'sudo rmdir {path}'.format(path=self.path)
return self._test_with_file(cmd, 'missing')
def append(self):
- cmd = 'sudo dd if=/dev/zero of={path} bs=1 count=1 ' \
+ cmd = 'sudo dd if=/dev/zero of={path}/data bs=1 count=1 ' \
'conv=notrunc oflag=append'.format(path=self.path)
return self._test_with_file(cmd,
'data_digest_mismatch',
'size_mismatch')
def truncate(self):
- cmd = 'sudo dd if=/dev/null of={path}'.format(path=self.path)
+ cmd = 'sudo dd if=/dev/null of={path}/data'.format(path=self.path)
return self._test_with_file(cmd,
'data_digest_mismatch',
'size_mismatch')
def change_obj(self):
- cmd = 'sudo dd if=/dev/zero of={path} bs=1 count=1 ' \
+ cmd = 'sudo dd if=/dev/zero of={path}/data bs=1 count=1 ' \
'conv=notrunc'.format(path=self.path)
return self._test_with_file(cmd,
'data_digest_mismatch')
while len(manager.get_osd_status()['up']) < num_osds:
time.sleep(10)
+ for i in range(num_osds):
+ manager.raw_cluster_cmd('tell', 'osd.%d' % i, 'injectargs',
+ '--', '--osd-objectstore-fuse')
for i in range(num_osds):
manager.raw_cluster_cmd('tell', 'osd.%d' % i, 'flush_pg_stats')
manager.wait_for_clean()
test_list_inconsistent_obj(ctx, manager, osd_remote, pg, acting, osd,
obj_name, obj_path)
log.info('test successful!')
+
+ # shut down fuse mount
+ for i in range(num_osds):
+ manager.raw_cluster_cmd('tell', 'osd.%d' % i, 'injectargs',
+ '--', '--no-osd-objectstore-fuse')
+ time.sleep(5)
+ log.info('done')