initial code repo
[stor4nfv.git] / src / ceph / src / cls / journal / cls_journal_types.cc
diff --git a/src/ceph/src/cls/journal/cls_journal_types.cc b/src/ceph/src/cls/journal/cls_journal_types.cc
new file mode 100644 (file)
index 0000000..c8757e2
--- /dev/null
@@ -0,0 +1,196 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "cls/journal/cls_journal_types.h"
+#include "include/stringify.h"
+#include "common/Formatter.h"
+
+namespace cls {
+namespace journal {
+
+void ObjectPosition::encode(bufferlist& bl) const {
+  ENCODE_START(1, 1, bl);
+  ::encode(object_number, bl);
+  ::encode(tag_tid, bl);
+  ::encode(entry_tid, bl);
+  ENCODE_FINISH(bl);
+}
+
+void ObjectPosition::decode(bufferlist::iterator& iter) {
+  DECODE_START(1, iter);
+  ::decode(object_number, iter);
+  ::decode(tag_tid, iter);
+  ::decode(entry_tid, iter);
+  DECODE_FINISH(iter);
+}
+
+void ObjectPosition::dump(Formatter *f) const {
+  f->dump_unsigned("object_number", object_number);
+  f->dump_unsigned("tag_tid", tag_tid);
+  f->dump_unsigned("entry_tid", entry_tid);
+}
+
+void ObjectPosition::generate_test_instances(std::list<ObjectPosition *> &o) {
+  o.push_back(new ObjectPosition());
+  o.push_back(new ObjectPosition(1, 2, 3));
+}
+
+void ObjectSetPosition::encode(bufferlist& bl) const {
+  ENCODE_START(1, 1, bl);
+  ::encode(object_positions, bl);
+  ENCODE_FINISH(bl);
+}
+
+void ObjectSetPosition::decode(bufferlist::iterator& iter) {
+  DECODE_START(1, iter);
+  ::decode(object_positions, iter);
+  DECODE_FINISH(iter);
+}
+
+void ObjectSetPosition::dump(Formatter *f) const {
+  f->open_array_section("object_positions");
+  for (auto &pos : object_positions) {
+    f->open_object_section("object_position");
+    pos.dump(f);
+    f->close_section();
+  }
+  f->close_section();
+}
+
+void ObjectSetPosition::generate_test_instances(
+    std::list<ObjectSetPosition *> &o) {
+  o.push_back(new ObjectSetPosition());
+  o.push_back(new ObjectSetPosition({{0, 1, 120}, {121, 2, 121}}));
+}
+
+void Client::encode(bufferlist& bl) const {
+  ENCODE_START(1, 1, bl);
+  ::encode(id, bl);
+  ::encode(data, bl);
+  ::encode(commit_position, bl);
+  ::encode(static_cast<uint8_t>(state), bl);
+  ENCODE_FINISH(bl);
+}
+
+void Client::decode(bufferlist::iterator& iter) {
+  DECODE_START(1, iter);
+  ::decode(id, iter);
+  ::decode(data, iter);
+  ::decode(commit_position, iter);
+
+  uint8_t state_raw;
+  ::decode(state_raw, iter);
+  state = static_cast<ClientState>(state_raw);
+  DECODE_FINISH(iter);
+}
+
+void Client::dump(Formatter *f) const {
+  f->dump_string("id", id);
+
+  std::stringstream data_ss;
+  data.hexdump(data_ss);
+  f->dump_string("data", data_ss.str());
+
+  f->open_object_section("commit_position");
+  commit_position.dump(f);
+  f->close_section();
+
+  f->dump_string("state", stringify(state));
+}
+
+void Client::generate_test_instances(std::list<Client *> &o) {
+  bufferlist data;
+  data.append(std::string(128, '1'));
+
+  o.push_back(new Client());
+  o.push_back(new Client("id", data));
+  o.push_back(new Client("id", data, {{{1, 2, 120}, {2, 3, 121}}}));
+}
+
+void Tag::encode(bufferlist& bl) const {
+  ENCODE_START(1, 1, bl);
+  ::encode(tid, bl);
+  ::encode(tag_class, bl);
+  ::encode(data, bl);
+  ENCODE_FINISH(bl);
+}
+
+void Tag::decode(bufferlist::iterator& iter) {
+  DECODE_START(1, iter);
+  ::decode(tid, iter);
+  ::decode(tag_class, iter);
+  ::decode(data, iter);
+  DECODE_FINISH(iter);
+}
+
+void Tag::dump(Formatter *f) const {
+  f->dump_unsigned("tid", tid);
+  f->dump_unsigned("tag_class", tag_class);
+
+  std::stringstream data_ss;
+  data.hexdump(data_ss);
+  f->dump_string("data", data_ss.str());
+}
+
+void Tag::generate_test_instances(std::list<Tag *> &o) {
+  o.push_back(new Tag());
+
+  bufferlist data;
+  data.append(std::string(128, '1'));
+  o.push_back(new Tag(123, 234, data));
+}
+
+std::ostream &operator<<(std::ostream &os, const ClientState &state) {
+  switch (state) {
+  case CLIENT_STATE_CONNECTED:
+    os << "connected";
+    break;
+  case CLIENT_STATE_DISCONNECTED:
+    os << "disconnected";
+    break;
+  default:
+    os << "unknown (" << static_cast<uint32_t>(state) << ")";
+    break;
+  }
+  return os;
+}
+
+std::ostream &operator<<(std::ostream &os,
+                         const ObjectPosition &object_position) {
+  os << "["
+     << "object_number=" << object_position.object_number << ", "
+     << "tag_tid=" << object_position.tag_tid << ", "
+     << "entry_tid=" << object_position.entry_tid << "]";
+  return os;
+}
+
+std::ostream &operator<<(std::ostream &os,
+                         const ObjectSetPosition &object_set_position) {
+  os << "[positions=[";
+  std::string delim;
+  for (auto &object_position : object_set_position.object_positions) {
+    os << delim << object_position;
+    delim = ", ";
+  }
+  os << "]]";
+  return os;
+}
+
+std::ostream &operator<<(std::ostream &os, const Client &client) {
+  os << "[id=" << client.id << ", "
+     << "commit_position=" << client.commit_position << ", "
+     << "state=" << client.state << "]";
+  return os;
+}
+
+std::ostream &operator<<(std::ostream &os, const Tag &tag) {
+  os << "[tid=" << tag.tid << ", "
+     << "tag_class=" << tag.tag_class << ", "
+     << "data=";
+  tag.data.hexdump(os);
+  os << "]";
+  return os;
+}
+
+} // namespace journal
+} // namespace cls