blob: a5faa1b7134b542d2c16e2cb596e0f756adfd27e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#pragma once
#include <getopt.h>
#include <thread>
#include <iomanip>
#include <fstream>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>
#include <rocksdb/db.h>
#include "utils/filesystem.h"
#include "utils/output_utils.h"
#include "utils/string_conv.h"
#include "absl/strings/string_view.h"
#include "client/replication_ddl_client.h"
#include "tools/mutation_log_tool.h"
#include <rrdb/rrdb.code.definition.h>
#include <rrdb/rrdb_types.h>
#include <pegasus/version.h>
#include <pegasus/git_commit.h>
#include <pegasus/error.h>
#include "command_executor.h"
#include "command_helper.h"
#include "args.h"
using namespace dsn::replication;
using tp_alignment = ::dsn::utils::table_printer::alignment;
using tp_output_format = ::dsn::utils::table_printer::output_format;
static const char *INDENT = " ";
struct list_nodes_helper
{
std::string node_name;
std::string node_status;
int primary_count;
int secondary_count;
int64_t memused_res_mb;
int64_t block_cache_bytes;
int64_t mem_tbl_bytes;
int64_t mem_idx_bytes;
int64_t disk_available_total_ratio;
int64_t disk_available_min_ratio;
double get_qps;
double put_qps;
double multi_get_qps;
double batch_get_qps;
double multi_put_qps;
double get_p99;
double put_p99;
double multi_get_p99;
double batch_get_p99;
double multi_put_p99;
double read_cu;
double write_cu;
list_nodes_helper(const std::string &n, const std::string &s)
: node_name(n),
node_status(s),
primary_count(0),
secondary_count(0),
memused_res_mb(0),
block_cache_bytes(0),
mem_tbl_bytes(0),
mem_idx_bytes(0),
disk_available_total_ratio(0),
disk_available_min_ratio(0),
get_qps(0.0),
put_qps(0.0),
multi_get_qps(0.0),
multi_put_qps(0.0),
get_p99(0.0),
put_p99(0.0),
multi_get_p99(0.0),
multi_put_p99(0.0),
read_cu(0.0),
write_cu(0.0)
{
}
};
// == miscellaneous (see 'commands/misc.cpp') == //
bool help_info(command_executor *e, shell_context *sc, arguments args);
bool version(command_executor *e, shell_context *sc, arguments args);
bool exit_shell(command_executor *e, shell_context *sc, arguments args);
// == global properties (see 'commands/global_properties.cpp') == //
bool use_app_as_current(command_executor *e, shell_context *sc, arguments args);
bool process_escape_all(command_executor *e, shell_context *sc, arguments args);
bool process_timeout(command_executor *e, shell_context *sc, arguments args);
bool cc_command(command_executor *e, shell_context *sc, arguments args);
// == node management (see 'commands/node_management.cpp') == //
bool query_cluster_info(command_executor *e, shell_context *sc, arguments args);
bool ls_nodes(command_executor *e, shell_context *sc, arguments args);
bool server_info(command_executor *e, shell_context *sc, arguments args);
bool server_stat(command_executor *e, shell_context *sc, arguments args);
bool remote_command(command_executor *e, shell_context *sc, arguments args);
bool flush_log(command_executor *e, shell_context *sc, arguments args);
// == table management (see 'commands/table_management.cpp') == //
bool ls_apps(command_executor *e, shell_context *sc, arguments args);
bool query_app(command_executor *e, shell_context *sc, arguments args);
bool app_disk(command_executor *e, shell_context *sc, arguments args);
bool app_stat(command_executor *e, shell_context *sc, arguments args);
bool create_app(command_executor *e, shell_context *sc, arguments args);
bool drop_app(command_executor *e, shell_context *sc, arguments args);
bool recall_app(command_executor *e, shell_context *sc, arguments args);
bool rename_app(command_executor *e, shell_context *sc, arguments args);
bool get_app_envs(command_executor *e, shell_context *sc, arguments args);
bool set_app_envs(command_executor *e, shell_context *sc, arguments args);
bool del_app_envs(command_executor *e, shell_context *sc, arguments args);
bool clear_app_envs(command_executor *e, shell_context *sc, arguments args);
bool get_max_replica_count(command_executor *e, shell_context *sc, arguments args);
bool set_max_replica_count(command_executor *e, shell_context *sc, arguments args);
// == data operations (see 'commands/data_operations.cpp') == //
bool data_operations(command_executor *e, shell_context *sc, arguments args);
bool set_value(command_executor *e, shell_context *sc, arguments args);
bool multi_set_value(command_executor *e, shell_context *sc, arguments args);
bool get_value(command_executor *e, shell_context *sc, arguments args);
bool multi_get_value(command_executor *e, shell_context *sc, arguments args);
bool multi_get_range(command_executor *e, shell_context *sc, arguments args);
bool multi_get_sortkeys(command_executor *e, shell_context *sc, arguments args);
bool delete_value(command_executor *e, shell_context *sc, arguments args);
bool multi_del_value(command_executor *e, shell_context *sc, arguments args);
bool multi_del_range(command_executor *e, shell_context *sc, arguments args);
bool incr(command_executor *e, shell_context *sc, arguments args);
bool check_and_set(command_executor *e, shell_context *sc, arguments args);
bool check_and_mutate(command_executor *e, shell_context *sc, arguments args);
bool exist(command_executor *e, shell_context *sc, arguments args);
bool sortkey_count(command_executor *e, shell_context *sc, arguments args);
bool get_ttl(command_executor *e, shell_context *sc, arguments args);
bool calculate_hash_value(command_executor *e, shell_context *sc, arguments args);
bool hash_scan(command_executor *e, shell_context *sc, arguments args);
bool full_scan(command_executor *e, shell_context *sc, arguments args);
bool copy_data(command_executor *e, shell_context *sc, arguments args);
bool clear_data(command_executor *e, shell_context *sc, arguments args);
bool count_data(command_executor *e, shell_context *sc, arguments args);
// == load balancing(see 'commands/rebalance.cpp') == //
bool set_meta_level(command_executor *e, shell_context *sc, arguments args);
bool get_meta_level(command_executor *e, shell_context *sc, arguments args);
bool propose(command_executor *e, shell_context *sc, arguments args);
bool balance(command_executor *e, shell_context *sc, arguments args);
// == data recovery(see 'commands/recovery.cpp') == //
bool recover(command_executor *e, shell_context *sc, arguments args);
bool ddd_diagnose(command_executor *e, shell_context *sc, arguments args);
// == cold backup (see 'commands/cold_backup.cpp') == //
bool add_backup_policy(command_executor *e, shell_context *sc, arguments args);
bool ls_backup_policy(command_executor *e, shell_context *sc, arguments args);
bool modify_backup_policy(command_executor *e, shell_context *sc, arguments args);
bool disable_backup_policy(command_executor *e, shell_context *sc, arguments args);
bool enable_backup_policy(command_executor *e, shell_context *sc, arguments args);
bool restore(command_executor *e, shell_context *sc, arguments args);
bool query_backup_policy(command_executor *e, shell_context *sc, arguments args);
bool query_restore_status(command_executor *e, shell_context *sc, arguments args);
// == debugger (see 'commands/debugger.cpp') == //Debugging tool
bool sst_dump(command_executor *e, shell_context *sc, arguments args);
bool mlog_dump(command_executor *e, shell_context *sc, arguments args);
bool local_get(command_executor *e, shell_context *sc, arguments args);
bool rdb_key_hex2str(command_executor *e, shell_context *sc, arguments args);
bool rdb_key_str2hex(command_executor *e, shell_context *sc, arguments args);
bool rdb_value_hex2str(command_executor *e, shell_context *sc, arguments args);
// == duplication (see 'commands/duplication.cpp') == //
bool add_dup(command_executor *e, shell_context *sc, arguments args);
bool query_dup(command_executor *e, shell_context *sc, arguments args);
bool remove_dup(command_executor *e, shell_context *sc, arguments args);
bool start_dup(command_executor *e, shell_context *sc, arguments args);
bool pause_dup(command_executor *e, shell_context *sc, arguments args);
bool set_dup_fail_mode(command_executor *e, shell_context *sc, arguments args);
// == bulk load (see 'commands/bulk_load.cpp') == //
bool start_bulk_load(command_executor *e, shell_context *sc, arguments args);
bool query_bulk_load_status(command_executor *e, shell_context *sc, arguments args);
bool pause_bulk_load(command_executor *e, shell_context *sc, arguments args);
bool restart_bulk_load(command_executor *e, shell_context *sc, arguments args);
bool cancel_bulk_load(command_executor *e, shell_context *sc, arguments args);
bool clear_bulk_load(command_executor *e, shell_context *sc, arguments args);
// == detect hotkey (see 'commands/detect_hotkey.cpp') == //
bool detect_hotkey(command_executor *e, shell_context *sc, arguments args);