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);
|
daggy_runner::Capacity getRunnerCapacity(const std::string &runnerURL);
|
||||||
|
|
||||||
|
std::vector<daggy_runner::Capacity> runnersMaxCapacities_;
|
||||||
|
|
||||||
std::mutex runnersGuard_;
|
std::mutex runnersGuard_;
|
||||||
std::condition_variable runnersCV_;
|
std::condition_variable runnersCV_;
|
||||||
std::unordered_map<std::string, daggy_runner::Capacity> runners_;
|
std::unordered_map<std::string, daggy_runner::Capacity> runners_;
|
||||||
|
|||||||
@@ -113,6 +113,20 @@ bool DaggyRunnerTaskExecutor::validateTaskParameters(const ConfigValues &job)
|
|||||||
{
|
{
|
||||||
daggy_runner::validateTaskParameters(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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +233,10 @@ daggy_runner::Capacity DaggyRunnerTaskExecutor::getRunnerCapacity(
|
|||||||
void DaggyRunnerTaskExecutor::addRunner(const std::string &url)
|
void DaggyRunnerTaskExecutor::addRunner(const std::string &url)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(runnersGuard_);
|
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()
|
void DaggyRunnerTaskExecutor::monitor()
|
||||||
|
|||||||
Reference in New Issue
Block a user