Refactor force_recovery_with_data_loss command using the corresponding client function

This commit is contained in:
Chaoguang Lin 2021-05-20 19:47:00 +00:00
parent 6df94cba98
commit f3854fe8da
4 changed files with 56 additions and 14 deletions

View File

@ -5,6 +5,7 @@ set(FDBCLI_SRCS
ConsistencyCheckCommand.actor.cpp
FlowLineNoise.actor.cpp
FlowLineNoise.h
ForceRecoveryWithDataLossCommand.actor.cpp
MaintenanceCommand.actor.cpp
Util.cpp
linenoise/linenoise.h)

View File

@ -0,0 +1,51 @@
/*
* ForceRecoveryWithDataLossCommand.actor.cpp
*
* This source file is part of the FoundationDB open source project
*
* Copyright 2013-2021 Apple Inc. and the FoundationDB project authors
*
* Licensed 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.
*/
#include "fdbcli/fdbcli.actor.h"
#include "fdbclient/IClientApi.h"
#include "flow/Arena.h"
#include "flow/FastRef.h"
#include "flow/ThreadHelper.actor.h"
#include "flow/actorcompiler.h" // This must be the last #include.
namespace fdb_cli {
ACTOR Future<bool> forceRecoveryWithDataLossCommandActor(Reference<IDatabase> db, std::vector<StringRef> tokens) {
if (tokens.size() != 2) {
printUsage(tokens[0]);
return false;
}
wait(safeThreadFutureToFuture(db->forceRecoveryWithDataLoss(tokens[1])));
return true;
}
// hidden commands, no help text for now
CommandFactory forceRecoveryWithDataLossFactory(
"force_recovery_with_data_loss",
CommandHelp("force_recovery_with_data_loss <DCID>",
"Force the database to recover into DCID",
"A forced recovery will cause the database to lose the most recently committed mutations. The "
"amount of mutations that will be lost depends on how far behind the remote datacenter is. This "
"command will change the region configuration to have a positive priority for the chosen DCID, and "
"a negative priority for all other DCIDs. This command will set usable_regions to 1. If the "
"database has already recovered, this command does nothing.\n"));
} // namespace fdb_cli

View File

@ -632,14 +632,6 @@ void initHelp() {
"namespace for all the profiling-related commands.",
"Different types support different actions. Run `profile` to get a list of "
"types, and iteratively explore the help.\n");
helpMap["force_recovery_with_data_loss"] =
CommandHelp("force_recovery_with_data_loss <DCID>",
"Force the database to recover into DCID",
"A forced recovery will cause the database to lose the most recently committed mutations. The "
"amount of mutations that will be lost depends on how far behind the remote datacenter is. This "
"command will change the region configuration to have a positive priority for the chosen DCID, and "
"a negative priority for all other DCIDs. This command will set usable_regions to 1. If the "
"database has already recovered, this command does nothing.\n");
helpMap["throttle"] =
CommandHelp("throttle <on|off|enable auto|disable auto|list> [ARGS]",
"view and control throttled tags",
@ -3762,12 +3754,8 @@ ACTOR Future<int> cli(CLIOptions opt, LineNoise* plinenoise) {
}
if (tokencmp(tokens[0], "force_recovery_with_data_loss")) {
if (tokens.size() != 2) {
printUsage(tokens[0]);
is_error = true;
continue;
}
wait(makeInterruptable(forceRecovery(db->getConnectionFile(), tokens[1])));
bool _result = wait(makeInterruptable(forceRecoveryWithDataLossCommandActor(db2, tokens)));
if (!_result) is_error = true;
continue;
}

View File

@ -77,6 +77,8 @@ void printUsage(StringRef command);
ACTOR Future<bool> advanceVersionCommandActor(Reference<IDatabase> db, std::vector<StringRef> tokens);
// consistency command
ACTOR Future<bool> consistencyCheckCommandActor(Reference<ITransaction> tr, std::vector<StringRef> tokens);
// force_recovery_with_data_loss command
ACTOR Future<bool> forceRecoveryWithDataLossCommandActor(Reference<IDatabase> db, std::vector<StringRef> tokens);
// maintenance command
ACTOR Future<bool> maintenanceCommandActor(Reference<IDatabase> db, std::vector<StringRef> tokens);