OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
eql_if.h
Go to the documentation of this file.
1 #ifndef DATABASE_ETCD_ETCDQL_IF_H_
2 #define DATABASE_ETCD_ETCDQL_IF_H_
3 
4 #include <string>
5 #include <boost/asio/ip/tcp.hpp>
6 #include <grpc++/grpc++.h>
7 #include <boost/function.hpp>
8 #include "proto/rpc.grpc.pb.h"
9 #include "proto/kv.pb.h"
10 
11 using grpc::ClientContext;
12 using grpc::CompletionQueue;
13 using grpc::Status;
14 using grpc::ClientAsyncResponseReader;
15 using grpc::ClientAsyncReaderWriter;
16 
17 using etcdserverpb::KV;
24 
25 namespace etcd {
26 namespace etcdql {
27 
28 typedef boost::asio::ip::tcp::endpoint Endpoint;
29 
30 class EtcdResponse;
31 
40 class EtcdIf {
41 public:
45  typedef boost::function<void (const EtcdResponse& Resp)> WatchCb;
46 
52  EtcdIf(const std::vector<std::string> &etcd_hosts,
53  const int port, bool useSsl);
54 
55  virtual ~EtcdIf();
56 
60  virtual bool Connect();
61 
69  virtual EtcdResponse Get(const std::string &key,
70  const std::string &range_end,
71  int limit);
72 
80  virtual void Set(const std::string &key,
81  const std::string &value);
82 
90  virtual void Delete(const std::string &key,
91  const std::string &range_end);
92 
99  virtual void Watch(const std::string &key,
100  WatchCb cb);
101 
105  virtual void StopWatch();
106 
107  int port() const { return port_; }
108  std::vector<Endpoint> endpoints() const { return endpoints_; }
109  std::vector<std::string> hosts() const { return hosts_; }
110 
111 private:
115  std::vector<Endpoint> endpoints_;
116  std::vector<std::string> hosts_;
117  int port_;
118  bool useSsl_;
119  std::unique_ptr<KV::Stub> kv_stub_;
120  std::unique_ptr<Watch::Stub> watch_stub_;
121 
125  struct EtcdAsyncCall {
126  Status status_;
127  ClientContext ctx_;
128  CompletionQueue cq_;
129  };
130 
134  struct EtcdAsyncGetCall : public EtcdAsyncCall {
135  std::unique_ptr<ClientAsyncResponseReader<RangeResponse>> get_reader_;
136  int gtag_;
139  };
140  std::unique_ptr<EtcdAsyncGetCall> get_call_;
141 
146  struct EtcdAsyncSetCall : public EtcdAsyncCall {
147  std::unique_ptr<ClientAsyncResponseReader<PutResponse>> set_reader_;
149  };
150  std::unique_ptr<EtcdAsyncSetCall> set_call_;
151 
157  std::unique_ptr<ClientAsyncResponseReader<DeleteRangeResponse>> delete_reader_;
159  };
160  std::unique_ptr<EtcdAsyncDeleteCall> delete_call_;
161 
166  std::unique_ptr<ClientAsyncReaderWriter<WatchRequest,WatchResponse>> watch_reader_;
168  int wtag;
170  void WaitForWatchResponse(WatchCb cb);
171  };
172  std::unique_ptr<EtcdAsyncWatchCall> watch_call_;
173 };
174 
175 typedef enum {
180 } WatchAction;
181 
187 public:
188  typedef std::multimap<std::string, std::string> kv_map;
189 
191  : ec_(0) {};
192 
193  int err_code() const { return ec_; }
194  void set_err_code(int code) {
195  ec_ = code;
196  }
197 
198  const std::string& err_msg() const { return msg_; }
199  void set_err_msg(std::string msg) {
200  msg_ = msg;
201  }
202 
203  int revision() const { return revision_; }
204  void set_revision (int revision) {
206  }
207 
208  WatchAction action() const { return action_; }
210  action_ = action;
211  }
212 
213  const std::string& key() const { return key_; }
214  void set_key(std::string key) {
215  key_ = key;
216  }
217 
218  const std::string& value() const { return val_; }
219  void set_val(std::string val) {
220  val_ = val;
221  }
222 
223  const std::string& prev_key() const { return prev_key_; }
224  void set_prev_key(std::string prev_key) {
226  }
227 
228  const std::string& prev_value() const { return prev_val_; }
229  void set_prev_val(std::string prev_val) {
230  prev_val_ = prev_val;
231  }
232 
233  const kv_map& kvmap() const { return kv_map_; }
234  void set_kv_map(kv_map kvs) {
235  kv_map_ = kvs;
236  }
237 
238 private:
239  int ec_;
240  std::string msg_;
242  std::string key_;
243  std::string val_;
244  std::string prev_key_;
245  std::string prev_val_;
248 };
249 
250 } //namespace etcdql
251 } //namespace etcd
252 #endif
std::vector< Endpoint > endpoints() const
Definition: eql_if.h:108
const std::string & prev_value() const
Definition: eql_if.h:228
std::unique_ptr< Watch::Stub > watch_stub_
Definition: eql_if.h:120
void set_err_msg(std::string msg)
Definition: eql_if.h:199
WatchAction action() const
Definition: eql_if.h:208
std::unique_ptr< ClientAsyncResponseReader< PutResponse > > set_reader_
Definition: eql_if.h:147
const std::string & prev_key() const
Definition: eql_if.h:223
virtual EtcdResponse Get(const std::string &key, const std::string &range_end, int limit)
Definition: eql_if.cc:82
std::vector< std::string > hosts_
Definition: eql_if.h:116
const std::string & value() const
Definition: eql_if.h:218
std::unique_ptr< ClientAsyncResponseReader< RangeResponse > > get_reader_
Definition: eql_if.h:135
virtual ~EtcdIf()
Definition: eql_if.cc:51
virtual void Set(const std::string &key, const std::string &value)
Definition: eql_if.cc:190
std::unique_ptr< EtcdAsyncSetCall > set_call_
Definition: eql_if.h:150
virtual bool Connect()
Definition: eql_if.cc:54
const std::string & key() const
Definition: eql_if.h:213
void set_key(std::string key)
Definition: eql_if.h:214
void set_prev_val(std::string prev_val)
Definition: eql_if.h:229
std::string prev_key_
Definition: eql_if.h:244
virtual void StopWatch()
Definition: eql_if.cc:453
void set_revision(int revision)
Definition: eql_if.h:204
std::vector< std::string > hosts() const
Definition: eql_if.h:109
std::multimap< std::string, std::string > kv_map
Definition: eql_if.h:188
const std::string & err_msg() const
Definition: eql_if.h:198
void set_val(std::string val)
Definition: eql_if.h:219
int port() const
Definition: eql_if.h:107
void set_err_code(int code)
Definition: eql_if.h:194
const kv_map & kvmap() const
Definition: eql_if.h:233
int err_code() const
Definition: eql_if.h:193
void set_kv_map(kv_map kvs)
Definition: eql_if.h:234
EtcdIf(const std::vector< std::string > &etcd_hosts, const int port, bool useSsl)
Definition: eql_if.cc:31
std::unique_ptr< EtcdAsyncWatchCall > watch_call_
Definition: eql_if.h:172
virtual void Delete(const std::string &key, const std::string &range_end)
Definition: eql_if.cc:243
boost::function< void(const EtcdResponse &Resp)> WatchCb
Definition: eql_if.h:45
std::unique_ptr< ClientAsyncResponseReader< DeleteRangeResponse > > delete_reader_
Definition: eql_if.h:157
boost::asio::ip::tcp::endpoint Endpoint
Definition: eql_if.h:28
std::unique_ptr< EtcdAsyncGetCall > get_call_
Definition: eql_if.h:140
std::string prev_val_
Definition: eql_if.h:245
std::unique_ptr< ClientAsyncReaderWriter< WatchRequest, WatchResponse > > watch_reader_
Definition: eql_if.h:166
int revision() const
Definition: eql_if.h:203
std::vector< Endpoint > endpoints_
Definition: eql_if.h:115
void set_prev_key(std::string prev_key)
Definition: eql_if.h:224
std::unique_ptr< KV::Stub > kv_stub_
Definition: eql_if.h:119
std::unique_ptr< EtcdAsyncDeleteCall > delete_call_
Definition: eql_if.h:160
virtual void Watch(const std::string &key, WatchCb cb)
Definition: eql_if.cc:304
void set_action(WatchAction action)
Definition: eql_if.h:209