Skip to content

Commit 635b554

Browse files
authored
Merge pull request ceph#56118 from joscollin/wip-B64711-qa-failure_cancel-mirroring-and-readd
cephfs_mirror, qa: fix test failure test_cephfs_mirror_cancel_mirroring_and_readd Reviewed-by: Venky Shankar <[email protected]>
2 parents 0e7f5d6 + db9825d commit 635b554

File tree

2 files changed

+43
-28
lines changed

2 files changed

+43
-28
lines changed

qa/tasks/cephfs/test_mirroring.py

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,7 +1372,7 @@ def test_cephfs_mirror_cancel_mirroring_and_readd(self):
13721372
self.mount_b.umount_wait()
13731373
self.mount_b.mount_wait(cephfs_name=self.secondary_fs_name)
13741374

1375-
# create a bunch of files in a directory to snap
1375+
# create some large files in 3 directories to snap
13761376
self.mount_a.run_shell(["mkdir", "d0"])
13771377
self.mount_a.run_shell(["mkdir", "d1"])
13781378
self.mount_a.run_shell(["mkdir", "d2"])
@@ -1395,30 +1395,38 @@ def test_cephfs_mirror_cancel_mirroring_and_readd(self):
13951395
vbefore = res[TestMirroring.PERF_COUNTER_KEY_NAME_CEPHFS_MIRROR_PEER][0]
13961396
# take snapshots
13971397
log.debug('taking snapshots')
1398-
self.mount_a.run_shell(["mkdir", "d0/.snap/snap0"])
1399-
self.mount_a.run_shell(["mkdir", "d1/.snap/snap0"])
1400-
self.mount_a.run_shell(["mkdir", "d2/.snap/snap0"])
1398+
snap_name = "snap0"
1399+
self.mount_a.run_shell(["mkdir", f"d0/.snap/{snap_name}"])
1400+
self.mount_a.run_shell(["mkdir", f"d1/.snap/{snap_name}"])
1401+
self.mount_a.run_shell(["mkdir", f"d2/.snap/{snap_name}"])
14011402

1402-
time.sleep(10)
14031403
log.debug('checking snap in progress')
1404-
self.check_peer_snap_in_progress(self.primary_fs_name, self.primary_fs_id,
1405-
"client.mirror_remote@ceph", '/d0', 'snap0')
1406-
self.check_peer_snap_in_progress(self.primary_fs_name, self.primary_fs_id,
1407-
"client.mirror_remote@ceph", '/d1', 'snap0')
1408-
self.check_peer_snap_in_progress(self.primary_fs_name, self.primary_fs_id,
1409-
"client.mirror_remote@ceph", '/d2', 'snap0')
1404+
peer_spec = "client.mirror_remote@ceph"
1405+
peer_uuid = self.get_peer_uuid(peer_spec)
1406+
with safe_while(sleep=3, tries=100, action=f'wait for status: {peer_spec}') as proceed:
1407+
while proceed():
1408+
res = self.mirror_daemon_command(f'peer status for fs: {self.primary_fs_name}',
1409+
'fs', 'mirror', 'peer', 'status',
1410+
f'{self.primary_fs_name}@{self.primary_fs_id}',
1411+
peer_uuid)
1412+
if ('syncing' == res["/d0"]['state'] and 'syncing' == res["/d1"]['state'] and \
1413+
'syncing' == res["/d2"]['state']):
1414+
break
14101415

1411-
log.debug('removing directories 1')
1416+
log.debug('removing directory 1')
14121417
self.remove_directory(self.primary_fs_name, self.primary_fs_id, '/d0')
1413-
log.debug('removing directories 2')
1418+
log.debug('removing directory 2')
14141419
self.remove_directory(self.primary_fs_name, self.primary_fs_id, '/d1')
1415-
log.debug('removing directories 3')
1420+
log.debug('removing directory 3')
14161421
self.remove_directory(self.primary_fs_name, self.primary_fs_id, '/d2')
14171422

