]>
git.proxmox.com Git - ceph.git/blob - ceph/src/os/bluestore/zoned_types.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3 #ifndef CEPH_OS_BLUESTORE_ZONED_TYPES_H
4 #define CEPH_OS_BLUESTORE_ZONED_TYPES_H
6 #include "include/types.h"
7 #include "kv/KeyValueDB.h"
10 // Tracks two bits of information about the state of a zone: (1) number of dead
11 // bytes in a zone and (2) the write pointer. We use the existing
12 // Int64ArrayMergeOperator for merge and avoid the cost of point queries.
14 // We use the same struct for an on-disk and in-memory representation of the
17 uint64_t num_dead_bytes
= 0; ///< dead bytes deallocated (behind the write pointer)
18 uint64_t write_pointer
= 0; ///< relative offset within the zone
20 void encode(ceph::buffer::list
&bl
) const {
22 encode(write_pointer
, bl
);
23 encode(num_dead_bytes
, bl
);
25 void decode(ceph::buffer::list::const_iterator
&p
) {
27 decode(write_pointer
, p
);
28 decode(num_dead_bytes
, p
);
36 uint64_t get_num_dead_bytes() const {
37 return num_dead_bytes
;
40 uint64_t get_num_live_bytes() const {
41 return write_pointer
- num_dead_bytes
;
44 uint64_t get_write_pointer() const {
48 void increment_num_dead_bytes(uint64_t num_bytes
) {
49 num_dead_bytes
+= num_bytes
;
52 void increment_write_pointer(uint64_t num_bytes
) {
53 write_pointer
+= num_bytes
;
56 friend std::ostream
& operator<<(
58 const zone_state_t
& zone_state
) {
59 return out
<< std::hex
60 << " dead bytes: 0x" << zone_state
.get_num_dead_bytes()
61 << " write pointer: 0x" << zone_state
.get_write_pointer()