1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
6 #include "crimson/os/seastore/logging.h"
7 #include "crimson/os/seastore/seastore_types.h"
9 namespace crimson::os::seastore
{
13 namespace crimson::os::seastore::journal
{
14 class SegmentedJournal
;
17 namespace crimson::os::seastore
{
19 class SegmentSeqAllocator
{
21 SegmentSeqAllocator(segment_type_t type
)
23 segment_seq_t
get_and_inc_next_segment_seq() {
24 return next_segment_seq
++;
27 void set_next_segment_seq(segment_seq_t seq
) {
28 LOG_PREFIX(SegmentSeqAllocator::set_next_segment_seq
);
31 "{}, next={}, cur={}",
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
38 if (seq
> next_segment_seq
)
39 next_segment_seq
= seq
;
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
;
47 using SegmentSeqAllocatorRef
=
48 std::unique_ptr
<SegmentSeqAllocator
>;