]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
tools: add new object cache message
authorshangdehao1 <dehao.shang@intel.com>
Sun, 13 Jan 2019 22:31:22 +0000 (06:31 +0800)
committerYuan Zhou <yuan.zhou@intel.com>
Thu, 21 Mar 2019 16:16:26 +0000 (00:16 +0800)
Signed-off-by: Dehao Shang <dehao.shang@intel.com>
src/tools/immutable_object_cache/SocketCommon.h
src/tools/immutable_object_cache/Types.cc [new file with mode: 0644]
src/tools/immutable_object_cache/Types.h [new file with mode: 0644]

index 7bb3af045f3feeb36227a2649c4a4d2e9cbfe1eb..0bbea734398e132bc37520f22ebf26404be4eee5 100644 (file)
@@ -4,6 +4,9 @@
 #ifndef CEPH_CACHE_SOCKET_COMMON_H
 #define CEPH_CACHE_SOCKET_COMMON_H
 
+#include "include/types.h"
+#include "include/int_types.h"
+
 namespace ceph {
 namespace immutable_obj_cache {
 
diff --git a/src/tools/immutable_object_cache/Types.cc b/src/tools/immutable_object_cache/Types.cc
new file mode 100644 (file)
index 0000000..e598787
--- /dev/null
@@ -0,0 +1,36 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "Types.h"
+
+#define dout_subsys ceph_subsys_immutable_obj_cache
+#undef dout_prefix
+#define dout_prefix *_dout << "ceph::cache::Types: " << __func__ << ": "
+
+namespace ceph {
+namespace immutable_obj_cache {
+
+void ObjectCacheMsgHeader::encode(bufferlist& bl) const {
+  using ceph::encode;
+  ::encode(seq, bl);
+  ::encode(type, bl);
+  ::encode(version, bl);
+  ::encode(padding, bl);
+  ::encode(mid_len, bl);
+  ::encode(data_len, bl);
+  ::encode(reserved, bl);
+}
+
+void ObjectCacheMsgHeader::decode(bufferlist::const_iterator& it) {
+  using ceph::decode;
+  ::decode(seq, it);
+  ::decode(type, it);
+  ::decode(version, it);
+  ::decode(padding, it);
+  ::decode(mid_len, it);
+  ::decode(data_len, it);
+  ::decode(reserved, it);
+}
+
+} // namespace immutable_obj_cache
+} // namespace ceph
diff --git a/src/tools/immutable_object_cache/Types.h b/src/tools/immutable_object_cache/Types.h
new file mode 100644 (file)
index 0000000..c8ed029
--- /dev/null
@@ -0,0 +1,133 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#ifndef CEPH_CACHE_TYPES_H
+#define CEPH_CACHE_TYPES_H
+
+#include "include/encoding.h"
+
+namespace ceph {
+namespace immutable_obj_cache {
+
+struct ObjectCacheMsgHeader {
+    uint64_t seq;                         /* sequence id */
+    uint16_t type;                        /* msg type */
+    uint16_t version;                     /* object cache version */
+    uint32_t padding;
+    uint64_t mid_len;
+    uint32_t data_len;
+    uint32_t reserved;
+
+    void encode(bufferlist& bl) const;
+    void decode(bufferlist::const_iterator& it);
+};
+
+class ObjectCacheMsgMiddle {
+public:
+  uint64_t m_image_size;
+  uint64_t m_read_offset;
+  uint64_t m_read_len;
+  std::string m_pool_name;
+  std::string m_image_name;
+  std::string m_oid;
+
+   ObjectCacheMsgMiddle(){}
+   ~ObjectCacheMsgMiddle(){}
+
+   void encode(bufferlist& bl) {
+     ceph::encode(m_image_size, bl);
+     ceph::encode(m_read_offset, bl);
+     ceph::encode(m_read_len, bl);
+     ceph::encode(m_pool_name, bl);
+     ceph::encode(m_image_name, bl);
+     ceph::encode(m_oid, bl);
+   }
+
+   void decode(bufferlist& bl) {
+     auto i = bl.cbegin();
+     ceph::decode(m_image_size, i);
+     ceph::decode(m_read_offset, i);
+     ceph::decode(m_read_len, i);
+     ceph::decode(m_pool_name, i);
+     ceph::decode(m_image_name, i);
+     ceph::decode(m_oid, i);
+   }
+};
+
+class ObjectCacheRequest {
+public:
+    ObjectCacheMsgHeader m_head;
+    ObjectCacheMsgMiddle m_mid;
+
+    bufferlist m_head_buffer;
+    bufferlist m_mid_buffer;
+    bufferlist m_data_buffer;
+
+    ObjectCacheRequest() {}
+    ~ObjectCacheRequest() {}
+
+    void encode() {
+      m_mid.encode(m_mid_buffer);
+
+      m_head.mid_len = m_mid_buffer.length();
+      m_head.data_len = m_data_buffer.length();
+
+      assert(m_head_buffer.length() == 0);
+      m_head.encode(m_head_buffer);
+      assert(sizeof(ObjectCacheMsgHeader) == m_head_buffer.length());
+    }
+
+    bufferlist get_head_buffer() {
+      return m_head_buffer;
+    }
+
+    bufferlist get_mid_buffer() {
+      return m_mid_buffer;
+    }
+
+    bufferlist get_data_buffer() {
+      return m_data_buffer;
+    }
+};
+
+// currently, just use this interface.
+inline ObjectCacheRequest* decode_object_cache_request(
+            ObjectCacheMsgHeader* head, bufferlist mid_buffer)
+{
+  ObjectCacheRequest* req = new ObjectCacheRequest();
+
+  // head
+  req->m_head = *head;
+  assert(req->m_head.mid_len == mid_buffer.length());
+
+  // mid
+  req->m_mid.decode(mid_buffer);
+
+  return req;
+}
+
+inline ObjectCacheRequest* decode_object_cache_request(
+             ObjectCacheMsgHeader* head, bufferlist& mid_buffer,
+             bufferlist& data_buffer)
+{
+  ObjectCacheRequest* req = decode_object_cache_request(head, mid_buffer);
+
+  // data
+  if(data_buffer.length() != 0) {
+    req->m_data_buffer = data_buffer;
+  }
+
+  return req;
+}
+
+inline ObjectCacheRequest* decode_object_cache_request(bufferlist& head,
+                bufferlist& mid_buffer, bufferlist& data_buffer)
+{
+  assert(sizeof(ObjectCacheMsgHeader) == head.length());
+  return decode_object_cache_request((ObjectCacheMsgHeader*)(head.c_str()), mid_buffer, data_buffer);
+}
+
+
+} // namespace immutable_obj_cache
+} // namespace ceph
+#endif