KMS connector to assist encryption enabled perf runs (#7978)
Description FDB Native encryption requires integration with external KeyMangement Services to fetch required encryption keys. For simulation runs, there exists SimKmsConnector implementation that fakes interaction with external KMS. Major changes suggested in the patch: 1. Enable setting KMS_CONNECTOR_TYPE via command line arguments. 2. If "FDBPerfKmsConnector" is set as KMS_CONNECTOR_TYPE, then allow using SimKmsConnector implementation. Note: SimKmsConnector can handle process reboots. Testing devRunCorrectness - 100K
This commit is contained in:
parent
a27ee0f18a
commit
d6b1ac056c
|
@ -911,7 +911,7 @@ void ServerKnobs::initialize(Randomize randomize, ClientKnobs* clientKnobs, IsSi
|
|||
init( BLOB_GRANULE_COMPRESSION_FILTER, "GZIP" ); if ( randomize && BUGGIFY ) { BLOB_GRANULE_COMPRESSION_FILTER = "NONE"; }
|
||||
|
||||
|
||||
// KMS connector type
|
||||
// KMS connector type
|
||||
init( KMS_CONNECTOR_TYPE, "RESTKmsConnector" );
|
||||
|
||||
// Blob granlues
|
||||
|
|
|
@ -53,6 +53,10 @@
|
|||
|
||||
namespace {
|
||||
|
||||
const std::string REST_KMS_CONNECTOR_TYPE_STR = "RESTKmsConnector";
|
||||
const std::string FDB_PREF_KMS_CONNECTOR_TYPE_STR = "FDBPerfKmsConnector";
|
||||
const std::string FDB_SIM_KMS_CONNECTOR_TYPE_STR = "SimKmsConnector";
|
||||
|
||||
struct CipherKeyValidityTS {
|
||||
int64_t refreshAtTS;
|
||||
int64_t expAtTS;
|
||||
|
@ -774,15 +778,19 @@ void refreshBlobMetadata(Reference<EncryptKeyProxyData> ekpProxyData, KmsConnect
|
|||
}
|
||||
|
||||
void activateKmsConnector(Reference<EncryptKeyProxyData> ekpProxyData, KmsConnectorInterface kmsConnectorInf) {
|
||||
if (g_network->isSimulated()) {
|
||||
if (g_network->isSimulated() || (SERVER_KNOBS->KMS_CONNECTOR_TYPE.compare(FDB_PREF_KMS_CONNECTOR_TYPE_STR) == 0)) {
|
||||
ekpProxyData->kmsConnector = std::make_unique<SimKmsConnector>();
|
||||
} else if (SERVER_KNOBS->KMS_CONNECTOR_TYPE.compare("RESTKmsConnector")) {
|
||||
} else if (SERVER_KNOBS->KMS_CONNECTOR_TYPE.compare(REST_KMS_CONNECTOR_TYPE_STR) == 0) {
|
||||
ekpProxyData->kmsConnector = std::make_unique<RESTKmsConnector>();
|
||||
} else {
|
||||
throw not_implemented();
|
||||
}
|
||||
|
||||
TraceEvent("EKP_ActiveKmsConnector", ekpProxyData->myId).detail("ConnectorType", SERVER_KNOBS->KMS_CONNECTOR_TYPE);
|
||||
TraceEvent("EKPActiveKmsConnector", ekpProxyData->myId)
|
||||
.detail("ConnectorType",
|
||||
g_network->isSimulated() ? FDB_SIM_KMS_CONNECTOR_TYPE_STR : SERVER_KNOBS->KMS_CONNECTOR_TYPE)
|
||||
.detail("InfId", kmsConnectorInf.id());
|
||||
|
||||
ekpProxyData->addActor.send(ekpProxyData->kmsConnector->connectorCore(kmsConnectorInf));
|
||||
}
|
||||
|
||||
|
|
|
@ -112,8 +112,8 @@ enum {
|
|||
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_FLOW_PROCESS_NAME, OPT_FLOW_PROCESS_ENDPOINT, OPT_IP_TRUSTED_MASK, OPT_KMS_CONN_DISCOVERY_URL_FILE, OPT_KMS_CONN_VALIDATION_TOKEN_DETAILS, OPT_KMS_CONN_GET_ENCRYPTION_KEYS_ENDPOINT,
|
||||
OPT_NEW_CLUSTER_KEY, OPT_USE_FUTURE_PROTOCOL_VERSION
|
||||
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_USE_FUTURE_PROTOCOL_VERSION
|
||||
};
|
||||
|
||||
CSimpleOpt::SOption g_rgOptions[] = {
|
||||
|
@ -208,9 +208,10 @@ CSimpleOpt::SOption g_rgOptions[] = {
|
|||
{ OPT_FLOW_PROCESS_ENDPOINT, "--process-endpoint", SO_REQ_SEP },
|
||||
{ OPT_IP_TRUSTED_MASK, "--trusted-subnet-", SO_REQ_SEP },
|
||||
{ OPT_NEW_CLUSTER_KEY, "--new-cluster-key", SO_REQ_SEP },
|
||||
{ OPT_KMS_CONN_DISCOVERY_URL_FILE, "--discover-kms-conn-url-file", SO_REQ_SEP},
|
||||
{ OPT_KMS_CONN_VALIDATION_TOKEN_DETAILS, "--kms-conn-validation-token-details", SO_REQ_SEP},
|
||||
{ OPT_KMS_CONN_GET_ENCRYPTION_KEYS_ENDPOINT, "--kms-conn-get-encryption-keys-endpoint", SO_REQ_SEP},
|
||||
{ OPT_KMS_CONN_DISCOVERY_URL_FILE, "--discover-kms-conn-url-file", SO_REQ_SEP },
|
||||
{ OPT_KMS_CONNECTOR_TYPE, "--kms-connector-type", SO_REQ_SEP },
|
||||
{ OPT_KMS_CONN_VALIDATION_TOKEN_DETAILS, "--kms-conn-validation-token-details", SO_REQ_SEP },
|
||||
{ OPT_KMS_CONN_GET_ENCRYPTION_KEYS_ENDPOINT, "--kms-conn-get-encryption-keys-endpoint", SO_REQ_SEP },
|
||||
{ OPT_USE_FUTURE_PROTOCOL_VERSION, "--use-future-protocol-version", SO_REQ_SEP },
|
||||
TLS_OPTION_FLAGS,
|
||||
SO_END_OF_OPTIONS
|
||||
|
@ -1667,6 +1668,10 @@ private:
|
|||
knobs.emplace_back("rest_kms_connector_kms_discovery_url_file", args.OptionArg());
|
||||
break;
|
||||
}
|
||||
case OPT_KMS_CONNECTOR_TYPE: {
|
||||
knobs.emplace_back("kms_connector_type", args.OptionArg());
|
||||
break;
|
||||
}
|
||||
case OPT_KMS_CONN_VALIDATION_TOKEN_DETAILS: {
|
||||
knobs.emplace_back("rest_kms_connector_validation_token_details", args.OptionArg());
|
||||
break;
|
||||
|
|
|
@ -514,8 +514,8 @@ private:
|
|||
KeyRangeMap<uint64_t> keyRangePhysicalShardIDMap;
|
||||
// Indicate what physical shards owned by a team
|
||||
std::map<ShardsAffectedByTeamFailure::Team, std::set<uint64_t>> teamPhysicalShardIDs;
|
||||
double lastTransitionStartTime;
|
||||
bool requireTransition;
|
||||
double lastTransitionStartTime;
|
||||
};
|
||||
|
||||
// DDShardInfo is so named to avoid link-time name collision with ShardInfo within the StorageServer
|
||||
|
|
Loading…
Reference in New Issue