Adding check for unsatisfyable requirements in a remote task

This commit is contained in:
Ian Roddis
2022-02-23 13:34:28 -04:00
parent 6389f1a508
commit 3822426446
2 changed files with 20 additions and 1 deletions

View File

@@ -74,6 +74,8 @@ namespace daggy::executors::task {
daggy_runner::Capacity getRunnerCapacity(const std::string &runnerURL);
std::vector<daggy_runner::Capacity> runnersMaxCapacities_;
std::mutex runnersGuard_;
std::condition_variable runnersCV_;
std::unordered_map<std::string, daggy_runner::Capacity> runners_;

View File

@@ -113,6 +113,20 @@ bool DaggyRunnerTaskExecutor::validateTaskParameters(const ConfigValues &job)
{
daggy_runner::validateTaskParameters(job);
// Ensure the job is actually runable
auto cores = std::stoll(std::get<std::string>(job.at("cores")));
auto memoryMB = std::stoll(std::get<std::string>(job.at("memoryMB")));
auto it =
std::find_if(runnersMaxCapacities_.begin(), runnersMaxCapacities_.end(),
[&](const auto &cap) {
return (cores <= cap.cores and memoryMB <= cap.memoryMB);
});
if (it == runnersMaxCapacities_.end())
throw std::runtime_error("Task requires " + std::to_string(cores) +
" cores and " + std::to_string(memoryMB) +
" MB memory, but no runner "
"can satisty those requirements");
return true;
}
@@ -219,7 +233,10 @@ daggy_runner::Capacity DaggyRunnerTaskExecutor::getRunnerCapacity(
void DaggyRunnerTaskExecutor::addRunner(const std::string &url)
{
std::lock_guard<std::mutex> lock(runnersGuard_);
runners_.emplace(url, getRunnerCapacity(url));
auto maxCapacity = getRunnerCapacity(url);
runnersMaxCapacities_.push_back(maxCapacity);
runners_.emplace(url, maxCapacity);
}
void DaggyRunnerTaskExecutor::monitor()