Status: TLS client status

Use ClientStatusInfo structure for each network address (client),
instead of passing each status info as a parameter.
This commit is contained in:
Meng Xu 2019-02-26 16:20:05 -08:00
parent 94385447bc
commit c0535c49bb
3 changed files with 17 additions and 17 deletions

View File

@ -92,8 +92,7 @@ public:
ProcessIssuesMap clientsWithIssues, workersWithIssues;
std::map<NetworkAddress, double> incompatibleConnections;
ClientVersionMap clientVersionMap;
std::map<NetworkAddress, bool> clientTLSConfigMap; // Does the client has TLS configured
std::map<NetworkAddress, std::string> traceLogGroupMap;
std::map<NetworkAddress, ClientStatusInfo> clientStatusInfoMap;
AsyncTrigger forceMasterFailure;
int64_t masterRegistrationCount;
bool recoveryStalled;
@ -1234,9 +1233,7 @@ ACTOR Future<Void> clusterOpenDatabase(
db->clientVersionMap[reply.getEndpoint().getPrimaryAddress()] = supportedVersions;
}
db->clientTLSConfigMap[reply.getEndpoint().getPrimaryAddress()] = client_tls_configured;
db->traceLogGroupMap[reply.getEndpoint().getPrimaryAddress()] = traceLogGroup.toString();
db->clientStatusInfoMap[reply.getEndpoint().getPrimaryAddress()] = {traceLogGroup.toString(), client_tls_configured};
while (db->clientInfo->get().id == knownClientInfoID) {
choose {
@ -1247,8 +1244,7 @@ ACTOR Future<Void> clusterOpenDatabase(
removeIssue( db->clientsWithIssues, reply.getEndpoint().getPrimaryAddress(), issues, issueID );
db->clientVersionMap.erase(reply.getEndpoint().getPrimaryAddress());
db->clientTLSConfigMap.erase(reply.getEndpoint().getPrimaryAddress());
db->traceLogGroupMap.erase(reply.getEndpoint().getPrimaryAddress());
db->clientStatusInfoMap.erase(reply.getEndpoint().getPrimaryAddress());
reply.send( db->clientInfo->get() );
return Void();
@ -1912,7 +1908,8 @@ ACTOR Future<Void> statusServer(FutureStream< StatusRequest> requests,
}
}
state ErrorOr<StatusReply> result = wait(errorOr(clusterGetStatus(self->db.serverInfo, self->cx, workers, self->db.workersWithIssues, self->db.clientsWithIssues, self->db.clientVersionMap, self->db.clientTLSConfigMap, self->db.traceLogGroupMap, coordinators, incompatibleConnections, self->datacenterVersionDifference)));
state ErrorOr<StatusReply> result = wait(errorOr(clusterGetStatus(self->db.serverInfo, self->cx, workers, self->db.workersWithIssues, self->db.clientsWithIssues, self->db.clientVersionMap, self->db.clientStatusInfoMap, coordinators, incompatibleConnections, self->datacenterVersionDifference)));
if (result.isError() && result.getError().code() == error_code_actor_cancelled)
throw result.getError();

View File

@ -840,8 +840,7 @@ ACTOR static Future<JsonBuilderObject> processStatusFetcher(
}
static JsonBuilderObject clientStatusFetcher(ClientVersionMap clientVersionMap,
std::map<NetworkAddress, std::string> traceLogGroupMap,
std::map<NetworkAddress, bool> clientTLSConfigMap) {
std::map<NetworkAddress, ClientStatusInfo> clientStatusInfoMap) {
JsonBuilderObject clientStatus;
clientStatus["count"] = (int64_t)clientVersionMap.size();
@ -865,10 +864,10 @@ static JsonBuilderObject clientStatusFetcher(ClientVersionMap clientVersionMap,
for(auto client : cv.second) {
JsonBuilderObject cli;
cli["address"] = client.toString();
cli["log_group"] = traceLogGroupMap[client];
cli["log_group"] = clientStatusInfoMap[client].traceLogGroup;
bool client_tls_configured = false;
if (clientTLSConfigMap.find(client) != clientTLSConfigMap.end()) {
client_tls_configured = clientTLSConfigMap[client];
if (clientStatusInfoMap.find(client) != clientStatusInfoMap.end()) {
client_tls_configured = clientStatusInfoMap[client].clientTLSConfigured;
}
cli["tls_configured"] = client_tls_configured;
clients.push_back(cli);
@ -1816,8 +1815,7 @@ ACTOR Future<StatusReply> clusterGetStatus(
ProcessIssuesMap workerIssues,
ProcessIssuesMap clientIssues,
ClientVersionMap clientVersionMap,
std::map<NetworkAddress, bool> clientTLSConfigMap,
std::map<NetworkAddress, std::string> traceLogGroupMap,
std::map<NetworkAddress, ClientStatusInfo> clientStatusInfoMap,
ServerCoordinators coordinators,
std::vector<NetworkAddress> incompatibleConnections,
Version datacenterVersionDifference )
@ -2037,7 +2035,7 @@ ACTOR Future<StatusReply> clusterGetStatus(
JsonBuilderObject processStatus = wait(processStatusFetcher(db, workers, pMetrics, mMetrics, latestError, traceFileOpenErrors, programStarts, processIssues, storageServers, tLogs, proxies, cx, configuration, &status_incomplete_reasons));
statusObj["processes"] = processStatus;
statusObj["clients"] = clientStatusFetcher(clientVersionMap, traceLogGroupMap, clientTLSConfigMap);
statusObj["clients"] = clientStatusFetcher(clientVersionMap, clientStatusInfoMap);
JsonBuilderArray incompatibleConnectionsArray;
for(auto it : incompatibleConnections) {

View File

@ -30,8 +30,13 @@
typedef std::map< NetworkAddress, std::pair<std::string,UID> > ProcessIssuesMap;
typedef std::map< NetworkAddress, Standalone<VectorRef<ClientVersionRef>> > ClientVersionMap;
struct ClientStatusInfo {
std::string traceLogGroup;
bool clientTLSConfigured; // Does client configure its TLS options
};
Future<StatusReply> clusterGetStatus( Reference<AsyncVar<struct ServerDBInfo>> const& db, Database const& cx, vector<std::pair<WorkerInterface, ProcessClass>> const& workers,
ProcessIssuesMap const& workerIssues, ProcessIssuesMap const& clientIssues, ClientVersionMap const& clientVersionMap, std::map<NetworkAddress, bool> const& clientTLSConfigMap, std::map<NetworkAddress, std::string> const& traceLogGroupMap,
ProcessIssuesMap const& workerIssues, ProcessIssuesMap const& clientIssues, ClientVersionMap const& clientVersionMap, std::map<NetworkAddress, struct ClientStatusInfo> const& clientStatusInfoMap,
ServerCoordinators const& coordinators, std::vector<NetworkAddress> const& incompatibleConnections, Version const& datacenterVersionDifference );
#endif