X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=python%2Fcumulus%2Fretention.py;h=210b25750a73fc5af99c8b40167ad0eeab8fa619;hb=567bd6a883eaa54d10ca61d0b6083da09bf48085;hp=a7ae983bad5cf80d82cdba22d25fbb7fcb79481b;hpb=64bff41cb3ccdd60e767a5bb9ed8525d2dda1966;p=cumulus.git diff --git a/python/cumulus/retention.py b/python/cumulus/retention.py index a7ae983..210b257 100644 --- a/python/cumulus/retention.py +++ b/python/cumulus/retention.py @@ -23,6 +23,8 @@ for example keeping daily snapshots for short periods of time but retaining weekly snapshots going back further in time. """ +from __future__ import division, print_function, unicode_literals + import calendar import datetime @@ -102,10 +104,12 @@ class RetentionEngine(object): def add_policy(self, backup_class, retention_period): self._policies[backup_class] = retention_period - self._last_snapshots[backup_class] = (None, None) + self._last_snapshots[backup_class] = (None, None, False) @staticmethod def parse_timestamp(s): + if isinstance(s, datetime.datetime): + return s return datetime.datetime.strptime(s, TIMESTAMP_FORMAT) def consider_snapshot(self, snapshot): @@ -130,13 +134,15 @@ class RetentionEngine(object): self._labels = set() retain = False - for (backup_class, retention_period) in self._policies.iteritems(): + for (backup_class, retention_period) in self._policies.items(): partition = _backup_classes[backup_class](timestamp_policy) last_snapshot = self._last_snapshots[backup_class] if self._last_snapshots[backup_class][0] != partition: - self._last_snapshots[backup_class] = (partition, snapshot) self._labels.add(backup_class) - if snapshot_age < retention_period: retain = True + retain_label = snapshot_age < retention_period + self._last_snapshots[backup_class] = (partition, snapshot, + retain_label) + if retain_label: retain = True return retain def last_labels(self): @@ -148,4 +154,5 @@ class RetentionEngine(object): def last_snapshots(self): """Returns the most recent snapshot in each backup class.""" - return dict((k, v[1]) for (k, v) in self._last_snapshots.iteritems()) + return dict((k, v[1]) for (k, v) + in self._last_snapshots.items() if v[2])