]> git.proxmox.com Git - ceph.git/blob - ceph/src/crimson/os/seastore/random_block_manager.h
import quincy beta 17.1.0
[ceph.git] / 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
3
4 #pragma once
5
6 #include <iosfwd>
7
8 #include <boost/intrusive_ptr.hpp>
9 #include <boost/smart_ptr/intrusive_ref_counter.hpp>
10 #include <seastar/core/future.hh>
11
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"
16
17 #include "crimson/os/seastore/transaction.h"
18
19 #include "crimson/common/layout.h"
20 #include "include/buffer.h"
21 #include "include/uuid.h"
22
23
24 namespace crimson::os::seastore {
25
26 class RandomBlockManager {
27 public:
28
29 struct mkfs_config_t {
30 std::string path;
31 paddr_t start;
32 paddr_t end;
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;
37 seastore_meta_t meta;
38 };
39 using mkfs_ertr = crimson::errorator<
40 crimson::ct_error::input_output_error,
41 crimson::ct_error::invarg
42 >;
43 virtual mkfs_ertr::future<> mkfs(mkfs_config_t) = 0;
44
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;
51
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
58 >;
59 virtual write_ertr::future<> write(uint64_t addr, bufferptr &buf) = 0;
60
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;
66
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;
71
72 using allocate_ertr = crimson::errorator<
73 crimson::ct_error::input_output_error,
74 crimson::ct_error::invarg,
75 crimson::ct_error::enospc
76 >;
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;
80
81 using abort_allocation_ertr = crimson::errorator<
82 crimson::ct_error::input_output_error,
83 crimson::ct_error::invarg
84 >;
85 virtual abort_allocation_ertr::future<> abort_allocation(Transaction &t) = 0;
86
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
92 >;
93 virtual write_ertr::future<> complete_allocation(Transaction &t) = 0;
94
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() {}
101 };
102 using RandomBlockManagerRef = std::unique_ptr<RandomBlockManager>;
103
104 }