diff --git a/src/Response.cpp b/src/Response.cpp index 41e2a49..4565dc0 100644 --- a/src/Response.cpp +++ b/src/Response.cpp @@ -41,7 +41,8 @@ etcd::Response::Response(const etcdv3::V3Response& reply) _value = Value(reply.values[0]); } - _prev_value = Value(reply.prev_value); + if(reply.prev_values.size() == 1) + _prev_value = Value(reply.prev_values[0]); } diff --git a/v3/include/V3Response.hpp b/v3/include/V3Response.hpp index eae7617..de17bbb 100644 --- a/v3/include/V3Response.hpp +++ b/v3/include/V3Response.hpp @@ -9,19 +9,13 @@ namespace etcdv3 class V3Response { public: - V3Response(): error_code(0), index(00) - { - prev_value.set_key(""); - prev_value.set_create_revision(0); - prev_value.set_mod_revision(0); - prev_value.set_value(""); - }; + V3Response(): error_code(0), index(0) {}; int error_code; std::string error_message; int index; std::string action; std::vector values; - mvccpb::KeyValue prev_value; + std::vector prev_values; }; } #endif diff --git a/v3/src/AsyncRangeResponse.cpp b/v3/src/AsyncRangeResponse.cpp index f306956..682c7a2 100644 --- a/v3/src/AsyncRangeResponse.cpp +++ b/v3/src/AsyncRangeResponse.cpp @@ -7,10 +7,7 @@ etcdv3::AsyncRangeResponse::AsyncRangeResponse(const etcdv3::AsyncRangeResponse& index = other.index; action = other.action; values = other.values; - prev_value.set_key(other.prev_value.key()); - prev_value.set_value(other.prev_value.value()); - prev_value.set_create_revision(other.prev_value.create_revision()); - prev_value.set_mod_revision(other.prev_value.mod_revision()); + prev_values = other.prev_values; } @@ -21,10 +18,7 @@ etcdv3::AsyncRangeResponse& etcdv3::AsyncRangeResponse::operator=(const etcdv3:: index = other.index; action = other.action; values = other.values; - prev_value.set_key(other.prev_value.key()); - prev_value.set_value(other.prev_value.value()); - prev_value.set_create_revision(other.prev_value.create_revision()); - prev_value.set_mod_revision(other.prev_value.mod_revision()); + prev_values = other.prev_values; return *this; } @@ -47,8 +41,6 @@ etcdv3::AsyncRangeResponse& etcdv3::AsyncRangeResponse::ParseResponse() for(int index=0; index < reply.kvs_size(); index++) { - std::cout << "key: " << reply.kvs(index).key() << std::endl; - std::cout << "value: " << reply.kvs(index).value()<< std::endl; values.push_back(reply.kvs(index)); } } diff --git a/v3/src/AsyncTxnResponse.cpp b/v3/src/AsyncTxnResponse.cpp index 9ca4626..f0a5c11 100644 --- a/v3/src/AsyncTxnResponse.cpp +++ b/v3/src/AsyncTxnResponse.cpp @@ -11,10 +11,7 @@ etcdv3::AsyncTxnResponse::AsyncTxnResponse(const etcdv3::AsyncTxnResponse& other index = other.index; action = other.action; values = other.values; - prev_value.set_key(other.prev_value.key()); - prev_value.set_value(other.prev_value.value()); - prev_value.set_create_revision(other.prev_value.create_revision()); - prev_value.set_mod_revision(other.prev_value.mod_revision()); + prev_values = other.prev_values; } @@ -25,10 +22,7 @@ etcdv3::AsyncTxnResponse& etcdv3::AsyncTxnResponse::operator=(const etcdv3::Asyn index = other.index; action = other.action; values = other.values; - prev_value.set_key(other.prev_value.key()); - prev_value.set_value(other.prev_value.value()); - prev_value.set_create_revision(other.prev_value.create_revision()); - prev_value.set_mod_revision(other.prev_value.mod_revision()); + prev_values = other.prev_values; return *this; } @@ -44,6 +38,7 @@ etcdv3::AsyncTxnResponse& etcdv3::AsyncTxnResponse::ParseResponse() else { std::vector range_kvs; + std::vector prev_range_kvs; for(int index=0; index < reply.responses_size(); index++) { auto resp = reply.responses(index); @@ -58,7 +53,8 @@ etcdv3::AsyncTxnResponse& etcdv3::AsyncTxnResponse::ParseResponse() if(!v3resp.values.empty()) { - range_kvs.insert(range_kvs.end(), v3resp.values.begin(), v3resp.values.end()); + prev_range_kvs=range_kvs; + range_kvs = v3resp.values; } } else if(ResponseOp::ResponseCase::kResponseDeleteRange == resp.response_case()) @@ -81,26 +77,15 @@ etcdv3::AsyncTxnResponse& etcdv3::AsyncTxnResponse::ParseResponse() } } - //find previous value of key - //retain only the last value gotten as the final value. - if(action == "set" || action == "create" || action == "compareAndSwap" || action == "update") - { - if(range_kvs.size() > 1) - { - prev_value = range_kvs.front(); - values.push_back(range_kvs.back()); - } - else - { - values = range_kvs; - } - } - else - { - values = range_kvs; - } - - } - + prev_values = prev_range_kvs; + + values = range_kvs; + + if(action == "delete") + { + prev_values = values; + } + + } return *this; }