]> git.proxmox.com Git - ceph.git/blame - ceph/src/crimson/os/seastore/collection_manager/collection_flat_node.cc
bump version to 19.2.0-pve1
[ceph.git] / ceph / src / crimson / os / seastore / collection_manager / collection_flat_node.cc
CommitLineData
20effc67
TL
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#include "include/buffer.h"
5#include "osd/osd_types.h"
6#include "crimson/os/seastore/transaction_manager.h"
7#include "crimson/os/seastore/collection_manager/collection_flat_node.h"
8
9namespace {
10 seastar::logger& logger() {
11 return crimson::get_logger(ceph_subsys_seastore);
12 }
13}
14
15namespace crimson::os::seastore::collection_manager {
16
17void delta_t::replay(coll_map_t &l) const
18{
19 switch (op) {
20 case op_t::INSERT: {
21 l.insert(coll, bits);
22 break;
23 }
24 case op_t::UPDATE: {
25 l.update(coll, bits);
26 break;
27 }
28 case op_t::REMOVE: {
29 l.erase(coll);
30 break;
31 }
32 case op_t::INVALID: {
33 assert(0 == "impossible");
34 break;
35 }
36 __builtin_unreachable();
37 }
38}
39
40
41std::ostream &CollectionNode::print_detail_l(std::ostream &out) const
42{
43 return out;
44}
45
46CollectionNode::list_ret
47CollectionNode::list()
48{
20effc67
TL
49 logger().debug("CollectionNode:{}, {}", __func__, *this);
50 CollectionManager::list_ret_bare list_result;
51 for (auto &[coll, bits] : decoded) {
52 list_result.emplace_back(coll, bits);
53 }
54 return list_ret(
55 interruptible::ready_future_marker{},
56 std::move(list_result));
57}
58
59CollectionNode::create_ret
60CollectionNode::create(coll_context_t cc, coll_t coll, unsigned bits)
61{
20effc67 62 logger().debug("CollectionNode:{}", __func__);
1e59de90 63 if (!is_mutable()) {
20effc67
TL
64 auto mut = cc.tm.get_mutable_extent(cc.t, this)->cast<CollectionNode>();
65 return mut->create(cc, coll, bits);
66 }
67 logger().debug("CollectionNode::create {} {} {}", coll, bits, *this);
68 auto [iter, inserted] = decoded.insert(coll, bits);
69 assert(inserted);
70 if (encoded_sizeof((base_coll_map_t&)decoded) > get_bptr().length()) {
71 decoded.erase(iter);
72 return create_ret(
73 interruptible::ready_future_marker{},
74 create_result_t::OVERFLOW);
75 } else {
76 if (auto buffer = maybe_get_delta_buffer(); buffer) {
77 buffer->insert(coll, bits);
78 }
79 copy_to_node();
80 return create_ret(
81 interruptible::ready_future_marker{},
82 create_result_t::SUCCESS);
83 }
84}
85
86CollectionNode::update_ret
87CollectionNode::update(coll_context_t cc, coll_t coll, unsigned bits)
88{
aee94f69
TL
89 logger().debug("trans.{} CollectionNode:{} {} {}",
90 cc.t.get_trans_id(), __func__, coll, bits);
1e59de90 91 if (!is_mutable()) {
20effc67
TL
92 auto mut = cc.tm.get_mutable_extent(cc.t, this)->cast<CollectionNode>();
93 return mut->update(cc, coll, bits);
94 }
95 if (auto buffer = maybe_get_delta_buffer(); buffer) {
96 buffer->update(coll, bits);
97 }
98 decoded.update(coll, bits);
99 copy_to_node();
100 return seastar::now();
101}
102
103CollectionNode::remove_ret
104CollectionNode::remove(coll_context_t cc, coll_t coll)
105{
aee94f69
TL
106 logger().debug("trans.{} CollectionNode:{} {}",
107 cc.t.get_trans_id(),__func__, coll);
1e59de90 108 if (!is_mutable()) {
20effc67
TL
109 auto mut = cc.tm.get_mutable_extent(cc.t, this)->cast<CollectionNode>();
110 return mut->remove(cc, coll);
111 }
112 if (auto buffer = maybe_get_delta_buffer(); buffer) {
113 buffer->remove(coll);
114 }
115 decoded.remove(coll);
116 copy_to_node();
117 return seastar::now();
118}
119
120}