Flex  0.17.9
wal.h
Go to the documentation of this file.
1 
16 #ifndef GRAPHSCOPE_DATABASE_WAL_H_
17 #define GRAPHSCOPE_DATABASE_WAL_H_
18 
19 #include <fcntl.h>
20 #include <sys/mman.h>
21 #include <unistd.h>
22 
23 #include <algorithm>
24 #include <filesystem>
25 #include <queue>
26 #include <string>
27 #include <thread>
28 
29 #include "glog/logging.h"
30 
31 namespace gs {
32 
33 struct WalHeader {
34  uint32_t timestamp;
35  uint8_t type : 1;
36  int32_t length : 31;
37 };
38 
40  char* ptr{NULL};
41  size_t size{0};
42 };
43 
44 struct UpdateWalUnit {
45  uint32_t timestamp{0};
46  char* ptr{NULL};
47  size_t size{0};
48 };
49 
50 class WalWriter {
51  static constexpr size_t TRUNC_SIZE = 1ul << 30;
52 
53  public:
54  WalWriter() : fd_(-1), file_size_(0), file_used_(0) {}
55  ~WalWriter() { close(); }
56 
57  void open(const std::string& prefix, int thread_id);
58 
59  void close();
60 
61  void append(const char* data, size_t length);
62 
63  private:
64  int fd_;
65  size_t file_size_;
66  size_t file_used_;
67 };
68 
69 class WalsParser {
70  public:
71  WalsParser(const std::vector<std::string>& paths);
72  ~WalsParser();
73 
74  uint32_t last_ts() const;
75  const WalContentUnit& get_insert_wal(uint32_t ts) const;
76  const std::vector<UpdateWalUnit>& update_wals() const;
77 
78  private:
79  std::vector<int> fds_;
80  std::vector<void*> mmapped_ptrs_;
81  std::vector<size_t> mmapped_size_;
84  uint32_t last_ts_{0};
85 
86  std::vector<UpdateWalUnit> update_wal_list_;
87 };
88 
89 } // namespace gs
90 
91 #endif // GRAPHSCOPE_DATABASE_WAL_H_
gs::WalsParser
Definition: wal.h:69
gs::WalsParser::mmapped_size_
std::vector< size_t > mmapped_size_
Definition: wal.h:81
gs::WalWriter::append
void append(const char *data, size_t length)
Definition: wal.cc:57
gs::WalsParser::last_ts_
uint32_t last_ts_
Definition: wal.h:84
gs::WalsParser::update_wals
const std::vector< UpdateWalUnit > & update_wals() const
Definition: wal.cc:174
gs::WalWriter::open
void open(const std::string &prefix, int thread_id)
Definition: wal.cc:23
gs::WalsParser::insert_wal_list_
WalContentUnit * insert_wal_list_
Definition: wal.h:82
gs::WalsParser::insert_wal_list_size_
size_t insert_wal_list_size_
Definition: wal.h:83
gs
Definition: adj_list.h:23
gs::WalHeader::length
int32_t length
Definition: wal.h:36
gs::WalWriter::fd_
int fd_
Definition: wal.h:64
gs::WalsParser::~WalsParser
~WalsParser()
Definition: wal.cc:155
gs::WalsParser::WalsParser
WalsParser(const std::vector< std::string > &paths)
Definition: wal.cc:94
gs::WalsParser::mmapped_ptrs_
std::vector< void * > mmapped_ptrs_
Definition: wal.h:80
gs::UpdateWalUnit::timestamp
uint32_t timestamp
Definition: wal.h:45
gs::UpdateWalUnit::ptr
char * ptr
Definition: wal.h:46
gs::WalWriter
Definition: wal.h:50
gs::WalContentUnit::ptr
char * ptr
Definition: wal.h:40
gs::WalsParser::update_wal_list_
std::vector< UpdateWalUnit > update_wal_list_
Definition: wal.h:86
gs::WalsParser::get_insert_wal
const WalContentUnit & get_insert_wal(uint32_t ts) const
Definition: wal.cc:170
gs::WalWriter::TRUNC_SIZE
static constexpr size_t TRUNC_SIZE
Definition: wal.h:51
gs::WalWriter::~WalWriter
~WalWriter()
Definition: wal.h:55
gs::WalHeader
Definition: wal.h:33
gs::WalWriter::close
void close()
Definition: wal.cc:44
gs::WalWriter::file_used_
size_t file_used_
Definition: wal.h:66
gs::UpdateWalUnit
Definition: wal.h:44
gs::WalWriter::file_size_
size_t file_size_
Definition: wal.h:65
gs::UpdateWalUnit::size
size_t size
Definition: wal.h:47
gs::WalContentUnit::size
size_t size
Definition: wal.h:41
gs::WalsParser::fds_
std::vector< int > fds_
Definition: wal.h:79
gs::WalContentUnit
Definition: wal.h:39
gs::WalWriter::WalWriter
WalWriter()
Definition: wal.h:54
gs::WalsParser::last_ts
uint32_t last_ts() const
Definition: wal.cc:168
gs::WalHeader::type
uint8_t type
Definition: wal.h:35
gs::WalHeader::timestamp
uint32_t timestamp
Definition: wal.h:34