Merge pull request #618 from ajbeamon/log-options

Log network, cluster, and database options when they are set.
This commit is contained in:
Evan Tschannen 2018-09-05 10:36:40 -07:00 committed by GitHub
commit d42f0e9c44
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 5 deletions

View File

@ -47,6 +47,7 @@ private:
public:
typename std::map<typename T::Option, FDBOptionInfo>::iterator begin() { return optionInfo.begin(); }
typename std::map<typename T::Option, FDBOptionInfo>::iterator end() { return optionInfo.end(); }
typename std::map<typename T::Option, FDBOptionInfo>::iterator find(const typename T::Option& key) { return optionInfo.find(key); }
FDBOptionInfo& operator[] (const typename T::Option& key) { return optionInfo[key]; }

View File

@ -585,6 +585,16 @@ Reference<ITransaction> MultiVersionDatabase::createTransaction() {
void MultiVersionDatabase::setOption(FDBDatabaseOptions::Option option, Optional<StringRef> value) {
MutexHolder holder(dbState->optionLock);
auto itr = FDBDatabaseOptions::optionInfo.find(option);
if(itr != FDBDatabaseOptions::optionInfo.end()) {
TraceEvent("SetDatabaseOption").detail("Option", itr->second.name);
}
else {
TraceEvent("UnknownDatabaseOption").detail("Option", option);
throw invalid_option();
}
if(dbState->db) {
dbState->db->setOption(option, value);
}
@ -733,6 +743,15 @@ ThreadFuture<Reference<IDatabase>> MultiVersionCluster::createDatabase() {
void MultiVersionCluster::setOption(FDBClusterOptions::Option option, Optional<StringRef> value) {
MutexHolder holder(clusterState->optionLock);
auto itr = FDBClusterOptions::optionInfo.find(option);
if(itr != FDBClusterOptions::optionInfo.end()) {
TraceEvent("SetClusterOption").detail("Option", itr->second.name);
}
else {
TraceEvent("UnknownClusterOption").detail("Option", option);
throw invalid_option();
}
if(clusterState->cluster) {
clusterState->cluster->setOption(option, value);
}
@ -986,6 +1005,7 @@ void MultiVersionApi::addExternalLibrary(std::string path) {
std::string filename = basename(path);
if(filename.empty() || !fileExists(path)) {
TraceEvent("ExternalClientNotFound").detail("LibraryPath", filename);
throw file_not_found();
}
@ -1052,6 +1072,15 @@ void MultiVersionApi::setNetworkOption(FDBNetworkOptions::Option option, Optiona
}
void MultiVersionApi::setNetworkOptionInternal(FDBNetworkOptions::Option option, Optional<StringRef> value) {
auto itr = FDBNetworkOptions::optionInfo.find(option);
if(itr != FDBNetworkOptions::optionInfo.end()) {
TraceEvent("SetNetworkOption").detail("Option", itr->second.name);
}
else {
TraceEvent("UnknownNetworkOption").detail("Option", option);
throw invalid_option();
}
if(option == FDBNetworkOptions::DISABLE_MULTI_VERSION_CLIENT_API) {
validateOption(value, false, true);
disableMultiVersionClientApi();

View File

@ -764,17 +764,21 @@ void setNetworkOption(FDBNetworkOptions::Option option, Optional<StringRef> valu
validateOptionValue(value, true);
std::string optionValue = value.get().toString();
TraceEvent("SetKnob").detail("KnobString", optionValue);
size_t eq = optionValue.find_first_of('=');
if(eq == optionValue.npos) {
TraceEvent(SevWarnAlways, "InvalidKnobString").detail("KnobString", optionValue);
throw invalid_option_value();
}
std::string knob_name = optionValue.substr(0, eq);
std::string knob_value = optionValue.substr(eq+1);
if (!const_cast<FlowKnobs*>(FLOW_KNOBS)->setKnob( knob_name, knob_value ) &&
!const_cast<ClientKnobs*>(CLIENT_KNOBS)->setKnob( knob_name, knob_value ))
std::string knobName = optionValue.substr(0, eq);
std::string knobValue = optionValue.substr(eq+1);
if (!const_cast<FlowKnobs*>(FLOW_KNOBS)->setKnob( knobName, knobValue ) &&
!const_cast<ClientKnobs*>(CLIENT_KNOBS)->setKnob( knobName, knobValue ))
{
fprintf(stderr, "FoundationDB client ignoring unrecognized knob option '%s'\n", knob_name.c_str());
TraceEvent(SevWarnAlways, "UnrecognizedKnob").detail("Knob", knobName.c_str());
fprintf(stderr, "FoundationDB client ignoring unrecognized knob option '%s'\n", knobName.c_str());
}
break;
}