]>
git.proxmox.com Git - ceph.git/blob - ceph/src/crimson/os/seastore/random_block_manager.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
8 #include <boost/intrusive_ptr.hpp>
9 #include <boost/smart_ptr/intrusive_ref_counter.hpp>
10 #include <seastar/core/future.hh>
12 #include "include/ceph_assert.h"
13 #include "crimson/os/seastore/seastore_types.h"
14 #include "include/buffer_fwd.h"
15 #include "crimson/osd/exceptions.h"
17 #include "crimson/os/seastore/transaction.h"
19 #include "crimson/common/layout.h"
20 #include "include/buffer.h"
21 #include "include/uuid.h"
24 namespace crimson::os::seastore
{
26 class RandomBlockManager
{
29 struct mkfs_config_t
{
33 size_t block_size
= 0;
34 size_t total_size
= 0;
35 uint32_t blocks_per_segment
= 1 << 18;
36 device_id_t device_id
= 0;
39 using mkfs_ertr
= crimson::errorator
<
40 crimson::ct_error::input_output_error
,
41 crimson::ct_error::invarg
43 virtual mkfs_ertr::future
<> mkfs(mkfs_config_t
) = 0;
45 using read_ertr
= crimson::errorator
<
46 crimson::ct_error::input_output_error
,
47 crimson::ct_error::invarg
,
48 crimson::ct_error::enoent
,
49 crimson::ct_error::erange
>;
50 virtual read_ertr::future
<> read(uint64_t addr
, bufferptr
&buffer
) = 0;
52 using write_ertr
= crimson::errorator
<
53 crimson::ct_error::input_output_error
,
54 crimson::ct_error::invarg
,
55 crimson::ct_error::ebadf
,
56 crimson::ct_error::enospc
,
57 crimson::ct_error::erange
59 virtual write_ertr::future
<> write(uint64_t addr
, bufferptr
&buf
) = 0;
61 using open_ertr
= crimson::errorator
<
62 crimson::ct_error::input_output_error
,
63 crimson::ct_error::invarg
,
64 crimson::ct_error::enoent
>;
65 virtual open_ertr::future
<> open(const std::string
&path
, paddr_t start
) = 0;
67 using close_ertr
= crimson::errorator
<
68 crimson::ct_error::input_output_error
,
69 crimson::ct_error::invarg
>;
70 virtual close_ertr::future
<> close() = 0;
72 using allocate_ertr
= crimson::errorator
<
73 crimson::ct_error::input_output_error
,
74 crimson::ct_error::invarg
,
75 crimson::ct_error::enospc
77 using allocate_ret
= allocate_ertr::future
<paddr_t
>;
78 // allocator, return start addr of allocated blocks
79 virtual allocate_ret
alloc_extent(Transaction
&t
, size_t size
) = 0;
81 using abort_allocation_ertr
= crimson::errorator
<
82 crimson::ct_error::input_output_error
,
83 crimson::ct_error::invarg
85 virtual abort_allocation_ertr::future
<> abort_allocation(Transaction
&t
) = 0;
87 using complete_allocation_ertr
= crimson::errorator
<
88 crimson::ct_error::input_output_error
,
89 crimson::ct_error::invarg
,
90 crimson::ct_error::enoent
,
91 crimson::ct_error::erange
93 virtual write_ertr::future
<> complete_allocation(Transaction
&t
) = 0;
95 virtual size_t get_size() const = 0;
96 virtual size_t get_block_size() const = 0;
97 virtual uint64_t get_free_blocks() const = 0;
98 virtual uint32_t get_blocks_per_segment() const = 0;
99 virtual device_id_t
get_device_id() const = 0;
100 virtual ~RandomBlockManager() {}
102 using RandomBlockManagerRef
= std::unique_ptr
<RandomBlockManager
>;