OpenSDN source code
cql_if.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2015 Juniper Networks, Inc. All rights reserved.
3 //
4 
5 #ifndef DATABASE_CASSANDRA_CQL_CQL_IF_H_
6 #define DATABASE_CASSANDRA_CQL_CQL_IF_H_
7 
8 #include <string>
9 #include <vector>
10 #include <mutex>
11 #include <atomic>
12 
13 #include <database/gendb_if.h>
15 #include <database/cassandra/cql/cql_types.h>
18 
19 class EventManager;
20 
21 namespace cass {
22 namespace cql {
23 
24 class CqlIf : public GenDb::GenDbIf {
25  public:
27  const std::vector<std::string> &cassandra_ips,
28  int cassandra_port,
29  const std::string &cassandra_user,
30  const std::string &cassandra_password,
31  bool use_ssl,
32  const std::string &ca_certs_path,
33  bool create_schema=false);
34  CqlIf();
35  virtual ~CqlIf();
36  // Init/Uninit
37  virtual bool Db_Init();
38  virtual void Db_Uninit();
39  virtual void Db_SetInitDone(bool);
40  // Tablespace
41  virtual bool Db_SetTablespace(const std::string &tablespace);
42  virtual bool Db_AddSetTablespace(const std::string &tablespace,
43  const std::string &replication_factor = "1");
44  // Column family
45  virtual bool Db_AddColumnfamily(const GenDb::NewCf &cf,
46  const std::string &compaction_strategy);
47  virtual bool Db_UseColumnfamily(const GenDb::NewCf &cf);
48  virtual bool Db_UseColumnfamily(const std::string &cfname);
49  // Index
50  virtual bool Db_CreateIndex(const std::string &cfname,
51  const std::string &column, const std::string &indexname,
53  // Column
54  virtual bool Db_AddColumn(std::auto_ptr<GenDb::ColList> cl,
55  GenDb::DbConsistency::type dconsistency,
57  virtual bool Db_AddColumnSync(std::auto_ptr<GenDb::ColList> cl,
58  GenDb::DbConsistency::type dconsistency);
59  // Read
60  virtual bool Db_GetRow(GenDb::ColList *out, const std::string &cfname,
61  const GenDb::DbDataValueVec &rowkey,
62  GenDb::DbConsistency::type dconsistency);
63  virtual bool Db_GetRow(GenDb::ColList *out, const std::string &cfname,
64  const GenDb::DbDataValueVec &rowkey,
65  GenDb::DbConsistency::type dconsistency,
66  const GenDb::ColumnNameRange &crange,
67  const GenDb::FieldNamesToReadVec &read_vec);
68  virtual bool Db_GetMultiRow(GenDb::ColListVec *out,
69  const std::string &cfname,
70  const std::vector<GenDb::DbDataValueVec> &v_rowkey);
71  virtual bool Db_GetMultiRow(GenDb::ColListVec *out,
72  const std::string &cfname,
73  const std::vector<GenDb::DbDataValueVec> &v_rowkey,
74  const GenDb::ColumnNameRange &crange);
75  virtual bool Db_GetMultiRow(GenDb::ColListVec *out,
76  const std::string &cfname,
77  const std::vector<GenDb::DbDataValueVec> &v_rowkey,
78  const GenDb::ColumnNameRange &crange,
79  const GenDb::FieldNamesToReadVec &read_vec,
80  GenDb::DbConsistency::type dconsistency =
82  virtual bool Db_GetRowAsync(const std::string &cfname,
83  const GenDb::DbDataValueVec &rowkey,
84  GenDb::DbConsistency::type dconsistency,
86  virtual bool Db_GetRowAsync(const std::string &cfname,
87  const GenDb::DbDataValueVec &rowkey,
88  GenDb::DbConsistency::type dconsistency, int task_id,
89  int task_instance, GenDb::GenDbIf::DbGetRowCb cb);
90  virtual bool Db_GetRowAsync(const std::string &cfname,
91  const GenDb::DbDataValueVec &rowkey,
92  const GenDb::ColumnNameRange &crange,
93  GenDb::DbConsistency::type dconsistency,
95  virtual bool Db_GetRowAsync(const std::string &cfname,
96  const GenDb::DbDataValueVec &rowkey,
97  const GenDb::ColumnNameRange &crange,
98  GenDb::DbConsistency::type dconsistency, int task_id,
99  int task_instance, GenDb::GenDbIf::DbGetRowCb cb);
100  virtual bool Db_GetRowAsync(const std::string &cfname,
101  const GenDb::DbDataValueVec &rowkey, const GenDb::ColumnNameRange &crange,
102  const GenDb::WhereIndexInfoVec &where_vec,
104  virtual bool Db_GetAllRows(GenDb::ColListVec *out,
105  const std::string &cfname, GenDb::DbConsistency::type dconsistency);
106  // Queue
107  virtual bool Db_GetQueueStats(uint64_t *queue_count,
108  uint64_t *enqueues) const;
109  virtual void Db_SetQueueWaterMark(bool high, size_t queue_count,
110  DbQueueWaterMarkCb cb);
111  virtual void Db_ResetQueueWaterMarks();
112  // Stats
113  virtual bool Db_GetStats(std::vector<GenDb::DbTableInfo> *vdbti,
114  GenDb::DbErrors *dbe);
115  virtual bool Db_GetCumulativeStats(std::vector<GenDb::DbTableInfo> *vdbti,
116  GenDb::DbErrors *dbe) const;
117  virtual bool Db_GetCqlMetrics(Metrics *metrics) const;
118  virtual bool Db_GetCqlStats(DbStats *db_stats) const;
119  // Connection
120  virtual std::vector<GenDb::Endpoint> Db_GetEndpoints() const;
121 
122  private:
124  std::auto_ptr<GenDb::ColList> row,
125  std::string cfname, GenDb::GenDbIf::DbAddColumnCb cb);
127  std::auto_ptr<GenDb::ColList> row,
128  std::string cfname, GenDb::GenDbIf::DbGetRowCb cb);
130  std::auto_ptr<GenDb::ColList> row,
131  std::string cfname, GenDb::GenDbIf::DbGetRowCb cb,
132  bool use_worker, int task_id, int task_instance);
133  void IncrementTableWriteStats(const std::string &table_name);
134  void IncrementTableWriteStats(const std::string &table_name,
135  uint64_t num_writes);
136  void IncrementTableWriteFailStats(const std::string &table_name);
137  void IncrementTableWriteFailStats(const std::string &table_name,
138  uint64_t num_writes);
140  const std::string &table_name);
141  void IncrementTableReadStats(const std::string &table_name);
142  void IncrementTableReadStats(const std::string &table_name,
143  uint64_t num_reads);
144  void IncrementTableReadFailStats(const std::string &table_name);
145  void IncrementTableReadFailStats(const std::string &table_name,
146  uint64_t num_reads);
148  const std::string &table_name);
149  void IncrementErrors(GenDb::IfErrors::Type err_type);
150 
151  boost::scoped_ptr<interface::CassLibrary> cci_;
152  boost::scoped_ptr<CqlIfImpl> impl_;
153  std::atomic<bool> initialized_;
154  std::vector<GenDb::Endpoint> endpoints_;
155  mutable std::mutex stats_mutex_;
159 };
160 
161 } // namespace cql
162 } // namespace cass
163 
164 #endif // DATABASE_CASSANDRA_CQL_CQL_IF_H_
boost::function< void(size_t)> DbQueueWaterMarkCb
Definition: gendb_if.h:253
boost::function< void(DbOpResult::type, std::auto_ptr< ColList >)> DbGetRowCb
Definition: gendb_if.h:256
boost::function< void(DbOpResult::type)> DbAddColumnCb
Definition: gendb_if.h:254
boost::scoped_ptr< CqlIfImpl > impl_
Definition: cql_if.h:152
boost::scoped_ptr< interface::CassLibrary > cci_
Definition: cql_if.h:151
bool create_schema_
Definition: cql_if.h:158
void IncrementTableWriteStats(const std::string &table_name)
Definition: cql_if.cc:2995
std::mutex stats_mutex_
Definition: cql_if.h:155
virtual void Db_SetQueueWaterMark(bool high, size_t queue_count, DbQueueWaterMarkCb cb)
Definition: cql_if.cc:2955
virtual bool Db_GetMultiRow(GenDb::ColListVec *out, const std::string &cfname, const std::vector< GenDb::DbDataValueVec > &v_rowkey)
Definition: cql_if.cc:2874
virtual bool Db_GetCumulativeStats(std::vector< GenDb::DbTableInfo > *vdbti, GenDb::DbErrors *dbe) const
Definition: cql_if.cc:2972
virtual bool Db_GetRow(GenDb::ColList *out, const std::string &cfname, const GenDb::DbDataValueVec &rowkey, GenDb::DbConsistency::type dconsistency)
Definition: cql_if.cc:2842
virtual bool Db_CreateIndex(const std::string &cfname, const std::string &column, const std::string &indexname, const GenDb::ColIndexMode::type index_mode=GenDb::ColIndexMode::NONE)
Definition: cql_if.cc:2641
virtual void Db_SetInitDone(bool)
Definition: cql_if.cc:2563
virtual bool Db_GetCqlMetrics(Metrics *metrics) const
Definition: cql_if.cc:2979
GenDb::GenDbIfStats stats_
Definition: cql_if.h:156
virtual bool Db_AddSetTablespace(const std::string &tablespace, const std::string &replication_factor="1")
Definition: cql_if.cc:2575
virtual void Db_ResetQueueWaterMarks()
Definition: cql_if.cc:2960
virtual bool Db_GetCqlStats(DbStats *db_stats) const
Definition: cql_if.cc:2983
void IncrementErrors(GenDb::IfErrors::Type err_type)
Definition: cql_if.cc:3051
virtual bool Db_GetRowAsync(const std::string &cfname, const GenDb::DbDataValueVec &rowkey, GenDb::DbConsistency::type dconsistency, GenDb::GenDbIf::DbGetRowCb cb)
Definition: cql_if.cc:2797
void IncrementTableWriteFailStats(const std::string &table_name)
Definition: cql_if.cc:3006
virtual bool Db_AddColumnfamily(const GenDb::NewCf &cf, const std::string &compaction_strategy)
Definition: cql_if.cc:2602
virtual bool Db_GetAllRows(GenDb::ColListVec *out, const std::string &cfname, GenDb::DbConsistency::type dconsistency)
Definition: cql_if.cc:2935
virtual std::vector< GenDb::Endpoint > Db_GetEndpoints() const
Definition: cql_if.cc:3057
virtual bool Db_AddColumn(std::auto_ptr< GenDb::ColList > cl, GenDb::DbConsistency::type dconsistency, GenDb::GenDbIf::DbAddColumnCb cb)
Definition: cql_if.cc:2724
virtual bool Db_AddColumnSync(std::auto_ptr< GenDb::ColList > cl, GenDb::DbConsistency::type dconsistency)
Definition: cql_if.cc:2753
void IncrementTableReadFailStats(const std::string &table_name)
Definition: cql_if.cc:3040
virtual void Db_Uninit()
Definition: cql_if.cc:2556
void IncrementTableReadBackPressureFailStats(const std::string &table_name)
Definition: cql_if.cc:3023
virtual ~CqlIf()
Definition: cql_if.cc:2541
virtual bool Db_GetQueueStats(uint64_t *queue_count, uint64_t *enqueues) const
Definition: cql_if.cc:2949
virtual bool Db_SetTablespace(const std::string &tablespace)
Definition: cql_if.cc:2592
void IncrementTableWriteBackPressureFailStats(const std::string &table_name)
Definition: cql_if.cc:3017
void OnAsyncColumnAddCompletion(GenDb::DbOpResult::type drc, std::auto_ptr< GenDb::ColList > row, std::string cfname, GenDb::GenDbIf::DbAddColumnCb cb)
Definition: cql_if.cc:2655
virtual bool Db_GetStats(std::vector< GenDb::DbTableInfo > *vdbti, GenDb::DbErrors *dbe)
Definition: cql_if.cc:2965
void OnAsyncRowGetCompletion(GenDb::DbOpResult::type drc, std::auto_ptr< GenDb::ColList > row, std::string cfname, GenDb::GenDbIf::DbGetRowCb cb)
Definition: cql_if.cc:2719
std::vector< GenDb::Endpoint > endpoints_
Definition: cql_if.h:154
std::atomic< bool > initialized_
Definition: cql_if.h:153
virtual bool Db_Init()
Definition: cql_if.cc:2545
void IncrementTableReadStats(const std::string &table_name)
Definition: cql_if.cc:3029
bool use_prepared_for_insert_
Definition: cql_if.h:157
virtual bool Db_UseColumnfamily(const GenDb::NewCf &cf)
Definition: cql_if.cc:2623
static EventManager evm
uint8_t type
Definition: load_balance.h:2
std::vector< DbDataValue > DbDataValueVec
Definition: gendb_if.h:100
std::vector< FieldNamesToReadInfo > FieldNamesToReadVec
Definition: gendb_if.h:238
std::vector< WhereIndexInfo > WhereIndexInfoVec
Definition: gendb_if.h:233
boost::ptr_vector< ColList > ColListVec
Definition: gendb_if.h:208