in service/tools/kv/api_tools/kv_service_tools.cpp [120:280]
int main(int argc, char** argv) {
std::string key;
int version = -1;
int option_index = 0;
int min_version = -1, max_version = -1;
std::string min_key, max_key;
std::string value;
std::string client_config_file;
int top = 0;
char c;
std::string cmd;
if (argc >= 3) {
cmd = argv[2];
if (cmd == "get" || cmd == "set" || cmd == "getvalues" ||
cmd == "getrange") {
OldAPI(argv);
return 0;
}
}
while ((c = getopt_long(argc, argv, "h", long_options, &option_index)) !=
-1) {
switch (c) {
case 'c':
client_config_file = optarg;
break;
case 'f':
cmd = optarg;
break;
case 'K':
key = optarg;
break;
case 'V':
value = optarg;
break;
case 'v':
version = strtoull(optarg, NULL, 10);
break;
case 's':
min_version = strtoull(optarg, NULL, 10);
break;
case 'S':
max_version = strtoull(optarg, NULL, 10);
break;
case 'y':
min_key = optarg;
break;
case 'Y':
max_key = optarg;
break;
case 't':
top = strtoull(optarg, NULL, 10);
break;
case 'h':
ShowUsage();
break;
}
}
ResDBConfig config = GenerateResDBConfig(client_config_file);
config.SetClientTimeoutMs(100000);
KVClient client(config);
if (cmd == "set_with_version") {
if (key.empty() || value.empty() || version < 0) {
ShowUsage();
return 0;
}
int ret = client.Set(key, value, version);
printf("set key = %s, value = %s, version = %d done, ret = %d\n",
key.c_str(), value.c_str(), version, ret);
if (ret == 0) {
usleep(100000);
auto res = client.Get(key, 0);
if (res != nullptr) {
printf("current value = %s\n", res->DebugString().c_str());
} else {
printf("get value fail\n");
}
}
} else if (cmd == "set") {
if (key.empty() || value.empty()) {
ShowUsage();
return 0;
}
int ret = client.Set(key, value);
printf("set key = %s, value = %s done, ret = %d\n", key.c_str(),
value.c_str(), ret);
} else if (cmd == "get_with_version") {
auto res = client.Get(key, version);
if (res != nullptr) {
printf("get key = %s, value = %s\n", key.c_str(),
res->DebugString().c_str());
} else {
printf("get value fail\n");
}
} else if (cmd == "get") {
auto res = client.Get(key);
if (res != nullptr) {
printf("get key = %s value = %s\n", key.c_str(), res->c_str());
} else {
printf("get value fail\n");
}
} else if (cmd == "get_top") {
auto res = client.GetKeyTopHistory(key, top);
if (res != nullptr) {
printf("key = %s, top %d\n value = %s\n", key.c_str(), top,
res->DebugString().c_str());
} else {
printf("get key = %s top %d value fail\n", key.c_str(), top);
}
} else if (cmd == "get_history") {
if (key.empty() || min_version < 0 || max_version < 0 ||
max_version < min_version) {
ShowUsage();
return 0;
}
auto res = client.GetKeyHistory(key, min_version, max_version);
if (res != nullptr) {
printf(
"get history key = %s, min version = %d, max version = %d\n value = "
"%s\n",
key.c_str(), min_version, max_version, res->DebugString().c_str());
} else {
printf(
"get history key = %s, min version = %d, max version = %d value "
"fail\n",
key.c_str(), min_version, max_version);
}
} else if (cmd == "get_key_range") {
if (min_key.empty() || max_key.empty() || min_key > max_key) {
ShowUsage();
return 0;
}
auto res = client.GetRange(min_key, max_key);
if (res != nullptr) {
printf("getrange min key = %s, max key = %s\n value = %s\n",
min_key.c_str(), max_key.c_str(), (*res).c_str());
} else {
printf("getrange value fail, min key = %s, max key = %s\n",
min_key.c_str(), max_key.c_str());
}
} else if (cmd == "get_key_range_with_version") {
if (min_key.empty() || max_key.empty() || min_key > max_key) {
ShowUsage();
return 0;
}
printf("min key = %s max key = %s\n", min_key.c_str(), max_key.c_str());
auto res = client.GetKeyRange(min_key, max_key);
if (res != nullptr) {
printf("getrange min key = %s, max key = %s\n value = %s\n",
min_key.c_str(), max_key.c_str(), res->DebugString().c_str());
} else {
printf("getrange value fail, min key = %s, max key = %s\n",
min_key.c_str(), max_key.c_str());
}
} else {
ShowUsage();
}
}