Flex  0.17.9
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
wal.h
Go to the documentation of this file.
1 
16 #ifndef ENGINES_GRAPH_DB_DATABASE_WAL_WAL_H_
17 #define ENGINES_GRAPH_DB_DATABASE_WAL_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 #include <unordered_map>
29 
30 #include "glog/logging.h"
31 
32 namespace gs {
33 
34 struct WalHeader {
35  uint32_t timestamp;
36  uint8_t type : 1;
37  int32_t length : 31;
38 };
39 
41  char* ptr{NULL};
42  size_t size{0};
43 };
44 
45 struct UpdateWalUnit {
46  uint32_t timestamp{0};
47  char* ptr{NULL};
48  size_t size{0};
49 };
50 
51 std::string get_wal_uri_scheme(const std::string& uri);
52 std::string get_wal_uri_path(const std::string& uri);
53 
57 class IWalWriter {
58  public:
59  virtual ~IWalWriter() {}
60 
61  virtual std::string type() const = 0;
66  virtual void open(const std::string& uri, int thread_id) = 0;
67 
72  virtual void close() = 0;
73 
77  virtual bool append(const char* data, size_t length) = 0;
78 };
79 
83 class IWalParser {
84  public:
85  virtual ~IWalParser() {}
86 
90  virtual void open(const std::string& wal_uri) = 0;
91 
92  virtual void close() = 0;
93 
94  virtual uint32_t last_ts() const = 0;
95 
96  /*
97  * Get the insert wal unit with the given timestamp.
98  */
99  virtual const WalContentUnit& get_insert_wal(uint32_t ts) const = 0;
100 
104  virtual const std::vector<UpdateWalUnit>& get_update_wals() const = 0;
105 };
106 
108  public:
109  using wal_writer_initializer_t = std::unique_ptr<IWalWriter> (*)();
110 
111  static void Init();
112 
113  static void Finalize();
114 
115  static std::unique_ptr<IWalWriter> CreateWalWriter(
116  const std::string& wal_uri);
117 
118  static bool RegisterWalWriter(const std::string& wal_writer_type,
119  wal_writer_initializer_t initializer);
120 
121  private:
122  static std::unordered_map<std::string, wal_writer_initializer_t>&
124 };
125 
127  public:
128  using wal_writer_initializer_t = std::unique_ptr<IWalWriter> (*)();
130  std::unique_ptr<IWalParser> (*)(const std::string& wal_dir);
131 
132  static void Init();
133 
134  static void Finalize();
135 
136  static std::unique_ptr<IWalParser> CreateWalParser(
137  const std::string& wal_uri);
138 
139  static bool RegisterWalParser(const std::string& wal_parser_type,
140  wal_parser_initializer_t initializer);
141 
142  private:
143  static std::unordered_map<std::string, wal_parser_initializer_t>&
145 };
146 
147 } // namespace gs
148 
149 #endif // ENGINES_GRAPH_DB_DATABASE_WAL_WAL_H_
gs::WalParserFactory::Finalize
static void Finalize()
Definition: wal.cc:87
gs::IWalWriter::~IWalWriter
virtual ~IWalWriter()
Definition: wal.h:59
gs::get_wal_uri_path
std::string get_wal_uri_path(const std::string &uri)
Definition: wal.cc:39
gs::IWalParser::close
virtual void close()=0
gs::IWalWriter::append
virtual bool append(const char *data, size_t length)=0
gs::WalParserFactory::getKnownWalParsers
static std::unordered_map< std::string, wal_parser_initializer_t > & getKnownWalParsers()
Definition: wal.cc:111
gs::WalWriterFactory::Init
static void Init()
Definition: wal.cc:50
gs::get_wal_uri_scheme
std::string get_wal_uri_scheme(const std::string &uri)
Definition: wal.cc:25
gs::WalWriterFactory::CreateWalWriter
static std::unique_ptr< IWalWriter > CreateWalWriter(const std::string &wal_uri)
Definition: wal.cc:54
gs::WalWriterFactory::getKnownWalWriters
static std::unordered_map< std::string, wal_writer_initializer_t > & getKnownWalWriters()
Definition: wal.cc:76
gs::WalWriterFactory::Finalize
static void Finalize()
Definition: wal.cc:52
gs
Definition: adj_list.h:23
gs::WalHeader::length
int32_t length
Definition: wal.h:37
gs::WalParserFactory
Definition: wal.h:126
gs::IWalParser::~IWalParser
virtual ~IWalParser()
Definition: wal.h:85
gs::UpdateWalUnit::timestamp
uint32_t timestamp
Definition: wal.h:46
gs::IWalParser::last_ts
virtual uint32_t last_ts() const =0
gs::WalParserFactory::wal_writer_initializer_t
std::unique_ptr< IWalWriter >(*)() wal_writer_initializer_t
Definition: wal.h:128
gs::UpdateWalUnit::ptr
char * ptr
Definition: wal.h:47
gs::IWalParser::get_insert_wal
virtual const WalContentUnit & get_insert_wal(uint32_t ts) const =0
gs::WalContentUnit::ptr
char * ptr
Definition: wal.h:41
gs::WalWriterFactory::wal_writer_initializer_t
std::unique_ptr< IWalWriter >(*)() wal_writer_initializer_t
Definition: wal.h:109
gs::WalParserFactory::wal_parser_initializer_t
std::unique_ptr< IWalParser >(*)(const std::string &wal_dir) wal_parser_initializer_t
Definition: wal.h:130
gs::IWalParser
Definition: wal.h:83
gs::IWalWriter::close
virtual void close()=0
gs::WalParserFactory::RegisterWalParser
static bool RegisterWalParser(const std::string &wal_parser_type, wal_parser_initializer_t initializer)
Definition: wal.cc:101
gs::WalHeader
Definition: wal.h:34
gs::IWalParser::open
virtual void open(const std::string &wal_uri)=0
gs::IWalParser::get_update_wals
virtual const std::vector< UpdateWalUnit > & get_update_wals() const =0
gs::WalWriterFactory::RegisterWalWriter
static bool RegisterWalWriter(const std::string &wal_writer_type, wal_writer_initializer_t initializer)
Definition: wal.cc:66
gs::WalParserFactory::CreateWalParser
static std::unique_ptr< IWalParser > CreateWalParser(const std::string &wal_uri)
Definition: wal.cc:89
gs::UpdateWalUnit
Definition: wal.h:45
gs::WalWriterFactory
Definition: wal.h:107
gs::UpdateWalUnit::size
size_t size
Definition: wal.h:48
gs::WalParserFactory::Init
static void Init()
Definition: wal.cc:85
gs::WalContentUnit::size
size_t size
Definition: wal.h:42
gs::wal_dir
std::string wal_dir(const std::string &work_dir)
Definition: file_names.h:196
gs::WalContentUnit
Definition: wal.h:40
gs::WalHeader::type
uint8_t type
Definition: wal.h:36
gs::IWalWriter::open
virtual void open(const std::string &uri, int thread_id)=0
gs::WalHeader::timestamp
uint32_t timestamp
Definition: wal.h:35
gs::IWalWriter::type
virtual std::string type() const =0
gs::IWalWriter
Definition: wal.h:57