From b59189b8d3cbabb6ef2a0b1ac382a8bb4ae4b14a Mon Sep 17 00:00:00 2001 From: Jean Flach Date: Tue, 23 Oct 2018 16:32:20 +0200 Subject: [PATCH] Simplify vector usage Also leak less memory ;) --- lib/redis/rediswriter-objects.cpp | 66 ++++++++++++------------------- 1 file changed, 26 insertions(+), 40 deletions(-) diff --git a/lib/redis/rediswriter-objects.cpp b/lib/redis/rediswriter-objects.cpp index 9e36dcbff..9edc4cc36 100644 --- a/lib/redis/rediswriter-objects.cpp +++ b/lib/redis/rediswriter-objects.cpp @@ -83,42 +83,35 @@ void RedisWriter::UpdateAllConfigObjects() upq.ParallelFor(types, [this](const TypePair& type) { size_t bulkCounter = 0; - auto attributes = new std::vector(); - attributes->emplace_back("HMSET"); - attributes->emplace_back(m_PrefixConfigObject + type.second); - auto customVars = new std::vector(); - customVars->emplace_back("HMSET"); - customVars->emplace_back(m_PrefixConfigCustomVar + type.second); - auto checksums = new std::vector(); - checksums->emplace_back("HMSET"); - checksums->emplace_back(m_PrefixConfigCheckSum + type.second); - + std::vector attributes = std::vector({"HMSET", m_PrefixConfigObject + type.second}); + std::vector customVars = std::vector({"HMSET", m_PrefixConfigCustomVar + type.second}); + std::vector checksums = std::vector({"HMSET", m_PrefixConfigCheckSum + type.second}); for (const ConfigObject::Ptr& object : type.first->GetObjects()) { - CreateConfigUpdate(object, *attributes, *customVars, *checksums, false); + CreateConfigUpdate(object, attributes, customVars, checksums, false); SendStatusUpdate(object); bulkCounter ++; if (!bulkCounter % 100) { - if (attributes->size() > 2) { - m_Rcon->ExecuteQuery(*attributes); - attributes->erase(attributes->begin() + 2, attributes->end()); + if (attributes.size() > 2) { + m_Rcon->ExecuteQuery(attributes); + attributes.erase(attributes.begin() + 2, attributes.end()); } - if (customVars->size() > 2) { - m_Rcon->ExecuteQuery(*customVars); - customVars->erase(customVars->begin() + 2, customVars->end()); + if (customVars.size() > 2) { + m_Rcon->ExecuteQuery(customVars); + customVars.erase(customVars.begin() + 2, customVars.end()); } - if (checksums->size() > 2) { - m_Rcon->ExecuteQuery(*checksums); - checksums->erase(checksums->begin() + 2, checksums->end()); + if (checksums.size() > 2) { + m_Rcon->ExecuteQuery(checksums); + checksums.erase(checksums.begin() + 2, checksums.end()); } } } - if (attributes->size() > 2) - m_Rcon->ExecuteQuery(*attributes); - if (customVars->size() > 2) - m_Rcon->ExecuteQuery(*customVars); - if (checksums->size() > 2) - m_Rcon->ExecuteQuery(*checksums); + if (attributes.size() > 2) + m_Rcon->ExecuteQuery(attributes); + if (customVars.size() > 2) + m_Rcon->ExecuteQuery(customVars); + if (checksums.size() > 2) + m_Rcon->ExecuteQuery(checksums); Log(LogNotice, "RedisWriter") << "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) { String typeName = object->GetReflectionType()->GetName().ToLower(); - auto attributes = new std::vector(); - attributes->emplace_back("HSET"); - attributes->emplace_back(m_PrefixConfigObject +typeName); - auto customVars = new std::vector(); - customVars->emplace_back("HSET"); - customVars->emplace_back(m_PrefixConfigCustomVar + typeName); - auto checksums = new std::vector(); - checksums->emplace_back("HSET"); - checksums->emplace_back(m_PrefixConfigCheckSum +typeName); + std::vector attributes = std::vector({"HMSET", m_PrefixConfigObject + typeName}); + std::vector customVars = std::vector({"HMSET", m_PrefixConfigCustomVar + typeName}); + std::vector checksums = std::vector({"HMSET", m_PrefixConfigCheckSum + typeName}); - CreateConfigUpdate(object, *attributes, *customVars, *checksums, runtimeUpdate); + CreateConfigUpdate(object, attributes, customVars, checksums, runtimeUpdate); - m_Rcon->ExecuteQuery(*attributes); - m_Rcon->ExecuteQuery(*customVars); - m_Rcon->ExecuteQuery(*checksums); + m_Rcon->ExecuteQuery(attributes); + m_Rcon->ExecuteQuery(customVars); + m_Rcon->ExecuteQuery(checksums); } /* 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(checkSumsBody); - /* Send an update event to subscribers. */ if (runtimeUpdate) { m_Rcon->ExecuteQuery({"PUBLISH", "icinga:config:update", typeName + ":" + objectKey});