]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/cls/lock/cls_lock_types.h
update sources to v12.1.1
[ceph.git] / ceph / src / cls / lock / cls_lock_types.h
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