Flex  0.17.9
version_manager.h
Go to the documentation of this file.
1 
16 #ifndef GRAPHSCOPE_DATABASE_VERSION_MANAGER_H_
17 #define GRAPHSCOPE_DATABASE_VERSION_MANAGER_H_
18 
19 #include <assert.h>
20 #include <fcntl.h>
21 #include <unistd.h>
22 
23 #include <array>
24 #include <atomic>
25 #include <bitset>
26 #include <thread>
27 
28 #include "glog/logging.h"
29 #include "grape/utils/bitset.h"
30 #include "grape/utils/concurrent_queue.h"
31 
32 namespace gs {
33 
35  public:
38 
39  void init_ts(uint32_t ts, int thread_num);
40 
41  void clear();
42 
43  uint32_t acquire_read_timestamp();
44 
46 
47  uint32_t acquire_insert_timestamp();
48  void release_insert_timestamp(uint32_t ts);
49 
50  uint32_t acquire_update_timestamp();
51  void release_update_timestamp(uint32_t ts);
52  bool revert_update_timestamp(uint32_t ts);
53 
54  private:
55  std::atomic<uint32_t> write_ts_{1};
56  std::atomic<uint32_t> read_ts_{0};
57 
58  std::atomic<int> pending_reqs_{0};
59  std::atomic<int> pending_update_reqs_{0};
60 
61  grape::Bitset buf_;
62  grape::SpinLock lock_;
63 
65 };
66 
67 } // namespace gs
68 
69 #endif // GRAPHSCOPE_DATABASE_VERSION_MANAGER_H_
gs::VersionManager::lock_
grape::SpinLock lock_
Definition: version_manager.h:62
gs::VersionManager::thread_num_
int thread_num_
Definition: version_manager.h:64
gs::VersionManager::clear
void clear()
Definition: version_manager.cc:37
gs::VersionManager::VersionManager
VersionManager()
Definition: version_manager.cc:27
gs::VersionManager::init_ts
void init_ts(uint32_t ts, int thread_num)
Definition: version_manager.cc:31
gs::VersionManager::acquire_update_timestamp
uint32_t acquire_update_timestamp()
Definition: version_manager.cc:101
gs
Definition: adj_list.h:23
gs::VersionManager::write_ts_
std::atomic< uint32_t > write_ts_
Definition: version_manager.h:55
gs::VersionManager::release_read_timestamp
void release_read_timestamp()
Definition: version_manager.cc:64
gs::VersionManager::acquire_read_timestamp
uint32_t acquire_read_timestamp()
Definition: version_manager.cc:44
gs::VersionManager
Definition: version_manager.h:34
gs::VersionManager::read_ts_
std::atomic< uint32_t > read_ts_
Definition: version_manager.h:56
gs::VersionManager::revert_update_timestamp
bool revert_update_timestamp(uint32_t ts)
Definition: version_manager.cc:133
gs::VersionManager::acquire_insert_timestamp
uint32_t acquire_insert_timestamp()
Definition: version_manager.cc:66
gs::VersionManager::buf_
grape::Bitset buf_
Definition: version_manager.h:61
gs::VersionManager::release_update_timestamp
void release_update_timestamp(uint32_t ts)
Definition: version_manager.cc:118
gs::VersionManager::release_insert_timestamp
void release_insert_timestamp(uint32_t ts)
Definition: version_manager.cc:86
gs::VersionManager::pending_reqs_
std::atomic< int > pending_reqs_
Definition: version_manager.h:58
gs::VersionManager::pending_update_reqs_
std::atomic< int > pending_update_reqs_
Definition: version_manager.h:59
gs::VersionManager::~VersionManager
~VersionManager()
Definition: version_manager.cc:29