From: Venky Shankar Date: Mon, 19 Oct 2020 09:02:21 +0000 (-0400) Subject: mds: include metadata in SnapInfo structure X-Git-Tag: v16.1.0~184^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bf90e768792ddad2126f1777c90264fd842f6dd7;p=ceph.git 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 --- diff --git a/src/mds/snap.cc b/src/mds/snap.cc index 3da4cda2b4b6..f988ca513674 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 346f787e37c4..f8b5b701af46 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)