Simplify vector usage

Also leak less memory ;)
This commit is contained in:
Jean Flach 2018-10-23 16:32:20 +02:00 committed by Michael Friedrich
parent 6aaa35a0a6
commit b59189b8d3
1 changed files with 26 additions and 40 deletions

View File

@ -83,42 +83,35 @@ void RedisWriter::UpdateAllConfigObjects()
upq.ParallelFor(types, [this](const TypePair& type) { upq.ParallelFor(types, [this](const TypePair& type) {
size_t bulkCounter = 0; size_t bulkCounter = 0;
auto attributes = new std::vector<String>(); std::vector<String> attributes = std::vector<String>({"HMSET", m_PrefixConfigObject + type.second});
attributes->emplace_back("HMSET"); std::vector<String> customVars = std::vector<String>({"HMSET", m_PrefixConfigCustomVar + type.second});
attributes->emplace_back(m_PrefixConfigObject + type.second); std::vector<String> checksums = std::vector<String>({"HMSET", m_PrefixConfigCheckSum + type.second});
auto customVars = new std::vector<String>();
customVars->emplace_back("HMSET");
customVars->emplace_back(m_PrefixConfigCustomVar + type.second);
auto checksums = new std::vector<String>();
checksums->emplace_back("HMSET");
checksums->emplace_back(m_PrefixConfigCheckSum + type.second);
for (const ConfigObject::Ptr& object : type.first->GetObjects()) { for (const ConfigObject::Ptr& object : type.first->GetObjects()) {
CreateConfigUpdate(object, *attributes, *customVars, *checksums, false); CreateConfigUpdate(object, attributes, customVars, checksums, false);
SendStatusUpdate(object); SendStatusUpdate(object);
bulkCounter ++; bulkCounter ++;
if (!bulkCounter % 100) { if (!bulkCounter % 100) {
if (attributes->size() > 2) { if (attributes.size() > 2) {
m_Rcon->ExecuteQuery(*attributes); m_Rcon->ExecuteQuery(attributes);
attributes->erase(attributes->begin() + 2, attributes->end()); attributes.erase(attributes.begin() + 2, attributes.end());
} }
if (customVars->size() > 2) { if (customVars.size() > 2) {
m_Rcon->ExecuteQuery(*customVars); m_Rcon->ExecuteQuery(customVars);
customVars->erase(customVars->begin() + 2, customVars->end()); customVars.erase(customVars.begin() + 2, customVars.end());
} }
if (checksums->size() > 2) { if (checksums.size() > 2) {
m_Rcon->ExecuteQuery(*checksums); m_Rcon->ExecuteQuery(checksums);
checksums->erase(checksums->begin() + 2, checksums->end()); checksums.erase(checksums.begin() + 2, checksums.end());
} }
} }
} }
if (attributes->size() > 2) if (attributes.size() > 2)
m_Rcon->ExecuteQuery(*attributes); m_Rcon->ExecuteQuery(attributes);
if (customVars->size() > 2) if (customVars.size() > 2)
m_Rcon->ExecuteQuery(*customVars); m_Rcon->ExecuteQuery(customVars);
if (checksums->size() > 2) if (checksums.size() > 2)
m_Rcon->ExecuteQuery(*checksums); m_Rcon->ExecuteQuery(checksums);
Log(LogNotice, "RedisWriter") Log(LogNotice, "RedisWriter")
<< "Dumped " << bulkCounter << " objects of type " << type.second; << "Dumped " << bulkCounter << " objects of type " << type.second;
@ -147,21 +140,15 @@ static ConfigObject::Ptr GetObjectByName(const String& name)
void RedisWriter::SendConfigUpdate(const ConfigObject::Ptr& object, bool runtimeUpdate) void RedisWriter::SendConfigUpdate(const ConfigObject::Ptr& object, bool runtimeUpdate)
{ {
String typeName = object->GetReflectionType()->GetName().ToLower(); String typeName = object->GetReflectionType()->GetName().ToLower();
auto attributes = new std::vector<String>(); std::vector<String> attributes = std::vector<String>({"HMSET", m_PrefixConfigObject + typeName});
attributes->emplace_back("HSET"); std::vector<String> customVars = std::vector<String>({"HMSET", m_PrefixConfigCustomVar + typeName});
attributes->emplace_back(m_PrefixConfigObject +typeName); std::vector<String> checksums = std::vector<String>({"HMSET", m_PrefixConfigCheckSum + typeName});
auto customVars = new std::vector<String>();
customVars->emplace_back("HSET");
customVars->emplace_back(m_PrefixConfigCustomVar + typeName);
auto checksums = new std::vector<String>();
checksums->emplace_back("HSET");
checksums->emplace_back(m_PrefixConfigCheckSum +typeName);
CreateConfigUpdate(object, *attributes, *customVars, *checksums, runtimeUpdate); CreateConfigUpdate(object, attributes, customVars, checksums, runtimeUpdate);
m_Rcon->ExecuteQuery(*attributes); m_Rcon->ExecuteQuery(attributes);
m_Rcon->ExecuteQuery(*customVars); m_Rcon->ExecuteQuery(customVars);
m_Rcon->ExecuteQuery(*checksums); m_Rcon->ExecuteQuery(checksums);
} }
/* Creates a config update with computed checksums etc. /* Creates a config update with computed checksums etc.
@ -504,7 +491,6 @@ void RedisWriter::CreateConfigUpdate(const ConfigObject::Ptr& object, std::vecto
checksums.emplace_back(objectKey); checksums.emplace_back(objectKey);
checksums.emplace_back(checkSumsBody); checksums.emplace_back(checkSumsBody);
/* Send an update event to subscribers. */ /* Send an update event to subscribers. */
if (runtimeUpdate) { if (runtimeUpdate) {
m_Rcon->ExecuteQuery({"PUBLISH", "icinga:config:update", typeName + ":" + objectKey}); m_Rcon->ExecuteQuery({"PUBLISH", "icinga:config:update", typeName + ":" + objectKey});