int main()

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();
  }
}