]>
git.proxmox.com Git - ceph.git/blob - ceph/src/crimson/os/cyanstore/cyan_store.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
7 #include <unordered_map>
13 #include <seastar/core/future.hh>
14 #include <seastar/core/future-util.hh>
16 #include "osd/osd_types.h"
17 #include "include/uuid.h"
19 #include "crimson/os/cyanstore/cyan_object.h"
20 #include "crimson/os/cyanstore/cyan_collection.h"
21 #include "crimson/os/futurized_store.h"
27 namespace crimson::os
{
28 class CyanStore final
: public FuturizedStore
{
29 class Shard
: public FuturizedStore::Shard
{
31 Shard(std::string path
)
34 seastar::future
<struct stat
> stat(
36 const ghobject_t
& oid
) final
;
38 read_errorator::future
<ceph::bufferlist
> read(
40 const ghobject_t
& oid
,
43 uint32_t op_flags
= 0) final
;
45 read_errorator::future
<ceph::bufferlist
> readv(
47 const ghobject_t
& oid
,
48 interval_set
<uint64_t>& m
,
49 uint32_t op_flags
= 0) final
;
51 get_attr_errorator::future
<ceph::bufferlist
> get_attr(
53 const ghobject_t
& oid
,
54 std::string_view name
) const final
;
56 get_attrs_ertr::future
<attrs_t
> get_attrs(
58 const ghobject_t
& oid
) final
;
60 read_errorator::future
<omap_values_t
> omap_get_values(
62 const ghobject_t
& oid
,
63 const omap_keys_t
& keys
) final
;
65 read_errorator::future
<std::tuple
<bool, omap_values_t
>> omap_get_values(
66 CollectionRef c
, ///< [in] collection
67 const ghobject_t
&oid
, ///< [in] oid
68 const std::optional
<std::string
> &start
///< [in] start, empty for begin
71 get_attr_errorator::future
<ceph::bufferlist
> omap_get_header(
73 const ghobject_t
& oid
) final
;
75 seastar::future
<std::tuple
<std::vector
<ghobject_t
>, ghobject_t
>>
78 const ghobject_t
& start
,
79 const ghobject_t
& end
,
80 uint64_t limit
) const final
;
82 seastar::future
<CollectionRef
> create_new_collection(const coll_t
& cid
) final
;
84 seastar::future
<CollectionRef
> open_collection(const coll_t
& cid
) final
;
86 seastar::future
<> do_transaction_no_callbacks(
88 ceph::os::Transaction
&& txn
) final
;
90 read_errorator::future
<std::map
<uint64_t, uint64_t>>
93 const ghobject_t
& oid
,
97 unsigned get_max_attr_name_length() const final
;
100 // only exposed to CyanStore
101 mount_ertr::future
<> mount();
103 seastar::future
<> umount();
105 seastar::future
<> mkfs();
107 mkfs_ertr::future
<> mkcoll(uuid_d new_osd_fsid
);
109 using coll_core_t
= FuturizedStore::coll_core_t
;
110 seastar::future
<std::vector
<coll_core_t
>> list_collections();
112 uint64_t get_used_bytes() const { return used_bytes
; }
115 int _remove(const coll_t
& cid
, const ghobject_t
& oid
);
116 int _touch(const coll_t
& cid
, const ghobject_t
& oid
);
117 int _write(const coll_t
& cid
, const ghobject_t
& oid
,
118 uint64_t offset
, size_t len
, const ceph::bufferlist
& bl
,
119 uint32_t fadvise_flags
);
120 int _zero(const coll_t
& cid
, const ghobject_t
& oid
,
121 uint64_t offset
, size_t len
);
124 const ghobject_t
& oid
);
125 int _omap_set_values(
127 const ghobject_t
& oid
,
128 std::map
<std::string
, ceph::bufferlist
> &&aset
);
129 int _omap_set_header(
131 const ghobject_t
& oid
,
132 const ceph::bufferlist
&header
);
135 const ghobject_t
& oid
,
136 const omap_keys_t
& aset
);
137 int _omap_rmkeyrange(
139 const ghobject_t
& oid
,
140 const std::string
&first
,
141 const std::string
&last
);
142 int _truncate(const coll_t
& cid
, const ghobject_t
& oid
, uint64_t size
);
143 int _clone(const coll_t
& cid
, const ghobject_t
& oid
,
144 const ghobject_t
& noid
);
145 int _setattrs(const coll_t
& cid
, const ghobject_t
& oid
,
146 std::map
<std::string
,bufferlist
>&& aset
);
147 int _rm_attr(const coll_t
& cid
, const ghobject_t
& oid
,
148 std::string_view name
);
149 int _rm_attrs(const coll_t
& cid
, const ghobject_t
& oid
);
150 int _create_collection(const coll_t
& cid
, int bits
);
151 boost::intrusive_ptr
<Collection
> _get_collection(const coll_t
& cid
);
154 uint64_t used_bytes
= 0;
155 const std::string path
;
156 std::unordered_map
<coll_t
, boost::intrusive_ptr
<Collection
>> coll_map
;
157 std::map
<coll_t
, boost::intrusive_ptr
<Collection
>> new_coll_map
;
161 CyanStore(const std::string
& path
);
164 seastar::future
<> start() final
{
165 ceph_assert(seastar::this_shard_id() == primary_core
);
166 return shard_stores
.start(path
);
169 seastar::future
<> stop() final
{
170 ceph_assert(seastar::this_shard_id() == primary_core
);
171 return shard_stores
.stop();
174 mount_ertr::future
<> mount() final
{
175 ceph_assert(seastar::this_shard_id() == primary_core
);
176 return shard_stores
.invoke_on_all(
177 [](auto &local_store
) {
178 return local_store
.mount().handle_error(
179 crimson::stateful_ec::handle([](const auto& ec
) {
180 crimson::get_logger(ceph_subsys_cyanstore
).error(
181 "error mounting cyanstore: ({}) {}",
182 ec
.value(), ec
.message());
183 std::exit(EXIT_FAILURE
);
188 seastar::future
<> umount() final
{
189 ceph_assert(seastar::this_shard_id() == primary_core
);
190 return shard_stores
.invoke_on_all(
191 [](auto &local_store
) {
192 return local_store
.umount();
196 mkfs_ertr::future
<> mkfs(uuid_d new_osd_fsid
) final
;
198 seastar::future
<store_statfs_t
> stat() const final
;
200 uuid_d
get_fsid() const final
;
202 seastar::future
<> write_meta(const std::string
& key
,
203 const std::string
& value
) final
;
205 FuturizedStore::Shard
& get_sharded_store() final
{
206 return shard_stores
.local();
209 seastar::future
<std::tuple
<int, std::string
>>
210 read_meta(const std::string
& key
) final
;
212 seastar::future
<std::vector
<coll_core_t
>> list_collections() final
;
215 seastar::sharded
<CyanStore::Shard
> shard_stores
;
216 const std::string path
;