]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds: include metadata in SnapInfo structure
authorVenky Shankar <vshankar@redhat.com>
Mon, 19 Oct 2020 09:02:21 +0000 (05:02 -0400)
committerVenky Shankar <vshankar@redhat.com>
Thu, 17 Dec 2020 18:07:41 +0000 (13:07 -0500)
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 <vshankar@redhat.com>
src/mds/snap.cc
src/mds/snap.h

index 3da4cda2b4b67c149f9fdbeacf8c302f874d885e..f988ca51367488a73708fd49f8a44b16cb788378 100644 (file)
 
 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<SnapInfo*>& ls)
@@ -58,6 +67,7 @@ void SnapInfo::generate_test_instances(std::list<SnapInfo*>& 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)
index 346f787e37c4a5743b34a7e0c215e5acd8ab7234..f8b5b701af46f22cde7c18a314fdbd43568c9322 100644 (file)
@@ -15,6 +15,7 @@
 #ifndef CEPH_MDS_SNAP_H
 #define CEPH_MDS_SNAP_H
 
+#include <map>
 #include <string_view>
 
 #include "mdstypes.h"
@@ -39,6 +40,7 @@ struct SnapInfo {
   std::string name;
 
   mutable std::string long_name; ///< cached _$ino_$name
+  std::map<std::string,std::string> metadata;
 };
 WRITE_CLASS_ENCODER(SnapInfo)