Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 35 additions & 8 deletions src/api/cpp/GravityNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,7 @@ GravityNode::GravityNode()
// Default to no metrics
metricsEnabled = false;
settingsPubEnabled = false;
collectSettings = false;
initialized = false;
logInitialized = false;
listenerEnabled = false;
Expand All @@ -450,6 +451,7 @@ GravityNode::GravityNode(std::string componentID)
// Default to no metrics
metricsEnabled = false;
settingsPubEnabled = false;
collectSettings = false;
initialized = false;
logInitialized = false;
heartbeatStarted = false;
Expand Down Expand Up @@ -714,6 +716,7 @@ GravityReturnCode GravityNode::init(std::string componentID)

initLock.Lock();


// Setup zmq context
if (!initialized)
{
Expand All @@ -728,6 +731,9 @@ GravityReturnCode GravityNode::init(std::string componentID)
parser->ParseConfigFile(config_file_name.c_str());
}


collectSettings = getBoolParam("GravitySettingsPublishEnabled", false);

// Setup Logging as soon as config parser is available.
if (!logInitialized)
{
Expand Down Expand Up @@ -987,9 +993,10 @@ GravityReturnCode GravityNode::init(std::string componentID)
if (settingsPubEnabled)
{
registerDataProductInternal(gravity::constants::GRAVITY_SETTINGS_DPID, GravityTransportTypes::TCP,
false, false, false, true);
false, false, false, true);
collectSettings = false;
}

// Enable metrics (if configured)
metricsEnabled = getBoolParam("GravityMetricsEnabled", false);
if (metricsEnabled)
Expand Down Expand Up @@ -1047,6 +1054,20 @@ GravityReturnCode GravityNode::init(std::string componentID)
{
logger->warn("Gravity.ini specifies both Domain and URL. Using URL.");
}
if (settingsPubEnabled) {
for (const GravityConfigParamPB& configParamPB : settings_to_publish)
{

if (!(publishedSettings.count(configParamPB.key()) == 1 &&
publishedSettings.at(configParamPB.key()) == configParamPB.value()))
{
settingsGDP.setData(configParamPB);
publish(settingsGDP, componentID);
publishedSettings[configParamPB.key()] = configParamPB.value();
}
}
settings_to_publish.clear();
}

initLock.Unlock();

Expand Down Expand Up @@ -2835,15 +2856,21 @@ std::string GravityNode::getStringParam(std::string key, std::string default_val
configParamPB.set_is_default(false);
}

if (settingsPubEnabled && initialized &&
if (settingsPubEnabled &&
!(publishedSettings.count(configParamPB.key()) == 1 &&
publishedSettings.at(configParamPB.key()) == configParamPB.value()))
publishedSettings.at(configParamPB.key()) == configParamPB.value()))
{
settingsGDP.setData(configParamPB);
publish(settingsGDP, componentID);
publishedSettings[configParamPB.key()] = configParamPB.value();
// setting good to be published at some point
if (collectSettings) {
settings_to_publish.push_back(configParamPB); // store for publish after initialization
}
else if (initialized) { // initialized, so go ahead and publish right now
settingsGDP.setData(configParamPB);
publish(settingsGDP, componentID);
publishedSettings[configParamPB.key()] = configParamPB.value();
}
}

return configParamPB.value();
}

Expand Down
2 changes: 2 additions & 0 deletions src/api/cpp/GravityNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ class GRAVITY_API GravityNode
static Semaphore initLock;

bool settingsPubEnabled;
bool collectSettings;
bool metricsEnabled;
bool initialized;
bool logInitialized;
Expand Down Expand Up @@ -241,6 +242,7 @@ class GRAVITY_API GravityNode
GravityConfigParser* parser;

GravityConfigParamPB configParamPB;
std::vector<GravityConfigParamPB> settings_to_publish;
GravityDataProduct settingsGDP = GravityDataProduct(gravity::constants::GRAVITY_SETTINGS_DPID);

GravityReturnCode ServiceDirectoryServiceLookup(std::string serviceOrDPID, std::string& url, std::string& domain,
Expand Down