Adding in queuing in the daggyd process for more even distribution

This commit is contained in:
Ian Roddis
2022-01-13 16:17:43 -04:00
parent 070d2ceddf
commit c09d5b7d8b
2 changed files with 130 additions and 124 deletions

View File

@@ -2,7 +2,8 @@
#include <rapidjson/document.h>
#include <random>
#include <condition_variable>
#include <deque>
#include "TaskExecutor.hpp"
@@ -56,6 +57,7 @@ namespace daggy::executors::task {
private:
void monitor();
void dispatchQueuedTasks();
struct RunningTask
{
@@ -63,19 +65,32 @@ namespace daggy::executors::task {
DAGRunID runID;
std::string taskName;
std::string runnerURL;
uint32_t retries;
daggy_runner::Capacity resources;
};
struct QueuedTask
{
Task task;
RunningTask rt;
};
std::mutex queuedGuard_;
std::condition_variable queuedCV_;
std::deque<QueuedTask> queuedTasks_;
// Resolves jobs through polling
std::atomic<bool> running_;
bool promptTask_;
std::thread monitorWorker_;
std::thread dispatchWorker_;
struct RunnerCapacity
{
daggy_runner::Capacity current;
daggy_runner::Capacity total;
};
RunnerCapacity getRunnerCapacity(const std::string &runnerURL);
std::mutex runnersGuard_;
std::unordered_map<std::string, RunnerCapacity> runners_;