mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-29 16:44:29 +02:00
Make RedisWriter#ChunkObjects()'s result type more explicit
This commit is contained in:
parent
0534141aaf
commit
23448b0322
@ -43,6 +43,7 @@
|
|||||||
#include "base/convert.hpp"
|
#include "base/convert.hpp"
|
||||||
#include "base/array.hpp"
|
#include "base/array.hpp"
|
||||||
#include "base/exception.hpp"
|
#include "base/exception.hpp"
|
||||||
|
#include <iterator>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
@ -127,13 +128,12 @@ void RedisWriter::UpdateAllConfigObjects()
|
|||||||
|
|
||||||
keys.insert(keys.end(), globalKeys.begin(), globalKeys.end());
|
keys.insert(keys.end(), globalKeys.begin(), globalKeys.end());
|
||||||
|
|
||||||
std::vector<Array::Ptr> objectChunks = ChunkObjects(type.first->GetObjects(), 500);
|
auto objectChunks (ChunkObjects(type.first->GetObjects(), 500));
|
||||||
|
|
||||||
WorkQueue upqObjectType(25000, Configuration::Concurrency);
|
WorkQueue upqObjectType(25000, Configuration::Concurrency);
|
||||||
upqObjectType.SetName("RedisWriter:ConfigDump:" + lcType);
|
upqObjectType.SetName("RedisWriter:ConfigDump:" + lcType);
|
||||||
|
|
||||||
upqObjectType.ParallelFor(objectChunks, [this, &type, &lcType, &keys](const Array::Ptr chunk) {
|
upqObjectType.ParallelFor(objectChunks, [this, &type, &lcType, &keys](decltype(objectChunks)::const_reference chunk) {
|
||||||
ObjectLock chunkLock(chunk);
|
|
||||||
std::map<String, std::vector<String> > statements = GenerateHmsetStatements(keys);
|
std::map<String, std::vector<String> > statements = GenerateHmsetStatements(keys);
|
||||||
std::vector<String> states = {"HMSET", m_PrefixStateObject + lcType};
|
std::vector<String> states = {"HMSET", m_PrefixStateObject + lcType};
|
||||||
std::vector<std::vector<String> > transaction = {{"MULTI"}};
|
std::vector<std::vector<String> > transaction = {{"MULTI"}};
|
||||||
@ -222,25 +222,24 @@ void RedisWriter::UpdateAllConfigObjects()
|
|||||||
<< "Initial config/status dump finished in " << Utility::GetTime() - startTime << " seconds.";
|
<< "Initial config/status dump finished in " << Utility::GetTime() - startTime << " seconds.";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Array::Ptr> RedisWriter::ChunkObjects(std::vector<intrusive_ptr<ConfigObject> > objects, size_t chunkSize) {
|
std::vector<std::vector<intrusive_ptr<ConfigObject>>> RedisWriter::ChunkObjects(std::vector<intrusive_ptr<ConfigObject>> objects, size_t chunkSize) {
|
||||||
std::vector<Array::Ptr> chunks;
|
std::vector<std::vector<intrusive_ptr<ConfigObject>>> chunks;
|
||||||
Array::Ptr currentChunk(new Array);
|
auto offset (objects.begin());
|
||||||
size_t currentChunkSize = 0;
|
auto end (objects.end());
|
||||||
for (auto object : objects) {
|
|
||||||
currentChunk->Add(object);
|
chunks.reserve((std::distance(offset, end) + chunkSize - 1) / chunkSize);
|
||||||
currentChunkSize++;
|
|
||||||
if (currentChunkSize >= chunkSize) {
|
while (std::distance(offset, end) >= chunkSize) {
|
||||||
chunks.push_back(currentChunk);
|
auto until (offset + chunkSize);
|
||||||
currentChunk = new Array();
|
chunks.emplace_back(offset, until);
|
||||||
currentChunkSize = 0;
|
offset = until;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentChunkSize > 0) {
|
if (offset != end) {
|
||||||
chunks.push_back(currentChunk);
|
chunks.emplace_back(offset, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
return chunks;
|
return std::move(chunks);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RedisWriter::DeleteKeys(const std::vector<String>& keys) {
|
void RedisWriter::DeleteKeys(const std::vector<String>& keys) {
|
||||||
|
@ -70,7 +70,7 @@ private:
|
|||||||
|
|
||||||
/* config & status dump */
|
/* config & status dump */
|
||||||
void UpdateAllConfigObjects();
|
void UpdateAllConfigObjects();
|
||||||
std::vector<Array::Ptr> ChunkObjects(std::vector<intrusive_ptr<ConfigObject> > objects, size_t chunkSize);
|
std::vector<std::vector<intrusive_ptr<ConfigObject>>> ChunkObjects(std::vector<intrusive_ptr<ConfigObject>> objects, size_t chunkSize);
|
||||||
void DeleteKeys(const std::vector<String>& keys);
|
void DeleteKeys(const std::vector<String>& keys);
|
||||||
std::map<String, std::vector<String> > GenerateHmsetStatements(const std::vector<String> keys);
|
std::map<String, std::vector<String> > GenerateHmsetStatements(const std::vector<String> keys);
|
||||||
std::vector<String> GetTypeObjectKeys(const String& type);
|
std::vector<String> GetTypeObjectKeys(const String& type);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user