Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / cls / version / cls_version_types.h
1 #ifndef CEPH_CLS_VERSION_TYPES_H
2 #define CEPH_CLS_VERSION_TYPES_H
3
4 #include "include/encoding.h"
5 #include "include/types.h"
6
7 class JSONObj;
8
9
10 struct obj_version {
11   uint64_t ver;
12   string tag;
13
14   obj_version() : ver(0) {}
15
16   void encode(bufferlist& bl) const {
17     ENCODE_START(1, 1, bl);
18     ::encode(ver, bl);
19     ::encode(tag, bl);
20     ENCODE_FINISH(bl);
21   }
22
23   void decode(bufferlist::iterator& bl) {
24     DECODE_START(1, bl);
25     ::decode(ver, bl);
26     ::decode(tag, bl);
27     DECODE_FINISH(bl);
28   }
29
30   void inc() {
31     ver++;
32   }
33
34   void clear() {
35     ver = 0;
36     tag.clear();
37   }
38
39   bool empty() {
40     return tag.empty();
41   }
42
43   bool compare(struct obj_version *v) {
44     return (ver == v->ver &&
45             tag.compare(v->tag) == 0);
46   }
47
48   void dump(Formatter *f) const;
49   void decode_json(JSONObj *obj);
50 };
51 WRITE_CLASS_ENCODER(obj_version)
52
53 enum VersionCond {
54   VER_COND_NONE =      0,
55   VER_COND_EQ,  /* equal */
56   VER_COND_GT,  /* greater than */
57   VER_COND_GE,  /* greater or equal */
58   VER_COND_LT,  /* less than */
59   VER_COND_LE,  /* less or equal */
60   VER_COND_TAG_EQ,
61   VER_COND_TAG_NE,
62 };
63
64 struct obj_version_cond {
65   struct obj_version ver;
66   VersionCond cond;
67
68   void encode(bufferlist& bl) const {
69     ENCODE_START(1, 1, bl);
70     ::encode(ver, bl);
71     uint32_t c = (uint32_t)cond;
72     ::encode(c, bl);
73     ENCODE_FINISH(bl);
74   }
75
76   void decode(bufferlist::iterator& bl) {
77     DECODE_START(1, bl);
78     ::decode(ver, bl);
79     uint32_t c;
80     ::decode(c, bl);
81     cond = (VersionCond)c;
82     DECODE_FINISH(bl);
83   }
84
85 };
86 WRITE_CLASS_ENCODER(obj_version_cond)
87
88
89 #endif
90
91