diff options
Diffstat (limited to 'modules/zfssnap')
-rw-r--r-- | modules/zfssnap/zfssnap.py | 18 |
1 files changed, 14 insertions, 4 deletions
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): | |||
83 | keep.add(snap) | 83 | keep.add(snap) |
84 | 84 | ||
85 | within = config.gettimedelta('KEEP', 'within') | 85 | within = config.gettimedelta('KEEP', 'within') |
86 | within_cutoff = _now() - within | 86 | if within > timedelta(seconds=0): |
87 | for base, snaps in items.items(): | ||
88 | time_ref = max(snaps, key=lambda snap: snap['creation'], default=None) | ||
89 | if not time_ref: | ||
90 | logger.warn('Nothing to keep for ‘{base}’') | ||
91 | continue | ||
87 | 92 | ||
88 | for base, snap in [(base, snap) for base, snaps in items.items() for snap in snaps]: | 93 | logger.info('Using ‘{time_ref["name"]}’ as time reference for ‘{base}’') |
89 | if snap['creation'] >= within_cutoff: | 94 | within_cutoff = time_ref['creation'] - within |
90 | keep_because(base, snap['name'], 'within') | 95 | |
96 | for snap in snaps: | ||
97 | if snap['creation'] >= within_cutoff: | ||
98 | keep_because(base, snap['name'], 'within') | ||
99 | else: | ||
100 | logger.warn('Skipping rule ‘within’ since retention period is zero') | ||
91 | 101 | ||
92 | prune_timezone = config.gettimezone('KEEP', 'timezone', fallback=tzlocal) | 102 | prune_timezone = config.gettimezone('KEEP', 'timezone', fallback=tzlocal) |
93 | 103 | ||