]> git.proxmox.com Git - ceph.git/blame - ceph/src/cls/journal/cls_journal_types.h
update sources to v12.1.0
[ceph.git] / ceph / src / cls / journal / cls_journal_types.h
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#ifndef CEPH_CLS_JOURNAL_TYPES_H
5#define CEPH_CLS_JOURNAL_TYPES_H
6
7#include "include/int_types.h"
8#include "include/buffer_fwd.h"
9#include "include/encoding.h"
10#include <iosfwd>
11#include <list>
7c673cae
FG
12#include <string>
13
14namespace ceph {
15class Formatter;
16}
17
18namespace cls {
19namespace journal {
20
21static const uint64_t JOURNAL_MAX_RETURN = 256;
22
23struct ObjectPosition {
24 uint64_t object_number;
25 uint64_t tag_tid;
26 uint64_t entry_tid;
27
28 ObjectPosition() : object_number(0), tag_tid(0), entry_tid(0) {}
29 ObjectPosition(uint64_t _object_number, uint64_t _tag_tid,
30 uint64_t _entry_tid)
31 : object_number(_object_number), tag_tid(_tag_tid), entry_tid(_entry_tid) {}
32
33 inline bool operator==(const ObjectPosition& rhs) const {
34 return (object_number == rhs.object_number &&
35 tag_tid == rhs.tag_tid &&
36 entry_tid == rhs.entry_tid);
37 }
38
39 void encode(bufferlist& bl) const;
40 void decode(bufferlist::iterator& iter);
41 void dump(Formatter *f) const;
42
43 inline bool operator<(const ObjectPosition &rhs) const {
44 if (object_number != rhs.object_number) {
45 return object_number < rhs.object_number;
46 } else if (tag_tid != rhs.tag_tid) {
47 return tag_tid < rhs.tag_tid;
48 }
49 return entry_tid < rhs.entry_tid;
50 }
51
52 static void generate_test_instances(std::list<ObjectPosition *> &o);
53};
54
55typedef std::list<ObjectPosition> ObjectPositions;
56
57struct ObjectSetPosition {
58 // stored in most-recent -> least recent committed entry order
59 ObjectPositions object_positions;
60
61 ObjectSetPosition() {}
62 ObjectSetPosition(const ObjectPositions &_object_positions)
63 : object_positions(_object_positions) {}
64
65 void encode(bufferlist& bl) const;
66 void decode(bufferlist::iterator& iter);
67 void dump(Formatter *f) const;
68
69 inline bool operator==(const ObjectSetPosition &rhs) const {
70 return (object_positions == rhs.object_positions);
71 }
72
73 static void generate_test_instances(std::list<ObjectSetPosition *> &o);
74};
75
76enum ClientState {
77 CLIENT_STATE_CONNECTED = 0,
78 CLIENT_STATE_DISCONNECTED = 1
79};
80
81struct Client {
82 std::string id;
83 bufferlist data;
84 ObjectSetPosition commit_position;
85 ClientState state;
86
87 Client() : state(CLIENT_STATE_CONNECTED) {}
88 Client(const std::string& _id, const bufferlist &_data,
89 const ObjectSetPosition &_commit_position = ObjectSetPosition(),
90 ClientState _state = CLIENT_STATE_CONNECTED)
91 : id(_id), data(_data), commit_position(_commit_position), state(_state) {}
92
93 inline bool operator==(const Client &rhs) const {
94 return (id == rhs.id &&
95 data.contents_equal(rhs.data) &&
96 commit_position == rhs.commit_position &&
97 state == rhs.state);
98 }
99 inline bool operator<(const Client &rhs) const {
100 return (id < rhs.id);
101 }
102
103 void encode(bufferlist& bl) const;
104 void decode(bufferlist::iterator& iter);
105 void dump(Formatter *f) const;
106
107 static void generate_test_instances(std::list<Client *> &o);
108};
109
110struct Tag {
111 static const uint64_t TAG_CLASS_NEW = static_cast<uint64_t>(-1);
112
113 uint64_t tid;
114 uint64_t tag_class;
115 bufferlist data;
116
117 Tag() : tid(0), tag_class(0) {}
118 Tag(uint64_t tid, uint64_t tag_class, const bufferlist &data)
119 : tid(tid), tag_class(tag_class), data(data) {}
120
121 inline bool operator==(const Tag &rhs) const {
122 return (tid == rhs.tid &&
123 tag_class == rhs.tag_class &&
124 data.contents_equal(rhs.data));
125 }
126 inline bool operator<(const Tag &rhs) const {
127 return (tid < rhs.tid);
128 }
129
130 void encode(bufferlist& bl) const;
131 void decode(bufferlist::iterator& iter);
132 void dump(Formatter *f) const;
133
134 static void generate_test_instances(std::list<Tag *> &o);
135};
136
137WRITE_CLASS_ENCODER(ObjectPosition);
138WRITE_CLASS_ENCODER(ObjectSetPosition);
139WRITE_CLASS_ENCODER(Client);
140WRITE_CLASS_ENCODER(Tag);
141
142std::ostream &operator<<(std::ostream &os, const ClientState &state);
143std::ostream &operator<<(std::ostream &os,
144 const ObjectPosition &object_position);
145std::ostream &operator<<(std::ostream &os,
146 const ObjectSetPosition &object_set_position);
147std::ostream &operator<<(std::ostream &os,
148 const Client &client);
149std::ostream &operator<<(std::ostream &os, const Tag &tag);
150
151} // namespace journal
152} // namespace cls
153
154using cls::journal::encode;
155using cls::journal::decode;
156
157#endif // CEPH_CLS_JOURNAL_TYPES_H