Set a proper upper bound for `ls` request, and remove the default sort options. (#46)
Signed-off-by: Tao He <linzhu.ht@alibaba-inc.com>
This commit is contained in:
parent
c9f82b46d4
commit
4f31000cf4
|
|
@ -1,23 +1,44 @@
|
||||||
#include "etcd/v3/AsyncGetAction.hpp"
|
#include "etcd/v3/AsyncGetAction.hpp"
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
#include "etcd/v3/action_constants.hpp"
|
#include "etcd/v3/action_constants.hpp"
|
||||||
|
|
||||||
using etcdserverpb::RangeRequest;
|
using etcdserverpb::RangeRequest;
|
||||||
|
|
||||||
|
static std::string string_plus_one(std::string const &value) {
|
||||||
|
char *s = static_cast<char *>(calloc(value.size() + 1, sizeof(char)));
|
||||||
|
std::memcpy(s, value.c_str(), value.size());
|
||||||
|
for (int i = value.size() - 1; i >= 0; --i) {
|
||||||
|
if (static_cast<unsigned char>(s[i]) < 0xff) {
|
||||||
|
s[i] = s[i] + 1;
|
||||||
|
std::string ret = std::string(s, i + 1);
|
||||||
|
free(s);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// see: noPrefixEnd in etcd
|
||||||
|
return {"\0"};
|
||||||
|
}
|
||||||
|
|
||||||
etcdv3::AsyncGetAction::AsyncGetAction(etcdv3::ActionParameters param)
|
etcdv3::AsyncGetAction::AsyncGetAction(etcdv3::ActionParameters param)
|
||||||
: etcdv3::Action(param)
|
: etcdv3::Action(param)
|
||||||
{
|
{
|
||||||
RangeRequest get_request;
|
RangeRequest get_request;
|
||||||
|
if (parameters.key.empty()) {
|
||||||
|
get_request.set_key("\0");
|
||||||
|
} else {
|
||||||
get_request.set_key(parameters.key);
|
get_request.set_key(parameters.key);
|
||||||
|
}
|
||||||
get_request.set_limit(param.limit);
|
get_request.set_limit(param.limit);
|
||||||
if(parameters.withPrefix)
|
if(parameters.withPrefix)
|
||||||
{
|
{
|
||||||
std::string range_end(parameters.key);
|
if (parameters.key.empty()) {
|
||||||
int ascii = (int)range_end[range_end.length()-1];
|
get_request.set_range_end(string_plus_one("\0"));
|
||||||
range_end.back() = ascii+1;
|
} else {
|
||||||
|
get_request.set_range_end(string_plus_one(parameters.key));
|
||||||
get_request.set_range_end(range_end);
|
}
|
||||||
get_request.set_sort_target(RangeRequest::SortTarget::RangeRequest_SortTarget_KEY);
|
get_request.set_sort_order(RangeRequest::SortOrder::RangeRequest_SortOrder_NONE);
|
||||||
get_request.set_sort_order(RangeRequest::SortOrder::RangeRequest_SortOrder_ASCEND);
|
|
||||||
}
|
}
|
||||||
response_reader = parameters.kv_stub->AsyncRange(&context,get_request,&cq_);
|
response_reader = parameters.kv_stub->AsyncRange(&context,get_request,&cq_);
|
||||||
response_reader->Finish(&reply, &status, (void*)this);
|
response_reader->Finish(&reply, &status, (void*)this);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue