]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os: extract onode.h out
authorKefu Chai <kchai@redhat.com>
Fri, 15 May 2020 10:52:14 +0000 (18:52 +0800)
committerKefu Chai <kchai@redhat.com>
Tue, 9 Jun 2020 01:39:47 +0000 (09:39 +0800)
so the concrete onode manager implementation can include it without
including the onode_manager.h interface as a whole

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/os/seastore/CMakeLists.txt
src/crimson/os/seastore/onode.cc [new file with mode: 0644]
src/crimson/os/seastore/onode.h [new file with mode: 0644]
src/crimson/os/seastore/onode_manager.h

index 0c51b7d2a5d2d43bbadb02c74ec614b69832be18..75e3aaddbf10f24192aacc4b77edcfec171114ee 100644 (file)
@@ -9,6 +9,7 @@ add_library(crimson-seastore
   lba_manager.cc
   lba_manager/btree/btree_lba_manager.cc
   lba_manager/btree/lba_btree_node_impl.cc
+  onode.cc
   seastore.cc
   root_block.cc
        )
diff --git a/src/crimson/os/seastore/onode.cc b/src/crimson/os/seastore/onode.cc
new file mode 100644 (file)
index 0000000..a8b925b
--- /dev/null
@@ -0,0 +1,44 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "onode.h"
+#include "include/encoding.h"
+
+namespace crimson::os::seastore {
+
+size_t Onode::size() const
+{
+  return ceph::encoded_sizeof(*this);
+}
+
+void Onode::encode(void* buffer, size_t len)
+{
+  struct [[gnu::packed]] encoded_t {
+    uint8_t struct_v;
+    uint8_t struct_compat;
+    uint32_t struct_len;
+    uint32_t len;
+    char data[];
+  };
+  auto p = reinterpret_cast<encoded_t*>(buffer);
+  assert(std::numeric_limits<uint16_t>::max() >= size());
+  assert(len >= size());
+  p->struct_v = 1;
+  p->struct_compat = 1;
+  p->struct_len = sizeof(encoded_t) + payload.size();
+  p->len = payload.size();
+  std::memcpy(p->data, payload.data(), payload.size());
+}
+
+bool operator==(const Onode& lhs, const Onode& rhs)
+{
+  return lhs.get() == rhs.get();
+}
+
+std::ostream& operator<<(std::ostream &out, const Onode &rhs)
+{
+  return out << rhs.get();
+}
+
+}
+
diff --git a/src/crimson/os/seastore/onode.h b/src/crimson/os/seastore/onode.h
new file mode 100644 (file)
index 0000000..4d77830
--- /dev/null
@@ -0,0 +1,48 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#pragma once
+
+#include <iostream>
+#include <limits>
+
+#include <boost/intrusive_ptr.hpp>
+#include <boost/smart_ptr/intrusive_ref_counter.hpp>
+
+#include "include/buffer.h"
+#include "include/denc.h"
+
+namespace crimson::os::seastore {
+
+// in-memory onode, in addition to the stuff that should be persisted to disk,
+// it may contain intrusive hooks for LRU, rw locks etc
+class Onode : public boost::intrusive_ref_counter<
+  Onode,
+  boost::thread_unsafe_counter>
+{
+public:
+  Onode(std::string_view s)
+    : payload{s}
+  {}
+  size_t size() const;
+  const std::string& get() const {
+    return payload;
+  }
+  void encode(void* buffer, size_t len);
+  DENC(Onode, v, p) {
+    DENC_START(1, 1, p);
+    denc(v.payload, p);
+    DENC_FINISH(p);
+  }
+
+private:
+  // dummy payload
+  std::string payload;
+};
+
+bool operator==(const Onode& lhs, const Onode& rhs);
+std::ostream& operator<<(std::ostream &out, const Onode &rhs);
+using OnodeRef = boost::intrusive_ptr<Onode>;
+}
+
+WRITE_CLASS_DENC(crimson::os::seastore::Onode)
index 17999c41c2b1725939a7ab372bfc0e22d1c6949d..0a03b7fdf7cd804c6a757765c3ce40920df9539c 100644 (file)
@@ -9,25 +9,17 @@
 #include <boost/smart_ptr/intrusive_ref_counter.hpp>
 #include <seastar/core/future.hh>
 
+#include "include/buffer_fwd.h"
 #include "include/ceph_assert.h"
+#include "common/hobject.h"
+
+#include "crimson/os/seastore/onode.h"
 #include "crimson/os/seastore/seastore_types.h"
-#include "include/buffer_fwd.h"
-#include "crimson/osd/exceptions.h"
 #include "crimson/os/seastore/transaction_manager.h"
+#include "crimson/osd/exceptions.h"
 
 namespace crimson::os::seastore {
 
-class Onode: public boost::intrusive_ref_counter<
-  Onode,
-  boost::thread_unsafe_counter>{
-public:
-};
-using OnodeRef = boost::intrusive_ptr<Onode>;
-
-std::ostream &operator<<(std::ostream &out, const Onode &rhs) {
-  return out;
-}
-
 class OnodeManager {
 public:
   using open_ertr = crimson::errorator<