Fixed bug when only one key is returned during ls().
Instead of placing it in response::value it should be placed in reponse::values
This commit is contained in:
parent
79f28dce20
commit
dd1d01519c
|
|
@ -10,7 +10,7 @@ etcd::Response::Response(const etcdv3::V3Response& reply)
|
||||||
_error_message = reply.error_message;
|
_error_message = reply.error_message;
|
||||||
_action = reply.action;
|
_action = reply.action;
|
||||||
int size = reply.values.size();
|
int size = reply.values.size();
|
||||||
if(size > 1)
|
if(reply.isPrefix)
|
||||||
{
|
{
|
||||||
for(int index = 0; index < size; index++)
|
for(int index = 0; index < size; index++)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -189,10 +189,16 @@ TEST_CASE("list a directory")
|
||||||
CHECK(0 == etcd.ls("/test/new_dir").get().keys().size());
|
CHECK(0 == etcd.ls("/test/new_dir").get().keys().size());
|
||||||
|
|
||||||
etcd.set("/test/new_dir/key1", "value1").wait();
|
etcd.set("/test/new_dir/key1", "value1").wait();
|
||||||
|
etcd::Response resp = etcd.ls("/test/new_dir").get();
|
||||||
|
CHECK("get" == resp.action());
|
||||||
|
REQUIRE(1 == resp.keys().size());
|
||||||
|
CHECK("/test/new_dir/key1" == resp.key(0));
|
||||||
|
CHECK("value1" == resp.value(0).as_string());
|
||||||
|
|
||||||
etcd.set("/test/new_dir/key2", "value2").wait();
|
etcd.set("/test/new_dir/key2", "value2").wait();
|
||||||
etcd.set("/test/new_dir/sub_dir", "value3").wait();
|
etcd.set("/test/new_dir/sub_dir", "value3").wait();
|
||||||
|
|
||||||
etcd::Response resp = etcd.ls("/test/new_dir").get();
|
resp = etcd.ls("/test/new_dir").get();
|
||||||
CHECK("get" == resp.action());
|
CHECK("get" == resp.action());
|
||||||
REQUIRE(3 == resp.keys().size());
|
REQUIRE(3 == resp.keys().size());
|
||||||
CHECK("/test/new_dir/key1" == resp.key(0));
|
CHECK("/test/new_dir/key1" == resp.key(0));
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ namespace etcdv3
|
||||||
AsyncRangeResponse ParseResponse();
|
AsyncRangeResponse ParseResponse();
|
||||||
RangeResponse reply;
|
RangeResponse reply;
|
||||||
std::unique_ptr<ClientAsyncResponseReader<RangeResponse>> response_reader;
|
std::unique_ptr<ClientAsyncResponseReader<RangeResponse>> response_reader;
|
||||||
|
bool prefix;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,10 @@ namespace etcdv3
|
||||||
class V3Response
|
class V3Response
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
V3Response(): error_code(0), index(0) {};
|
V3Response(): error_code(0), index(0), isPrefix(false) {};
|
||||||
int error_code;
|
int error_code;
|
||||||
int index;
|
int index;
|
||||||
|
bool isPrefix;
|
||||||
std::string error_message;
|
std::string error_message;
|
||||||
std::string action;
|
std::string action;
|
||||||
std::vector<mvccpb::KeyValue> values;
|
std::vector<mvccpb::KeyValue> values;
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ etcdv3::AsyncGetAction::AsyncGetAction(std::string const & key, KV::Stub* stub_,
|
||||||
get_request.set_key(key);
|
get_request.set_key(key);
|
||||||
if(withPrefix)
|
if(withPrefix)
|
||||||
{
|
{
|
||||||
|
prefix = withPrefix;
|
||||||
std::string range_end(key);
|
std::string range_end(key);
|
||||||
int ascii = (int)range_end[range_end.length()-1];
|
int ascii = (int)range_end[range_end.length()-1];
|
||||||
range_end.back() = ascii+1;
|
range_end.back() = ascii+1;
|
||||||
|
|
@ -35,6 +36,7 @@ etcdv3::AsyncRangeResponse etcdv3::AsyncGetAction::ParseResponse()
|
||||||
{
|
{
|
||||||
range_resp.ParseResponse();
|
range_resp.ParseResponse();
|
||||||
range_resp.action = etcdv3::GET_ACTION;
|
range_resp.action = etcdv3::GET_ACTION;
|
||||||
|
range_resp.isPrefix = prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
return range_resp;
|
return range_resp;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue