#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;
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);
+}
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
#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)