empiredan commented on code in PR #914:
URL: https://github.com/apache/incubator-pegasus/pull/914#discussion_r890788648
##########
src/shell/commands/table_management.cpp:
##########
@@ -886,3 +888,105 @@ bool clear_app_envs(command_executor *e, shell_context
*sc, arguments args)
}
return true;
}
+
+bool get_max_replica_count(command_executor *e, shell_context *sc, arguments
args)
+{
+ if (args.argc < 2) {
+ return false;
+ }
+
+ std::string app_name(args.argv[1]);
+
+ auto err_resp = sc->ddl_client->get_max_replica_count(app_name);
+ auto err = err_resp.get_error();
+ const auto &resp = err_resp.get_value();
+
+ if (err.is_ok()) {
+ err = dsn::error_s::make(resp.err);
+ }
+
+ std::string escaped_app_name(pegasus::utils::c_escape_string(app_name));
+ if (err.is_ok()) {
+ fmt::print(stdout,
+ "the replica count of app({}) is {}\n",
+ escaped_app_name,
+ resp.max_replica_count);
+ } else {
+ fmt::print(stdout, "get replica count of app({}) failed: {}\n",
escaped_app_name, err);
+ }
+
+ return true;
+}
+
+bool set_max_replica_count(command_executor *e, shell_context *sc, arguments
args)
+{
+ if (args.argc < 3) {
+ return false;
+ }
+
+ int new_max_replica_count;
+ if (!dsn::buf2int32(args.argv[2], new_max_replica_count)) {
+ fmt::print(stderr, "parse {} as replica count failed\n", args.argv[2]);
+ return false;
+ }
+
+ if (new_max_replica_count < 1) {
+ fmt::print(stderr, "replica count should be >= 1\n");
+ return false;
+ }
+
+ std::string app_name(args.argv[1]);
+ std::string escaped_app_name(pegasus::utils::c_escape_string(app_name));
+ std::string action(fmt::format(
+ "set the replica count of app({}) to {}", escaped_app_name,
new_max_replica_count));
+ if (!confirm_unsafe_command(action)) {
+ return true;
+ }
+
+ auto err_resp = sc->ddl_client->set_max_replica_count(app_name,
new_max_replica_count);
+ auto err = err_resp.get_error();
+ const auto &resp = err_resp.get_value();
+
+ if (dsn_likely(err.is_ok())) {
+ err = dsn::error_s::make(resp.err);
+ }
+
+ if (err.is_ok()) {
+ if (new_max_replica_count == resp.old_max_replica_count) {
+ fmt::print(stdout,
+ "set replica count of app({}) from {} to {}: {}\n",
+ escaped_app_name,
+ resp.old_max_replica_count,
+ new_max_replica_count,
+ resp.hint_message);
+ } else {
+ fmt::print(stdout,
+ "set replica count of app({}) from {} to {}
successfully\n",
+ escaped_app_name,
+ resp.old_max_replica_count,
+ new_max_replica_count);
+ }
+ } else {
+ std::string error_message(resp.err.to_string());
+ if (!resp.hint_message.empty()) {
+ error_message += ", ";
+ error_message += resp.hint_message;
+ }
+
+ if (resp.old_max_replica_count > 0) {
+ fmt::print(stdout,
+ "set replica count of app({}) from {} to {} failed:
{}\n",
+ escaped_app_name,
+ resp.old_max_replica_count,
+ new_max_replica_count,
+ error_message);
+ } else {
+ fmt::print(stdout,
Review Comment:
> How this case happend?
For example, if a table does not exist, it will not has an old
max_replica_count.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]