From: Milind Changire Date: Sat, 9 Apr 2022 03:03:22 +0000 (+0530) Subject: mgr/snap_schedule: add time zone suffix to snapshot dir name X-Git-Tag: v18.0.0~1037^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=24c13e53dec46656ab92b6c30f5c20eb81a1c11f;p=ceph.git mgr/snap_schedule: add time zone suffix to snapshot dir name Fixes: https://tracker.ceph.com/issues/54374 Signed-off-by: Milind Changire Signed-off-by: Venky Shankar --- diff --git a/src/pybind/mgr/snap_schedule/fs/schedule_client.py b/src/pybind/mgr/snap_schedule/fs/schedule_client.py index a22f658dffed9..311f39eb9a3d8 100644 --- a/src/pybind/mgr/snap_schedule/fs/schedule_client.py +++ b/src/pybind/mgr/snap_schedule/fs/schedule_client.py @@ -25,7 +25,13 @@ SNAP_DB_PREFIX = 'snap_db' # increment this every time the db schema changes and provide upgrade code SNAP_DB_VERSION = '0' SNAP_DB_OBJECT_NAME = f'{SNAP_DB_PREFIX}_v{SNAP_DB_VERSION}' +# scheduled snapshots are tz suffixed +SNAPSHOT_TS_FORMAT_TZ = '%Y-%m-%d-%H_%M_%S_%Z' +# for backward compat snapshot name parsing SNAPSHOT_TS_FORMAT = '%Y-%m-%d-%H_%M_%S' +# length of timestamp format (without tz suffix) +# e.g.: scheduled-2022-04-19-05_39_00_UTC (len = "2022-04-19-05_39_00") +SNAPSHOT_TS_FORMAT_LEN = 19 SNAPSHOT_PREFIX = 'scheduled' log = logging.getLogger(__name__) @@ -70,6 +76,7 @@ def get_prune_set(candidates: Set[Tuple[cephfs.DirEntry, datetime]], PRUNING_PATTERNS = OrderedDict([ # n is for keep last n snapshots, uses the snapshot name timestamp # format for lowest granularity + # NOTE: prune set has tz suffix stripped out. ("n", SNAPSHOT_TS_FORMAT), # TODO remove M for release ("M", '%Y-%m-%d-%H_%M'), @@ -110,6 +117,10 @@ def get_prune_set(candidates: Set[Tuple[cephfs.DirEntry, datetime]], keep = keep[:MAX_SNAPS_PER_PATH] return candidates - set(keep) +def snap_name_to_timestamp(scheduled_snap_name: str) -> str: + """ extract timestamp from a schedule snapshot with tz suffix stripped out """ + ts = scheduled_snap_name.lstrip(f'{SNAPSHOT_PREFIX}-') + return ts[0:SNAPSHOT_TS_FORMAT_LEN] class DBInfo(): def __init__(self, fs: str, db: sqlite3.Connection): @@ -275,7 +286,7 @@ class SnapSchedClient(CephfsClient): start=start)[0] time = datetime.now(timezone.utc) with open_filesystem(self, fs_name) as fs_handle: - snap_ts = time.strftime(SNAPSHOT_TS_FORMAT) + snap_ts = time.strftime(SNAPSHOT_TS_FORMAT_TZ) snap_name = f'{path}/.snap/{SNAPSHOT_PREFIX}-{snap_ts}' fs_handle.mkdir(snap_name, 0o755) log.info(f'created scheduled snapshot of {path}') @@ -308,8 +319,7 @@ class SnapSchedClient(CephfsClient): if dir_.d_name.decode('utf-8').startswith(f'{SNAPSHOT_PREFIX}-'): log.debug(f'add {dir_.d_name} to pruning') ts = datetime.strptime( - dir_.d_name.decode('utf-8').lstrip(f'{SNAPSHOT_PREFIX}-'), - SNAPSHOT_TS_FORMAT) + snap_name_to_timestamp(dir_.d_name.decode('utf-8')), SNAPSHOT_TS_FORMAT) prune_candidates.add((dir_, ts)) else: log.debug(f'skipping dir entry {dir_.d_name}')