From 9c37ce946826258711e15cd55ee221fa8fe02256 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Sat, 19 Feb 2022 15:51:23 +0100 Subject: zfssnap: ... --- modules/zfssnap/zfssnap.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'modules/zfssnap') diff --git a/modules/zfssnap/zfssnap.py b/modules/zfssnap/zfssnap.py index cb91564b..a05440a7 100644 --- a/modules/zfssnap/zfssnap.py +++ b/modules/zfssnap/zfssnap.py @@ -83,11 +83,21 @@ def prune(config, dry_run): keep.add(snap) within = config.gettimedelta('KEEP', 'within') - within_cutoff = _now() - within + if within > timedelta(seconds=0): + for base, snaps in items.items(): + time_ref = max(snaps, key=lambda snap: snap['creation'], default=None) + if not time_ref: + logger.warn('Nothing to keep for ‘{base}’') + continue - for base, snap in [(base, snap) for base, snaps in items.items() for snap in snaps]: - if snap['creation'] >= within_cutoff: - keep_because(base, snap['name'], 'within') + logger.info('Using ‘{time_ref["name"]}’ as time reference for ‘{base}’') + within_cutoff = time_ref['creation'] - within + + for snap in snaps: + if snap['creation'] >= within_cutoff: + keep_because(base, snap['name'], 'within') + else: + logger.warn('Skipping rule ‘within’ since retention period is zero') prune_timezone = config.gettimezone('KEEP', 'timezone', fallback=tzlocal) -- cgit v1.2.3