Add flag to disable the configuration database
The `--no-config-db` flag, passed to `fdbserver`, will disable the configuration database. When this flag is specified, no `ConfigNode`s will be started, the `ConfigBroadcaster` will not be started, and on a coordinator change no attempt will be made to lock `ConfigNode`s.
This commit is contained in:
parent
74ac617a34
commit
cd2bbffa4c
|
@ -2555,7 +2555,10 @@ ACTOR Future<Void> clusterControllerCore(ClusterControllerFullInterface interf,
|
|||
state Future<Void> coordinationPingDelay = delay(SERVER_KNOBS->WORKER_COORDINATION_PING_DELAY);
|
||||
state uint64_t step = 0;
|
||||
state Future<ErrorOr<Void>> error = errorOr(actorCollection(self.addActor.getFuture()));
|
||||
state ConfigBroadcaster configBroadcaster(coordinators, configDBType, getPreviousCoordinators(&self));
|
||||
state ConfigBroadcaster configBroadcaster;
|
||||
if (configDBType != ConfigDBType::DISABLED) {
|
||||
configBroadcaster = ConfigBroadcaster(coordinators, configDBType, getPreviousCoordinators(&self));
|
||||
}
|
||||
|
||||
// EncryptKeyProxy is necessary for TLog recovery, recruit it as the first process
|
||||
if (SERVER_KNOBS->ENABLE_ENCRYPTION) {
|
||||
|
@ -2768,7 +2771,7 @@ ACTOR Future<Void> clusterController(Reference<IClusterConnectionRecord> connRec
|
|||
state bool hasConnected = false;
|
||||
loop {
|
||||
try {
|
||||
ServerCoordinators coordinators(connRecord);
|
||||
ServerCoordinators coordinators(connRecord, configDBType);
|
||||
wait(clusterController(
|
||||
coordinators, currentCC, hasConnected, asyncPriorityInfo, locality, configDBType, recoveredDiskFiles));
|
||||
hasConnected = true;
|
||||
|
|
|
@ -528,11 +528,12 @@ public:
|
|||
|
||||
coordinatorsHash = std::hash<std::string>()(coordinators.ccr->getConnectionString().toString());
|
||||
|
||||
TraceEvent(SevDebug, "ConfigBroadcasterStartingConsumer", id)
|
||||
TraceEvent(SevInfo, "ConfigBroadcasterStartingConsumer", id)
|
||||
.detail("Consumer", consumer->getID())
|
||||
.detail("UsingSimpleConsumer", configDBType == ConfigDBType::SIMPLE)
|
||||
.detail("CoordinatorsCount", this->coordinators)
|
||||
.detail("CoordinatorsHash", coordinatorsHash);
|
||||
.detail("CoordinatorsHash", coordinatorsHash)
|
||||
.detail("CompactionInterval", SERVER_KNOBS->COMPACTION_INTERVAL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -695,6 +696,10 @@ void ConfigBroadcaster::compact(Version compactionVersion) {
|
|||
}
|
||||
|
||||
ACTOR static Future<Void> lockConfigNodesImpl(ServerCoordinators coordinators) {
|
||||
if (coordinators.configServers.empty()) {
|
||||
return Void();
|
||||
}
|
||||
|
||||
size_t coordinatorsHash = std::hash<std::string>()(coordinators.ccr->getConnectionString().toString());
|
||||
|
||||
std::vector<Future<Void>> lockRequests;
|
||||
|
|
|
@ -97,17 +97,22 @@ LeaderElectionRegInterface::LeaderElectionRegInterface(INetwork* local) : Client
|
|||
forward.makeWellKnownEndpoint(WLTOKEN_LEADERELECTIONREG_FORWARD, TaskPriority::Coordination);
|
||||
}
|
||||
|
||||
ServerCoordinators::ServerCoordinators(Reference<IClusterConnectionRecord> ccr) : ClientCoordinators(ccr) {
|
||||
ServerCoordinators::ServerCoordinators(Reference<IClusterConnectionRecord> ccr, ConfigDBType configDBType)
|
||||
: ClientCoordinators(ccr) {
|
||||
ClusterConnectionString cs = ccr->getConnectionString();
|
||||
for (auto h : cs.hostnames) {
|
||||
leaderElectionServers.emplace_back(h);
|
||||
stateServers.emplace_back(h);
|
||||
configServers.emplace_back(h);
|
||||
if (configDBType != ConfigDBType::DISABLED) {
|
||||
configServers.emplace_back(h);
|
||||
}
|
||||
}
|
||||
for (auto s : cs.coords) {
|
||||
leaderElectionServers.emplace_back(s);
|
||||
stateServers.emplace_back(s);
|
||||
configServers.emplace_back(s);
|
||||
if (configDBType != ConfigDBType::DISABLED) {
|
||||
configServers.emplace_back(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -279,7 +279,7 @@ class TestConfig {
|
|||
}
|
||||
if (attrib == "configDBType") {
|
||||
if (value == "random") {
|
||||
configDBType = deterministicRandom()->coinflip() ? ConfigDBType::SIMPLE : ConfigDBType::PAXOS;
|
||||
configDBType = deterministicRandom()->random01() < 0.1 ? ConfigDBType::SIMPLE : ConfigDBType::PAXOS;
|
||||
} else {
|
||||
configDBType = configDBTypeFromString(value);
|
||||
}
|
||||
|
|
|
@ -111,7 +111,7 @@ enum {
|
|||
OPT_DCID, OPT_MACHINE_CLASS, OPT_BUGGIFY, OPT_VERSION, OPT_BUILD_FLAGS, OPT_CRASHONERROR, OPT_HELP, OPT_NETWORKIMPL, OPT_NOBUFSTDOUT, OPT_BUFSTDOUTERR,
|
||||
OPT_TRACECLOCK, OPT_NUMTESTERS, OPT_DEVHELP, OPT_PRINT_CODE_PROBES, OPT_ROLLSIZE, OPT_MAXLOGS, OPT_MAXLOGSSIZE, OPT_KNOB, OPT_UNITTESTPARAM, OPT_TESTSERVERS, OPT_TEST_ON_SERVERS, OPT_METRICSCONNFILE,
|
||||
OPT_METRICSPREFIX, OPT_LOGGROUP, OPT_LOCALITY, OPT_IO_TRUST_SECONDS, OPT_IO_TRUST_WARN_ONLY, OPT_FILESYSTEM, OPT_PROFILER_RSS_SIZE, OPT_KVFILE,
|
||||
OPT_TRACE_FORMAT, OPT_WHITELIST_BINPATH, OPT_BLOB_CREDENTIAL_FILE, OPT_CONFIG_PATH, OPT_USE_TEST_CONFIG_DB, OPT_FAULT_INJECTION, OPT_PROFILER, OPT_PRINT_SIMTIME,
|
||||
OPT_TRACE_FORMAT, OPT_WHITELIST_BINPATH, OPT_BLOB_CREDENTIAL_FILE, OPT_CONFIG_PATH, OPT_USE_TEST_CONFIG_DB, OPT_NO_CONFIG_DB, OPT_FAULT_INJECTION, OPT_PROFILER, OPT_PRINT_SIMTIME,
|
||||
OPT_FLOW_PROCESS_NAME, OPT_FLOW_PROCESS_ENDPOINT, OPT_IP_TRUSTED_MASK, OPT_KMS_CONN_DISCOVERY_URL_FILE, OPT_KMS_CONNECTOR_TYPE, OPT_KMS_CONN_VALIDATION_TOKEN_DETAILS,
|
||||
OPT_KMS_CONN_GET_ENCRYPTION_KEYS_ENDPOINT, OPT_NEW_CLUSTER_KEY, OPT_AUTHZ_PUBLIC_KEY_FILE, OPT_USE_FUTURE_PROTOCOL_VERSION
|
||||
};
|
||||
|
@ -200,6 +200,7 @@ CSimpleOpt::SOption g_rgOptions[] = {
|
|||
{ OPT_BLOB_CREDENTIAL_FILE, "--blob-credential-file", SO_REQ_SEP },
|
||||
{ OPT_CONFIG_PATH, "--config-path", SO_REQ_SEP },
|
||||
{ OPT_USE_TEST_CONFIG_DB, "--use-test-config-db", SO_NONE },
|
||||
{ OPT_NO_CONFIG_DB, "--no-config-db", SO_NONE },
|
||||
{ OPT_FAULT_INJECTION, "-fi", SO_REQ_SEP },
|
||||
{ OPT_FAULT_INJECTION, "--fault-injection", SO_REQ_SEP },
|
||||
{ OPT_PROFILER, "--profiler-", SO_REQ_SEP },
|
||||
|
@ -1627,7 +1628,9 @@ private:
|
|||
case OPT_USE_TEST_CONFIG_DB:
|
||||
configDBType = ConfigDBType::SIMPLE;
|
||||
break;
|
||||
// TODO: Add no_config_db option which disables the configuration database
|
||||
case OPT_NO_CONFIG_DB:
|
||||
configDBType = ConfigDBType::DISABLED;
|
||||
break;
|
||||
case OPT_FLOW_PROCESS_NAME:
|
||||
flowProcessName = args.OptionArg();
|
||||
std::cout << flowProcessName << std::endl;
|
||||
|
|
|
@ -225,7 +225,8 @@ class ConfigNode;
|
|||
class ServerCoordinators : public ClientCoordinators {
|
||||
public:
|
||||
ServerCoordinators() {}
|
||||
explicit ServerCoordinators(Reference<IClusterConnectionRecord> ccr);
|
||||
explicit ServerCoordinators(Reference<IClusterConnectionRecord> ccr,
|
||||
ConfigDBType configDBType = ConfigDBType::PAXOS);
|
||||
|
||||
std::vector<LeaderElectionRegInterface> leaderElectionServers;
|
||||
std::vector<GenerationRegInterface> stateServers;
|
||||
|
|
|
@ -3328,16 +3328,11 @@ ACTOR Future<Void> fdbd(Reference<IClusterConnectionRecord> connRecord,
|
|||
configNode = makeReference<ConfigNode>(dataFolder);
|
||||
}
|
||||
|
||||
// FIXME: Initializing here causes simulation issues, these must be fixed
|
||||
// if (configDBType != ConfigDBType::DISABLED) {
|
||||
// wait(localConfig->initialize());
|
||||
// }
|
||||
|
||||
actors.push_back(serveProtocolInfo());
|
||||
actors.push_back(serveProcess());
|
||||
|
||||
try {
|
||||
ServerCoordinators coordinators(connRecord);
|
||||
ServerCoordinators coordinators(connRecord, configDBType);
|
||||
if (g_network->isSimulated()) {
|
||||
whitelistBinPaths = ",, random_path, /bin/snap_create.sh,,";
|
||||
}
|
||||
|
@ -3365,6 +3360,10 @@ ACTOR Future<Void> fdbd(Reference<IClusterConnectionRecord> connRecord,
|
|||
|
||||
wait(testAndUpdateSoftwareVersionCompatibility(dataFolder, processIDUid));
|
||||
|
||||
if (configDBType != ConfigDBType::DISABLED) {
|
||||
wait(localConfig->initialize());
|
||||
}
|
||||
|
||||
std::string fitnessFilePath = joinPath(dataFolder, "fitness");
|
||||
auto cc = makeReference<AsyncVar<Optional<ClusterControllerFullInterface>>>();
|
||||
auto ci = makeReference<AsyncVar<Optional<ClusterInterface>>>();
|
||||
|
|
Loading…
Reference in New Issue