]> git.proxmox.com Git - ceph.git/blob - ceph/src/crimson/os/seastore/segment_seq_allocator.h
update ceph source to reef 18.2.1
[ceph.git] / ceph / src / crimson / os / seastore / segment_seq_allocator.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 "crimson/os/seastore/logging.h"
7 #include "crimson/os/seastore/seastore_types.h"
8
9 namespace crimson::os::seastore {
10 class AsyncCleaner;
11 }
12
13 namespace crimson::os::seastore::journal {
14 class SegmentedJournal;
15 }
16
17 namespace crimson::os::seastore {
18
19 class SegmentSeqAllocator {
20 public:
21 SegmentSeqAllocator(segment_type_t type)
22 : type(type) {}
23 segment_seq_t get_and_inc_next_segment_seq() {
24 return next_segment_seq++;
25 }
26 private:
27 void set_next_segment_seq(segment_seq_t seq) {
28 LOG_PREFIX(SegmentSeqAllocator::set_next_segment_seq);
29 SUBDEBUG(
30 seastore_journal,
31 "{}, next={}, cur={}",
32 type,
33 segment_seq_printer_t{seq},
34 segment_seq_printer_t{next_segment_seq});
35 assert(type == segment_type_t::JOURNAL
36 ? seq >= next_segment_seq
37 : true);
38 if (seq > next_segment_seq)
39 next_segment_seq = seq;
40 }
41 segment_seq_t next_segment_seq = 0;
42 segment_type_t type = segment_type_t::NULL_SEG;
43 friend class journal::SegmentedJournal;
44 friend class SegmentCleaner;
45 };
46
47 using SegmentSeqAllocatorRef =
48 std::unique_ptr<SegmentSeqAllocator>;
49
50 };