]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cls_lock: move lock_info_t definition to cls_lock_types.h 16091/head
authorrunsisi <runsisi@zte.com.cn>
Mon, 3 Jul 2017 12:31:20 +0000 (20:31 +0800)
committerrunsisi <runsisi@zte.com.cn>
Tue, 4 Jul 2017 03:35:19 +0000 (11:35 +0800)
Signed-off-by: runsisi <runsisi@zte.com.cn>
src/cls/lock/cls_lock.cc
src/cls/lock/cls_lock_types.cc
src/cls/lock/cls_lock_types.h
src/test/encoding/types.h

index 551ca901be5031de0a6f31a59ade43a71034fbd6..6e2ae4bbd1d1699570f0fd2745b640d02c55b835 100644 (file)
@@ -34,34 +34,6 @@ CLS_NAME(lock)
 
 #define LOCK_PREFIX    "lock."
 
-typedef struct lock_info_s {
-  map<locker_id_t, locker_info_t> lockers; // map of lockers
-  ClsLockType lock_type;                              // lock type (exclusive / shared)
-  string tag;                                         // tag: operations on lock can only succeed with this tag
-                                                      //      as long as set of non expired lockers
-                                                      //      is bigger than 0.
-
-  void encode(bufferlist &bl, uint64_t features) const {
-    ENCODE_START(1, 1, bl);
-    ::encode(lockers, bl, features);
-    uint8_t t = (uint8_t)lock_type;
-    ::encode(t, bl);
-    ::encode(tag, bl);
-    ENCODE_FINISH(bl);
-  }
-  void decode(bufferlist::iterator &bl) {
-    DECODE_START_LEGACY_COMPAT_LEN(1, 1, 1, bl);
-    ::decode(lockers, bl);
-    uint8_t t;
-    ::decode(t, bl);
-    lock_type = (ClsLockType)t; 
-    ::decode(tag, bl);
-    DECODE_FINISH(bl);
-  }
-  lock_info_s() : lock_type(LOCK_NONE) {}
-} lock_info_t;
-WRITE_CLASS_ENCODER_FEATURES(lock_info_t)
-
 static int read_lock(cls_method_context_t hctx, const string& name, lock_info_t *lock)
 {
   bufferlist bl;
index 1c67bdea5ce419cbac4dd054c791759399bf8137..38a0d93df4689fd4a388c715bf77ab1caceda77a 100644 (file)
@@ -67,3 +67,32 @@ void locker_info_t::generate_test_instances(list<locker_info_t*>& o)
   o.push_back(new locker_info_t);
 }
 
+void lock_info_t::dump(Formatter *f) const
+{
+  f->dump_int("lock_type", lock_type);
+  f->dump_string("tag", tag);
+  f->open_array_section("lockers");
+  for (auto &i : lockers) {
+    f->open_object_section("locker");
+    f->dump_object("id", i.first);
+    f->dump_object("info", i.second);
+    f->close_section();
+  }
+  f->close_section();
+}
+
+void lock_info_t::generate_test_instances(list<lock_info_t *>& o)
+{
+  lock_info_t *i = new lock_info_t;
+  locker_id_t id;
+  locker_info_t info;
+  generate_lock_id(id, 1, "cookie");
+  info.expiration = utime_t(5, 0);
+  generate_test_addr(info.addr, 1, 2);
+  info.description = "description";
+  i->lockers[id] = info;
+  i->lock_type = LOCK_EXCLUSIVE;
+  i->tag = "tag";
+  o.push_back(i);
+  o.push_back(new lock_info_t);
+}
index 03e6e11f69c1b3fdb1a9b1fd51d0deb05bceff5b..36d39c89014c67c596cf443bf1c7e3e772a7264b 100644 (file)
@@ -96,10 +96,41 @@ namespace rados {
         static void generate_test_instances(list<locker_info_t *>& o);
       };
       WRITE_CLASS_ENCODER_FEATURES(rados::cls::lock::locker_info_t)
+
+      struct lock_info_t {
+        map<locker_id_t, locker_info_t> lockers; // map of lockers
+        ClsLockType lock_type;                   // lock type (exclusive / shared)
+        string tag;                              // tag: operations on lock can only succeed with this tag
+                                                 //      as long as set of non expired lockers
+                                                 //      is bigger than 0.
+
+        void encode(bufferlist &bl, uint64_t features) const {
+          ENCODE_START(1, 1, bl);
+          ::encode(lockers, bl, features);
+          uint8_t t = (uint8_t)lock_type;
+          ::encode(t, bl);
+          ::encode(tag, bl);
+          ENCODE_FINISH(bl);
+        }
+        void decode(bufferlist::iterator &bl) {
+          DECODE_START_LEGACY_COMPAT_LEN(1, 1, 1, bl);
+          ::decode(lockers, bl);
+          uint8_t t;
+          ::decode(t, bl);
+          lock_type = (ClsLockType)t;
+          ::decode(tag, bl);
+          DECODE_FINISH(bl);
+        }
+        lock_info_t() : lock_type(LOCK_NONE) {}
+        void dump(Formatter *f) const;
+        static void generate_test_instances(list<lock_info_t *>& o);
+      };
+      WRITE_CLASS_ENCODER_FEATURES(rados::cls::lock::lock_info_t)
     }
   }
 }
 WRITE_CLASS_ENCODER_FEATURES(rados::cls::lock::locker_info_t)
 WRITE_CLASS_ENCODER(rados::cls::lock::locker_id_t)
+WRITE_CLASS_ENCODER_FEATURES(rados::cls::lock::lock_info_t)
 
 #endif
index 261fe554099f6dab8f46fe06d513436af3e15f2d..3eeda060b0274d0795843cabf8123fdf6bb31383 100644 (file)
@@ -399,6 +399,7 @@ TYPE(cls::rbd::MirrorImage)
 #include "cls/lock/cls_lock_types.h"
 TYPE(rados::cls::lock::locker_id_t)
 TYPE_FEATUREFUL(rados::cls::lock::locker_info_t)
+TYPE_FEATUREFUL(rados::cls::lock::lock_info_t)
 
 #include "cls/lock/cls_lock_ops.h"
 TYPE(cls_lock_lock_op)