Avoid including protobuf & grpc headers in our interface files.
Signed-off-by: Tao He <sighingnow@gmail.com>
This commit is contained in:
parent
0b9a4f36ce
commit
e80709418b
|
|
@ -88,12 +88,9 @@ endif()
|
|||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
add_subdirectory(src)
|
||||
|
||||
if (BUILD_ETCD_TESTS)
|
||||
enable_testing()
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(tst)
|
||||
endif ()
|
||||
|
||||
install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/etcd/Client.hpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/etcd/KeepAlive.hpp
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
#include <mutex>
|
||||
#include <string>
|
||||
|
||||
#include <grpc++/grpc++.h>
|
||||
#include "pplx/pplxtasks.h"
|
||||
|
||||
#include "etcd/Response.hpp"
|
||||
|
|
@ -18,6 +17,10 @@ namespace etcdv3 {
|
|||
}
|
||||
}
|
||||
|
||||
namespace grpc {
|
||||
class Channel;
|
||||
}
|
||||
|
||||
namespace etcd
|
||||
{
|
||||
class KeepAlive;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
#include "pplx/pplxtasks.h"
|
||||
|
||||
#include "etcd/Value.hpp"
|
||||
#include "kv.pb.h"
|
||||
|
||||
namespace etcdv3 {
|
||||
class AsyncWatchAction;
|
||||
|
|
@ -138,7 +137,7 @@ namespace etcd
|
|||
/**
|
||||
* Returns the watched events.
|
||||
*/
|
||||
std::vector<mvccpb::Event> const & events() const;
|
||||
std::vector<Event> const & events() const;
|
||||
|
||||
/**
|
||||
* Returns the duration of request execution in microseconds.
|
||||
|
|
@ -158,7 +157,7 @@ namespace etcd
|
|||
Values _values;
|
||||
Keys _keys;
|
||||
std::string _lock_key; // for lock
|
||||
std::vector<mvccpb::Event> _events; // for watch
|
||||
std::vector<Event> _events; // for watch
|
||||
std::chrono::microseconds _duration; // execute duration (in microseconds), during the action created and response parsed
|
||||
friend class SyncClient;
|
||||
friend class etcdv3::AsyncWatchAction;
|
||||
|
|
|
|||
|
|
@ -8,8 +8,17 @@ namespace etcdv3 {
|
|||
class KeyValue;
|
||||
}
|
||||
|
||||
namespace mvccpb {
|
||||
class KeyValue;
|
||||
class Event;
|
||||
}
|
||||
|
||||
namespace etcd
|
||||
{
|
||||
class Value;
|
||||
class Event;
|
||||
class Response;
|
||||
|
||||
/**
|
||||
* Represents a value object received from the etcd server
|
||||
*/
|
||||
|
|
@ -54,8 +63,12 @@ namespace etcd
|
|||
friend class BaseResponse; //deliberately done since Value class will be removed during full V3
|
||||
friend class DeleteRpcResponse;
|
||||
friend class AsyncDeleteResponse;
|
||||
|
||||
friend class Event;
|
||||
|
||||
Value();
|
||||
Value(etcdv3::KeyValue const & kvs);
|
||||
Value(mvccpb::KeyValue const & kvs);
|
||||
std::string _key;
|
||||
bool dir;
|
||||
std::string value;
|
||||
|
|
@ -66,6 +79,38 @@ namespace etcd
|
|||
};
|
||||
|
||||
typedef std::vector<Value> Values;
|
||||
|
||||
class Event
|
||||
{
|
||||
public:
|
||||
enum class EventType {
|
||||
PUT,
|
||||
DELETE_,
|
||||
INVALID,
|
||||
};
|
||||
|
||||
enum EventType event_type() const;
|
||||
|
||||
bool has_kv() const;
|
||||
|
||||
bool has_prev_kv() const;
|
||||
|
||||
const Value &kv() const;
|
||||
|
||||
const Value &prev_kv() const;
|
||||
|
||||
protected:
|
||||
friend class Response;
|
||||
|
||||
Event(mvccpb::Event const & event);
|
||||
|
||||
private:
|
||||
enum EventType event_type_;
|
||||
Value _kv, _prev_kv;
|
||||
bool _has_kv, _has_prev_kv;
|
||||
};
|
||||
|
||||
typedef std::vector<Event> Events;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
etcd::Response::Response(const etcdv3::V3Response& reply, std::chrono::microseconds const& duration)
|
||||
{
|
||||
_index = reply.get_index();
|
||||
|
|
@ -27,7 +26,9 @@ etcd::Response::Response(const etcdv3::V3Response& reply, std::chrono::microseco
|
|||
_prev_value = Value(reply.get_prev_value());
|
||||
|
||||
_lock_key = reply.get_lock_key();
|
||||
_events = reply.get_events();
|
||||
for (auto const &ev: reply.get_events()) {
|
||||
_events.emplace_back(etcd::Event(ev));
|
||||
}
|
||||
|
||||
// duration
|
||||
_duration = duration;
|
||||
|
|
@ -111,7 +112,7 @@ std::string const & etcd::Response::lock_key() const {
|
|||
return _lock_key;
|
||||
}
|
||||
|
||||
std::vector<mvccpb::Event> const & etcd::Response::events() const {
|
||||
std::vector<etcd::Event> const & etcd::Response::events() const {
|
||||
return this->_events;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,17 @@ etcd::Value::Value(etcdv3::KeyValue const & kv)
|
|||
_ttl = kv.get_ttl();
|
||||
}
|
||||
|
||||
etcd::Value::Value(mvccpb::KeyValue const & kv)
|
||||
{
|
||||
dir = false;
|
||||
_key = kv.key();
|
||||
value = kv.value();
|
||||
created = kv.create_revision();
|
||||
modified = kv.mod_revision();
|
||||
leaseId = kv.lease();
|
||||
_ttl = -1;
|
||||
}
|
||||
|
||||
std::string const & etcd::Value::key() const
|
||||
{
|
||||
return _key;
|
||||
|
|
@ -58,3 +69,41 @@ int64_t etcd::Value::lease() const
|
|||
{
|
||||
return leaseId;
|
||||
}
|
||||
|
||||
etcd::Event::Event(mvccpb::Event const & event) {
|
||||
_has_kv = event.has_kv();
|
||||
_has_prev_kv = event.has_prev_kv();
|
||||
if (_has_kv) {
|
||||
_kv = Value(event.kv());
|
||||
}
|
||||
if (_has_prev_kv) {
|
||||
_prev_kv = Value(event.prev_kv());
|
||||
}
|
||||
if (event.type() == mvccpb::Event::PUT) {
|
||||
event_type_ = EventType::PUT;
|
||||
} else if (event.type() == mvccpb::Event::DELETE_) {
|
||||
event_type_ = EventType::DELETE_;
|
||||
} else {
|
||||
event_type_ = EventType::INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
enum etcd::Event::EventType etcd::Event::event_type() const {
|
||||
return event_type_;
|
||||
}
|
||||
|
||||
bool etcd::Event::has_kv() const {
|
||||
return _has_kv;
|
||||
}
|
||||
|
||||
bool etcd::Event::has_prev_kv() const {
|
||||
return _has_prev_kv;
|
||||
}
|
||||
|
||||
const etcd::Value &etcd::Event::kv() const {
|
||||
return _kv;
|
||||
}
|
||||
|
||||
const etcd::Value &etcd::Event::prev_kv() const {
|
||||
return _prev_kv;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,11 @@ foreach(testfile ${TEST_FILES})
|
|||
string(REGEX MATCH "^(.*)\\.[^.]*$" dummy ${testfile})
|
||||
set(test_name ${CMAKE_MATCH_1})
|
||||
message(STATUS "Found unit_test - " ${test_name})
|
||||
if(BUILD_ETCD_TESTS)
|
||||
add_executable(${test_name} ${CMAKE_CURRENT_SOURCE_DIR}/${testfile})
|
||||
else()
|
||||
add_executable(${test_name} EXCLUDE_FROM_ALL ${CMAKE_CURRENT_SOURCE_DIR}/${testfile})
|
||||
endif()
|
||||
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
|
||||
|
||||
set_property(TARGET ${test_name} PROPERTY CXX_STANDARD 11)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,14 @@ void printResponse(etcd::Response const & resp)
|
|||
{
|
||||
std::cout << resp.action() << " " << resp.value().as_string() << std::endl;
|
||||
std::cout << "Previous value: " << resp.prev_value().as_string() << std::endl;
|
||||
|
||||
std::cout << "Events size: " << resp.events().size() << std::endl;
|
||||
for (auto const &ev: resp.events()) {
|
||||
std::cout << "Value change in events: " << static_cast<int>(ev.event_type())
|
||||
<< ", prev kv = " << ev.prev_kv().key() << " -> " << ev.prev_kv().as_string()
|
||||
<< ", kv = " << ev.kv().key() << " -> " << ev.kv().as_string()
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue