From bf90e768792ddad2126f1777c90264fd842f6dd7 Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Mon, 19 Oct 2020 05:02:21 -0400 Subject: [PATCH] mds: include metadata in SnapInfo structure This is a free-flowing key/value metadata attached to a snapshot and persisted in `SnapInfo` structure. The idea is to allow custom metadata to be persisted when creating a snapshot. Initial users for this feature would be cephfs-mirror daemon. The idea is to persist the primary filesystems snapshot ID on snapshot creation in secondary filesystem. This allows identification of snapshot renames and recreates. Signed-off-by: Venky Shankar --- src/mds/snap.cc | 14 ++++++++++++-- src/mds/snap.h | 2 ++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/mds/snap.cc b/src/mds/snap.cc index 3da4cda2b4b..f988ca51367 100644 --- a/src/mds/snap.cc +++ b/src/mds/snap.cc @@ -24,21 +24,25 @@ void SnapInfo::encode(bufferlist& bl) const { - ENCODE_START(2, 2, bl); + ENCODE_START(3, 2, bl); encode(snapid, bl); encode(ino, bl); encode(stamp, bl); encode(name, bl); + encode(metadata, bl); ENCODE_FINISH(bl); } void SnapInfo::decode(bufferlist::const_iterator& bl) { - DECODE_START_LEGACY_COMPAT_LEN(2, 2, 2, bl); + DECODE_START_LEGACY_COMPAT_LEN(3, 2, 2, bl); decode(snapid, bl); decode(ino, bl); decode(stamp, bl); decode(name, bl); + if (struct_v >= 3) { + decode(metadata, bl); + } DECODE_FINISH(bl); } @@ -48,6 +52,11 @@ void SnapInfo::dump(Formatter *f) const f->dump_unsigned("ino", ino); f->dump_stream("stamp") << stamp; f->dump_string("name", name); + f->open_object_section("metadata"); + for (auto &[key, value] : metadata) { + f->dump_string(key, value); + } + f->close_section(); } void SnapInfo::generate_test_instances(std::list& ls) @@ -58,6 +67,7 @@ void SnapInfo::generate_test_instances(std::list& ls) ls.back()->ino = 2; ls.back()->stamp = utime_t(3, 4); ls.back()->name = "foo"; + ls.back()->metadata = {{"foo", "bar"}}; } ostream& operator<<(ostream& out, const SnapInfo &sn) diff --git a/src/mds/snap.h b/src/mds/snap.h index 346f787e37c..f8b5b701af4 100644 --- a/src/mds/snap.h +++ b/src/mds/snap.h @@ -15,6 +15,7 @@ #ifndef CEPH_MDS_SNAP_H #define CEPH_MDS_SNAP_H +#include #include #include "mdstypes.h" @@ -39,6 +40,7 @@ struct SnapInfo { std::string name; mutable std::string long_name; ///< cached _$ino_$name + std::map metadata; }; WRITE_CLASS_ENCODER(SnapInfo) -- 2.39.5