Skip to content

Commit 90a6787

Browse files
authored
Merge pull request ceph#62484 from idryomov/wip-70640
mgr/rbd_support: always parse interval and start_time in Schedules::remove() Reviewed-by: Ramana Raja <[email protected]>
2 parents d3f7b54 + bcd6763 commit 90a6787

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

qa/workunits/rbd/cli_generic.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,6 +1161,12 @@ test_trash_purge_schedule() {
11611161
expect_fail rbd trash purge schedule ls
11621162
test "$(rbd trash purge schedule ls -R --format json)" = "[]"
11631163

1164+
# check that remove fails when pool exists but no schedules are in place
1165+
expect_fail rbd trash purge schedule remove dummy
1166+
expect_fail rbd trash purge schedule remove 1d dummy
1167+
expect_fail rbd trash purge schedule remove -p rbd dummy
1168+
expect_fail rbd trash purge schedule remove -p rbd 1d dummy
1169+
11641170
rbd trash purge schedule add -p rbd 1d 01:30
11651171

11661172
rbd trash purge schedule ls -p rbd | grep 'every 1d starting at 01:30'
@@ -1259,9 +1265,13 @@ test_trash_purge_schedule() {
12591265
# Negative tests
12601266
rbd trash purge schedule add 2m
12611267
expect_fail rbd trash purge schedule add -p rbd dummy
1268+
expect_fail rbd trash purge schedule add -p rbd 1d dummy
12621269
expect_fail rbd trash purge schedule add dummy
1270+
expect_fail rbd trash purge schedule add 1d dummy
12631271
expect_fail rbd trash purge schedule remove -p rbd dummy
1272+
expect_fail rbd trash purge schedule remove -p rbd 1d dummy
12641273
expect_fail rbd trash purge schedule remove dummy
1274+
expect_fail rbd trash purge schedule remove 1d dummy
12651275
rbd trash purge schedule ls -p rbd | grep 'every 1d starting at 01:30'
12661276
rbd trash purge schedule ls | grep 'every 2m'
12671277
rbd trash purge schedule remove -p rbd 1d 01:30
@@ -1336,6 +1346,12 @@ test_mirror_snapshot_schedule() {
13361346
test "$(rbd mirror image status rbd2/ns1/test1 |
13371347
grep -c mirror.primary)" = '1'
13381348

1349+
# check that remove fails when image exists but no schedules are in place
1350+
expect_fail rbd mirror snapshot schedule remove dummy
1351+
expect_fail rbd mirror snapshot schedule remove 1h dummy
1352+
expect_fail rbd mirror snapshot schedule remove -p rbd2/ns1 --image test1 dummy
1353+
expect_fail rbd mirror snapshot schedule remove -p rbd2/ns1 --image test1 1h dummy
1354+
13391355
rbd mirror snapshot schedule add -p rbd2/ns1 --image test1 1m
13401356
expect_fail rbd mirror snapshot schedule ls
13411357
rbd mirror snapshot schedule ls -R | grep 'rbd2 *ns1 *test1 *every 1m'
@@ -1401,9 +1417,13 @@ test_mirror_snapshot_schedule() {
14011417

14021418
# Negative tests
14031419
expect_fail rbd mirror snapshot schedule add dummy
1420+
expect_fail rbd mirror snapshot schedule add 1h dummy
14041421
expect_fail rbd mirror snapshot schedule add -p rbd2/ns1 --image test1 dummy
1422+
expect_fail rbd mirror snapshot schedule add -p rbd2/ns1 --image test1 1h dummy
14051423
expect_fail rbd mirror snapshot schedule remove dummy
1424+
expect_fail rbd mirror snapshot schedule remove 1h dummy
14061425
expect_fail rbd mirror snapshot schedule remove -p rbd2/ns1 --image test1 dummy
1426+
expect_fail rbd mirror snapshot schedule remove -p rbd2/ns1 --image test1 1h dummy
14071427
test "$(rbd mirror snapshot schedule ls)" = 'every 1h starting at 00:15:00'
14081428
test "$(rbd mirror snapshot schedule ls -p rbd2/ns1 --image test1)" = 'every 1m'
14091429

src/pybind/mgr/rbd_support/schedule.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -510,19 +510,21 @@ def add(self,
510510

511511
def remove(self,
512512
level_spec: LevelSpec,
513-
interval: Optional[str],
514-
start_time: Optional[str]) -> None:
513+
interval_str: Optional[str],
514+
start_time_str: Optional[str]) -> None:
515+
# from_string() may raise, so call it before popping the schedule (and
516+
# unconditionally to ensure that invalid interval or start time always
517+
# leads to an error)
518+
interval = Interval.from_string(interval_str) if interval_str else None
519+
start_time = StartTime.from_string(start_time_str)
515520
schedule = self.schedules.pop(level_spec.id, None)
516521
if schedule:
517522
if interval is None:
518523
schedule = None
519524
else:
520-
try:
521-
schedule.remove(Interval.from_string(interval),
522-
StartTime.from_string(start_time))
523-
finally:
524-
if schedule:
525-
self.schedules[level_spec.id] = schedule
525+
schedule.remove(interval, start_time)
526+
if schedule:
527+
self.schedules[level_spec.id] = schedule
526528
if not schedule:
527529
del self.level_specs[level_spec.id]
528530
self.save(level_spec, schedule)

0 commit comments

Comments
 (0)