From d9ff921934fda442ed09abf1364e193126f8fdb5 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Fri, 9 Aug 2019 15:11:39 +0200 Subject: [PATCH] RedisWriter: publish the current config dump state via icinga:dump refs #53 --- lib/redis/rediswriter-objects.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/redis/rediswriter-objects.cpp b/lib/redis/rediswriter-objects.cpp index e02d33bc6..549b9a556 100644 --- a/lib/redis/rediswriter-objects.cpp +++ b/lib/redis/rediswriter-objects.cpp @@ -50,6 +50,19 @@ using namespace icinga; +static const char * const l_LuaResetDump = R"EOF( + +local id = redis.call('XADD', KEYS[1], '*', 'type', '*', 'state', 'wip') + +local xr = redis.call('XRANGE', KEYS[1], '-', '+') +for i = 1, #xr - 1 do + redis.call('XDEL', KEYS[1], xr[i][1]) +end + +return id + +)EOF"; + INITIALIZE_ONCE(&RedisWriter::ConfigStaticInitialize); void RedisWriter::ConfigStaticInitialize() @@ -109,6 +122,8 @@ void RedisWriter::UpdateAllConfigObjects() } } + m_Rcon->FireAndForgetQuery({"EVAL", l_LuaResetDump, "1", "icinga:dump"}); + const std::vector globalKeys = { m_PrefixConfigObject + "customvar", m_PrefixConfigObject + "action_url", @@ -187,8 +202,6 @@ void RedisWriter::UpdateAllConfigObjects() m_Rcon->FireAndForgetQueries(std::move(transaction)); } - m_Rcon->FireAndForgetQuery({"PUBLISH", "icinga:config:dump", lcType}); - Log(LogNotice, "RedisWriter") << "Dumped " << bulkCounter << " objects of type " << type.second; }); @@ -202,6 +215,8 @@ void RedisWriter::UpdateAllConfigObjects() } } } + + m_Rcon->FireAndForgetQuery({"XADD", "icinga:dump", "*", "type", lcType, "state", "done"}); }); upq.Join(); @@ -219,6 +234,8 @@ void RedisWriter::UpdateAllConfigObjects() } } + m_Rcon->FireAndForgetQuery({"XADD", "icinga:dump", "*", "type", "*", "state", "done"}); + Log(LogInformation, "RedisWriter") << "Initial config/status dump finished in " << Utility::GetTime() - startTime << " seconds."; }