Improve status output to reflect that tlogs are recruited across availability zones according to the configured replication factor.

This commit is contained in:
Balachandar Namasivayam 2019-02-04 18:14:00 -08:00
parent de6b332d23
commit 9c19d9e9eb
1 changed files with 18 additions and 2 deletions

View File

@ -669,6 +669,22 @@ std::string logBackupDR(const char *context, std::map<std::string, std::string>
return outputString;
}
int getNumOfZones(StatusObjectReader statusObjCluster) {
StatusObjectReader machinesMap;
std::set<std::string> zones;
if (statusObjCluster.get("machines", machinesMap)) {
int machineExclusions = 0;
for (auto mach : machinesMap.obj()) {
StatusObjectReader machine(mach.second);
std::string zoneId;
if (machine.get("locality.zoneid", zoneId)) {
zones.insert(zoneId);
}
}
}
return zones.size();
}
void printStatus(StatusObjectReader statusObj, StatusClient::StatusLevel level, bool displayDatabaseAvailable = true, bool hideErrorMessages = false) {
if (FlowTransport::transport().incompatibleOutgoingConnectionsPresent()) {
printf("WARNING: One or more of the processes in the cluster is incompatible with this version of fdbcli.\n\n");
@ -751,9 +767,9 @@ void printStatus(StatusObjectReader statusObj, StatusClient::StatusLevel level,
fatalRecoveryState = true;
if (name == "recruiting_transaction_servers") {
description += format("\nNeed at least %d log servers, %d proxies and %d resolvers.", recoveryState["required_logs"].get_int(), recoveryState["required_proxies"].get_int(), recoveryState["required_resolvers"].get_int());
description += format("\nNeed at least %d log servers across unique zones, %d proxies and %d resolvers.", recoveryState["required_logs"].get_int(), recoveryState["required_proxies"].get_int(), recoveryState["required_resolvers"].get_int());
if (statusObjCluster.has("machines") && statusObjCluster.has("processes"))
description += format("\nHave %d processes on %d machines.", statusObjCluster["processes"].get_obj().size(), statusObjCluster["machines"].get_obj().size());
description += format("\nHave %d processes on %d machines across %d zone(s).", statusObjCluster["processes"].get_obj().size(), statusObjCluster["machines"].get_obj().size(), getNumOfZones(statusObjCluster));
} else if (name == "locking_old_transaction_servers" && recoveryState["missing_logs"].get_str().size()) {
description += format("\nNeed one or more of the following log servers: %s", recoveryState["missing_logs"].get_str().c_str());
}