1423+
# Wait a while for the sync backoff
1424+
time.sleep(500)
1425+
14181426
log.debug('removing snapshots')
1419-
self.mount_a.run_shell(["rmdir", "d0/.snap/snap0"])
1420-
self.mount_a.run_shell(["rmdir", "d1/.snap/snap0"])
1421-
self.mount_a.run_shell(["rmdir", "d2/.snap/snap0"])
1427+
self.mount_a.run_shell(["rmdir", f"d0/.snap/{snap_name}"])
1428+
self.mount_a.run_shell(["rmdir", f"d1/.snap/{snap_name}"])
1429+
self.mount_a.run_shell(["rmdir", f"d2/.snap/{snap_name}"])
14221430

14231431
for i in range(4):
14241432
filename = f'file.{i}'
@@ -1438,26 +1446,27 @@ def test_cephfs_mirror_cancel_mirroring_and_readd(self):
14381446
self.add_directory(self.primary_fs_name, self.primary_fs_id, '/d2')
14391447

14401448
log.debug('creating new snapshots...')
1441-
self.mount_a.run_shell(["mkdir", "d0/.snap/snap0"])
1442-
self.mount_a.run_shell(["mkdir", "d1/.snap/snap0"])
1443-
self.mount_a.run_shell(["mkdir", "d2/.snap/snap0"])
1449+
self.mount_a.run_shell(["mkdir", f"d0/.snap/{snap_name}"])
1450+
self.mount_a.run_shell(["mkdir", f"d1/.snap/{snap_name}"])
1451+
self.mount_a.run_shell(["mkdir", f"d2/.snap/{snap_name}"])
1452+
1453+
# Wait for the threads to finish
1454+
time.sleep(500)
14441455

1445-
time.sleep(60)
14461456
self.check_peer_status(self.primary_fs_name, self.primary_fs_id,
1447-
"client.mirror_remote@ceph", '/d0', 'snap0', 1)
1448-
self.verify_snapshot('d0', 'snap0')
1457+
"client.mirror_remote@ceph", '/d0', f'{snap_name}', 1)
1458+
self.verify_snapshot('d0', f'{snap_name}')
14491459

14501460
self.check_peer_status(self.primary_fs_name, self.primary_fs_id,
1451-
"client.mirror_remote@ceph", '/d1', 'snap0', 1)
1452-
self.verify_snapshot('d1', 'snap0')
1461+
"client.mirror_remote@ceph", '/d1', f'{snap_name}', 1)
1462+
self.verify_snapshot('d1', f'{snap_name}')
14531463

14541464
self.check_peer_status(self.primary_fs_name, self.primary_fs_id,
1455-
"client.mirror_remote@ceph", '/d2', 'snap0', 1)
1456-
self.verify_snapshot('d2', 'snap0')
1465+
"client.mirror_remote@ceph", '/d2', f'{snap_name}', 1)
1466+
self.verify_snapshot('d2', f'{snap_name}')
14571467
res = self.mirror_daemon_command(f'counter dump for fs: {self.primary_fs_name}', 'counter', 'dump')
14581468
vafter = res[TestMirroring.PERF_COUNTER_KEY_NAME_CEPHFS_MIRROR_PEER][0]
14591469
self.assertGreater(vafter["counters"]["snaps_synced"], vbefore["counters"]["snaps_synced"])
1460-
self.assertGreater(vafter["counters"]["snaps_deleted"], vbefore["counters"]["snaps_deleted"])
14611470

14621471
self.disable_mirroring(self.primary_fs_name, self.primary_fs_id)
14631472

src/tools/cephfs_mirror/PeerReplayer.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,6 +1282,12 @@ int PeerReplayer::do_synchronize(const std::string &dir_root, const Snapshot &cu
12821282
break;
12831283
}
12841284

1285+
r = pre_sync_check_and_open_handles(dir_root, current, boost::none, &fh);
1286+
if (r < 0) {
1287+
dout(5) << ": cannot proceed with sync: " << cpp_strerror(r) << dendl;
1288+
return r;
1289+
}
1290+
12851291
dout(20) << ": " << sync_stack.size() << " entries in stack" << dendl;
12861292
std::string e_name;
12871293
auto &entry = sync_stack.top();

0 commit comments

Comments
 (0)