Flex  0.17.9
graph_db_session.h
Go to the documentation of this file.
1 
16 #ifndef GRAPHSCOPE_DATABASE_GRAPH_DB_SESSION_H_
17 #define GRAPHSCOPE_DATABASE_GRAPH_DB_SESSION_H_
18 
29 #include "flex/utils/result.h"
30 
31 namespace gs {
32 
33 class GraphDB;
34 class WalWriter;
35 
37  public:
38  enum class InputFormat : uint8_t {
39  kCppEncoder = 0,
40  kCypherJson = 1, // Json format for cypher query
41  kCypherProtoAdhoc = 2, // Protobuf format for adhoc query
42  kCypherProtoProcedure = 3, // Protobuf format for procedure query
43  };
44 
45  static constexpr int32_t MAX_RETRY = 3;
46  static constexpr int32_t MAX_PLUGIN_NUM = 256; // 2^(sizeof(uint8_t)*8)
47  static constexpr const char* kCppEncoderStr = "\x00";
48  static constexpr const char* kCypherJsonStr = "\x01";
49  static constexpr const char* kCypherProtoAdhocStr = "\x02";
50  static constexpr const char* kCypherProtoProcedureStr = "\x03";
52  const std::string& work_dir, int thread_id)
53  : db_(db),
54  alloc_(alloc),
55  logger_(logger),
56  work_dir_(work_dir),
57  thread_id_(thread_id),
58  eval_duration_(0),
59  query_num_(0) {
60  for (auto& app : apps_) {
61  app = nullptr;
62  }
63  }
65 
67 
69 
71 
73 
75 
77 
78  bool BatchUpdate(UpdateBatch& batch);
79 
80  const MutablePropertyFragment& graph() const;
82  const GraphDB& db() const;
83 
84  const Schema& schema() const;
85 
86  std::shared_ptr<ColumnBase> get_vertex_property_column(
87  uint8_t label, const std::string& col_name) const;
88 
89  // Get vertex id column.
90  std::shared_ptr<RefColumnBase> get_vertex_id_column(uint8_t label) const;
91 
92  Result<std::vector<char>> Eval(const std::string& input);
93 
94  void GetAppInfo(Encoder& result);
95 
96  int SessionId() const;
97 
98  bool Compact();
99 
100  double eval_duration() const;
101 
102  const AppMetric& GetAppMetric(int idx) const;
103 
104  int64_t query_num() const;
105 
106  AppBase* GetApp(int idx);
107 
108  private:
110  parse_query_type_from_cypher_json(const std::string_view& input);
112  parse_query_type_from_cypher_internal(const std::string_view& input);
140  const std::string& input) {
141  const char* str_data = input.data();
142  VLOG(10) << "parse query type for " << input << " size: " << input.size();
143  char input_tag = input.back();
144  VLOG(10) << "input tag: " << static_cast<int>(input_tag);
145  size_t len = input.size();
146  if (input_tag == static_cast<uint8_t>(InputFormat::kCppEncoder)) {
147  // For cpp encoder, the query id is the second last byte, others are all
148  // user-defined payload,
149  return std::make_pair((uint8_t) input[len - 2],
150  std::string_view(str_data, len - 2));
151  } else if (input_tag ==
152  static_cast<uint8_t>(InputFormat::kCypherProtoAdhoc)) {
153  // For cypher internal adhoc, the query id is the
154  // second last byte,which is fixed to 255, and other bytes are a string
155  // representing the path to generated dynamic lib.
156  return std::make_pair((uint8_t) input[len - 2],
157  std::string_view(str_data, len - 2));
158  } else if (input_tag == static_cast<uint8_t>(InputFormat::kCypherJson)) {
159  // For cypherJson there is no query-id provided. The query name is
160  // provided in the json string.
161  std::string_view str_view(input.data(), len - 1);
162  return parse_query_type_from_cypher_json(str_view);
163  } else if (input_tag ==
164  static_cast<uint8_t>(InputFormat::kCypherProtoProcedure)) {
165  // For cypher internal procedure, the query_name is
166  // provided in the protobuf message.
167  std::string_view str_view(input.data(), len - 1);
168  return parse_query_type_from_cypher_internal(str_view);
169 
170  } else {
172  gs::Status(StatusCode::INVALID_ARGUMENT,
173  "Invalid input tag: " + std::to_string(input_tag)));
174  }
175  }
179  std::string work_dir_;
181 
182  std::array<AppWrapper, MAX_PLUGIN_NUM> app_wrappers_;
183  std::array<AppBase*, MAX_PLUGIN_NUM> apps_;
184  std::array<AppMetric, MAX_PLUGIN_NUM> app_metrics_;
185 
186  std::atomic<int64_t> eval_duration_;
187  std::atomic<int64_t> query_num_;
188 };
189 
190 } // namespace gs
191 
192 #endif // GRAPHSCOPE_DATABASE_GRAPH_DB_SESSION_H_
gs::Result
Definition: result.h:62
gs::GraphDBSession::apps_
std::array< AppBase *, MAX_PLUGIN_NUM > apps_
Definition: graph_db_session.h:183
gs::GraphDBSession::kCppEncoderStr
static constexpr const char * kCppEncoderStr
Definition: graph_db_session.h:47
gs::GraphDBSession::Eval
Result< std::vector< char > > Eval(const std::string &input)
Definition: graph_db_session.cc:111
gs::GraphDBSession::kCypherProtoAdhocStr
static constexpr const char * kCypherProtoAdhocStr
Definition: graph_db_session.h:49
gs::GraphDBSession::GetAppInfo
void GetAppInfo(Encoder &result)
Definition: graph_db_session.cc:190
single_vertex_insert_transaction.h
gs::GraphDBSession::GetSingleEdgeInsertTransaction
SingleEdgeInsertTransaction GetSingleEdgeInsertTransaction()
Definition: graph_db_session.cc:48
gs::GraphDBSession::GetAppMetric
const AppMetric & GetAppMetric(int idx) const
Definition: graph_db_session.cc:302
gs::GraphDBSession::db_
GraphDB & db_
Definition: graph_db_session.h:176
gs::CompactTransaction
Definition: compact_transaction.h:28
gs::GraphDBSession::InputFormat::kCppEncoder
@ kCppEncoder
gs::GraphDBSession::alloc_
Allocator & alloc_
Definition: graph_db_session.h:177
gs::GraphDBSession::GetApp
AppBase * GetApp(int idx)
Definition: graph_db_session.cc:219
column.h
gs::GraphDBSession::parse_query_type_from_cypher_internal
Result< std::pair< uint8_t, std::string_view > > parse_query_type_from_cypher_internal(const std::string_view &input)
Definition: graph_db_session.cc:272
gs::GraphDBSession::logger_
WalWriter & logger_
Definition: graph_db_session.h:178
gs::GraphDBSession::InputFormat
InputFormat
Definition: graph_db_session.h:38
gs::InsertTransaction
Definition: insert_transaction.h:32
gs::GraphDBSession::db
const GraphDB & db() const
Definition: graph_db_session.cc:69
std::to_string
std::string to_string(const gs::flex::interactive::Code &status)
Definition: result.h:166
gs
Definition: adj_list.h:23
gs::GraphDBSession::GraphDBSession
GraphDBSession(GraphDB &db, Allocator &alloc, WalWriter &logger, const std::string &work_dir, int thread_id)
Definition: graph_db_session.h:51
single_edge_insert_transaction.h
gs::GraphDBSession::GetUpdateTransaction
UpdateTransaction GetUpdateTransaction()
Definition: graph_db_session.cc:54
insert_transaction.h
gs::GraphDBSession::get_vertex_id_column
std::shared_ptr< RefColumnBase > get_vertex_id_column(uint8_t label) const
Definition: graph_db_session.cc:80
gs::GraphDBSession::GetReadTransaction
ReadTransaction GetReadTransaction() const
Definition: graph_db_session.cc:30
gs::Encoder
Definition: app_utils.h:25
gs::GraphDBSession::query_num_
std::atomic< int64_t > query_num_
Definition: graph_db_session.h:187
gs::SingleEdgeInsertTransaction
Definition: single_edge_insert_transaction.h:30
mutable_property_fragment.h
gs::ArenaAllocator
Definition: allocators.h:29
gs::GraphDBSession::Compact
bool Compact()
Definition: graph_db_session.cc:199
gs::MutablePropertyFragment
Definition: mutable_property_fragment.h:37
gs::GraphDBSession::~GraphDBSession
~GraphDBSession()
Definition: graph_db_session.h:64
gs::GraphDBSession::graph
const MutablePropertyFragment & graph() const
Definition: graph_db_session.cc:65
gs::GraphDBSession::parse_query_type_from_cypher_json
Result< std::pair< uint8_t, std::string_view > > parse_query_type_from_cypher_json(const std::string_view &input)
Definition: graph_db_session.cc:246
update_transaction.h
gs::AppBase
Definition: app_base.h:35
gs::GraphDBSession::eval_duration_
std::atomic< int64_t > eval_duration_
Definition: graph_db_session.h:186
gs::WalWriter
Definition: wal.h:50
gs::GraphDBSession::BatchUpdate
bool BatchUpdate(UpdateBatch &batch)
Definition: graph_db_session.cc:60
gs::Schema
Definition: schema.h:29
gs::GraphDBSession
Definition: graph_db_session.h:36
gs::GraphDB
Definition: graph_db.h:70
gs::GraphDBSession::GetSingleVertexInsertTransaction
SingleVertexInsertTransaction GetSingleVertexInsertTransaction()
Definition: graph_db_session.cc:42
gs::GraphDBSession::thread_id_
int thread_id_
Definition: graph_db_session.h:180
gs::GraphDBSession::InputFormat::kCypherJson
@ kCypherJson
gs::GraphDBSession::app_metrics_
std::array< AppMetric, MAX_PLUGIN_NUM > app_metrics_
Definition: graph_db_session.h:184
gs::Status
Definition: result.h:32
gs::ReadTransaction
Definition: read_transaction.h:277
gs::SingleVertexInsertTransaction
Definition: single_vertex_insert_transaction.h:30
result.h
gs::GraphDBSession::query_num
int64_t query_num() const
Definition: graph_db_session.cc:215
gs::GraphDBSession::app_wrappers_
std::array< AppWrapper, MAX_PLUGIN_NUM > app_wrappers_
Definition: graph_db_session.h:182
gs::GraphDBSession::InputFormat::kCypherProtoProcedure
@ kCypherProtoProcedure
gs::GraphDBSession::kCypherProtoProcedureStr
static constexpr const char * kCypherProtoProcedureStr
Definition: graph_db_session.h:50
gs::GraphDBSession::MAX_PLUGIN_NUM
static constexpr int32_t MAX_PLUGIN_NUM
Definition: graph_db_session.h:46
gs::GraphDBSession::GetInsertTransaction
InsertTransaction GetInsertTransaction()
Definition: graph_db_session.cc:35
gs::GraphDBSession::parse_query_type
Result< std::pair< uint8_t, std::string_view > > parse_query_type(const std::string &input)
Parse the input format of the query. There are four formats: 0. CppEncoder: This format will be used ...
Definition: graph_db_session.h:139
gs::GraphDBSession::MAX_RETRY
static constexpr int32_t MAX_RETRY
Definition: graph_db_session.h:45
compact_transaction.h
gs::GraphDBSession::work_dir_
std::string work_dir_
Definition: graph_db_session.h:179
app_base.h
gs::GraphDBSession::schema
const Schema & schema() const
Definition: graph_db_session.cc:73
gs::UpdateTransaction
Definition: update_transaction.h:38
transaction_utils.h
gs::GraphDBSession::SessionId
int SessionId() const
Definition: graph_db_session.cc:192
gs::GraphDBSession::eval_duration
double eval_duration() const
Definition: graph_db_session.cc:211
read_transaction.h
gs::GraphDBSession::GetCompactTransaction
CompactTransaction GetCompactTransaction()
Definition: graph_db_session.cc:194
gs::GraphDBSession::InputFormat::kCypherProtoAdhoc
@ kCypherProtoAdhoc
gs::GraphDBSession::kCypherJsonStr
static constexpr const char * kCypherJsonStr
Definition: graph_db_session.h:48
gs::AppMetric
Definition: app_base.h:139
gs::UpdateBatch
Definition: transaction_utils.h:113
gs::GraphDBSession::get_vertex_property_column
std::shared_ptr< ColumnBase > get_vertex_property_column(uint8_t label, const std::string &col_name) const
Definition: graph_db_session.cc:75