Skip to content

Commit

Permalink
Merge pull request Icinga#8605 from Icinga/bugfix/icingadb-initial-sy…
Browse files Browse the repository at this point in the history
…nc-log

IcingaDB: wait for queries to be executed in inital sync
  • Loading branch information
Al2Klimov authored Jan 20, 2021
2 parents 3976f25 + 174f7f7 commit 5e810f3
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/icingadb/icingadb-objects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,11 @@ void IcingaDB::UpdateAllConfigObjects()

m_Rcon->FireAndForgetQuery({"XADD", "icinga:dump", "*", "type", "*", "state", "done"}, Prio::Config);

// enqueue a callback that will notify us once all previous queries were executed and wait for this event
std::promise<void> p;
m_Rcon->EnqueueCallback([&p](boost::asio::yield_context& yc) { p.set_value(); }, Prio::Config);
p.get_future().wait();

Log(LogInformation, "IcingaDB")
<< "Initial config/status dump finished in " << Utility::GetTime() - startTime << " seconds.";
}
Expand Down
12 changes: 12 additions & 0 deletions lib/icingadb/redisconnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,14 @@ RedisConnection::Replies RedisConnection::GetResultsOfQueries(RedisConnection::Q
return future.get();
}

void RedisConnection::EnqueueCallback(const std::function<void(boost::asio::yield_context&)>& callback, RedisConnection::QueryPriority priority)
{
asio::post(m_Strand, [this, callback, priority]() {
m_Queues.Writes[priority].emplace(WriteQueueItem{nullptr, nullptr, nullptr, nullptr, callback});
m_QueuedWrites.Set();
});
}

/**
* Mark kind as kind of queries not to actually send yet
*
Expand Down Expand Up @@ -471,6 +479,10 @@ void RedisConnection::WriteItem(boost::asio::yield_context& yc, RedisConnection:

m_QueuedReads.Set();
}

if (next.Callback) {
next.Callback(yc);
}
}

/**
Expand Down
3 changes: 3 additions & 0 deletions lib/icingadb/redisconnection.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ namespace icinga
Reply GetResultOfQuery(Query query, QueryPriority priority);
Replies GetResultsOfQueries(Queries queries, QueryPriority priority);

void EnqueueCallback(const std::function<void(boost::asio::yield_context&)>& callback, QueryPriority priority);

void SuppressQueryKind(QueryPriority kind);
void UnsuppressQueryKind(QueryPriority kind);

Expand Down Expand Up @@ -117,6 +119,7 @@ namespace icinga
Shared<Queries>::Ptr FireAndForgetQueries;
Shared<std::pair<Query, std::promise<Reply>>>::Ptr GetResultOfQuery;
Shared<std::pair<Queries, std::promise<Replies>>>::Ptr GetResultsOfQueries;
std::function<void(boost::asio::yield_context&)> Callback;
};

typedef boost::asio::ip::tcp Tcp;
Expand Down

0 comments on commit 5e810f3

Please sign in to comment.