Fix a race that can cause hydra-queue-runner to ignore newly added builds

As @dtzWill discovered, with the concurrent hydra-evaluator, there can
be multiple active transactions adding builds to the database. As a
result, builds can become visible in a non-monotonically increasing
order, breaking the queue monitor's assumption that build IDs only go
up.

The fix is to have hydra-eval-jobset provide the lowest build ID it
just added in the builds_added notification, and have the queue
monitor check from there.

Fixes #496.
This commit is contained in:
Eelco Dolstra
2017-07-21 14:25:33 +02:00
parent b0432c7762
commit dc5e0b120a
5 changed files with 28 additions and 12 deletions

View File

@ -21,18 +21,23 @@ struct Connection : pqxx::connection
};
struct receiver : public pqxx::notification_receiver
class receiver : public pqxx::notification_receiver
{
bool status = false;
std::experimental::optional<std::string> status;
public:
receiver(pqxx::connection_base & c, const std::string & channel)
: pqxx::notification_receiver(c, channel) { }
void operator() (const std::string & payload, int pid) override
{
status = true;
status = payload;
};
bool get() {
bool b = status;
status = false;
return b;
std::experimental::optional<std::string> get() {
auto s = status;
status = std::experimental::nullopt;
return s;
}
};