Adding check for unsatisfyable requirements in a remote task
This commit is contained in:
@@ -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_;
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user