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
)
--- /dev/null
+// -*- 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();
+}
+
+}
+
--- /dev/null
+// -*- 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)
#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<