initial code repo
[stor4nfv.git] / src / ceph / src / messages / MMonSync.h
diff --git a/src/ceph/src/messages/MMonSync.h b/src/ceph/src/messages/MMonSync.h
new file mode 100644 (file)
index 0000000..2b38382
--- /dev/null
@@ -0,0 +1,111 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+* Ceph - scalable distributed file system
+*
+* Copyright (C) 2012 Inktank, Inc.
+*
+* This is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License version 2.1, as published by the Free Software
+* Foundation. See file COPYING.
+*/
+#ifndef CEPH_MMONSYNC_H
+#define CEPH_MMONSYNC_H
+
+#include "msg/Message.h"
+
+class MMonSync : public Message
+{
+  static const int HEAD_VERSION = 2;
+  static const int COMPAT_VERSION = 2;
+
+public:
+  /**
+  * Operation types
+  */
+  enum {
+    OP_GET_COOKIE_FULL = 1,   // -> start a session (full scan)
+    OP_GET_COOKIE_RECENT = 2, // -> start a session (only recent paxos events)
+    OP_COOKIE = 3,            // <- pass the iterator cookie, or
+    OP_GET_CHUNK = 4,         // -> get some keys
+    OP_CHUNK = 5,             // <- return some keys
+    OP_LAST_CHUNK = 6,        // <- return the last set of keys
+    OP_NO_COOKIE = 8,         // <- sorry, no cookie
+  };
+
+  /**
+  * Obtain a string corresponding to the operation type @p op
+  *
+  * @param op Operation type
+  * @returns A string
+  */
+  static const char *get_opname(int op) {
+    switch (op) {
+    case OP_GET_COOKIE_FULL: return "get_cookie_full";
+    case OP_GET_COOKIE_RECENT: return "get_cookie_recent";
+    case OP_COOKIE: return "cookie";
+    case OP_GET_CHUNK: return "get_chunk";
+    case OP_CHUNK: return "chunk";
+    case OP_LAST_CHUNK: return "last_chunk";
+    case OP_NO_COOKIE: return "no_cookie";
+    default: assert(0 == "unknown op type"); return NULL;
+    }
+  }
+
+  uint32_t op = 0;
+  uint64_t cookie = 0;
+  version_t last_committed = 0;
+  pair<string,string> last_key;
+  bufferlist chunk_bl;
+  entity_inst_t reply_to;
+
+  MMonSync()
+    : Message(MSG_MON_SYNC, HEAD_VERSION, COMPAT_VERSION)
+  { }
+
+  MMonSync(uint32_t op, uint64_t c = 0)
+    : Message(MSG_MON_SYNC, HEAD_VERSION, COMPAT_VERSION),
+      op(op),
+      cookie(c),
+      last_committed(0)
+  { }
+
+  const char *get_type_name() const override { return "mon_sync"; }
+
+  void print(ostream& out) const override {
+    out << "mon_sync(" << get_opname(op);
+    if (cookie)
+      out << " cookie " << cookie;
+    if (last_committed > 0)
+      out << " lc " << last_committed;
+    if (chunk_bl.length())
+      out << " bl " << chunk_bl.length() << " bytes";
+    if (!last_key.first.empty() || !last_key.second.empty())
+      out << " last_key " << last_key.first << "," << last_key.second;
+    out << ")";
+  }
+
+  void encode_payload(uint64_t features) override {
+    ::encode(op, payload);
+    ::encode(cookie, payload);
+    ::encode(last_committed, payload);
+    ::encode(last_key.first, payload);
+    ::encode(last_key.second, payload);
+    ::encode(chunk_bl, payload);
+    ::encode(reply_to, payload, features);
+  }
+
+  void decode_payload() override {
+    bufferlist::iterator p = payload.begin();
+    ::decode(op, p);
+    ::decode(cookie, p);
+    ::decode(last_committed, p);
+    ::decode(last_key.first, p);
+    ::decode(last_key.second, p);
+    ::decode(chunk_bl, p);
+    ::decode(reply_to, p);
+  }
+};
+
+#endif /* CEPH_MMONSYNC_H */