From bf62d8a74591353cf2aff43e9aeb41be81da8bef Mon Sep 17 00:00:00 2001 From: "Mark A. Grondona" Date: Tue, 31 Oct 2023 19:49:07 -0700 Subject: [PATCH] traverser: set default job duration based on current time left Problem: When a job is submitted without a duration specified and the current graph has a limited duration, the jobspec duration is set to the graph duration. This is not ideal for any job submitted after the first instant of the graph's lifetime, since the job's expiration will be set after the instance has expired. Ideally, jobs without a specified duration should inherit the instance expiration not its duration. Do the next best thing and set the duration to the instance expiration (graph_end) - now, which should result in the expiration of the job matching that of the instance. Fixes #1103 --- resource/traversers/dfu_impl.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resource/traversers/dfu_impl.hpp b/resource/traversers/dfu_impl.hpp index 23048c01a..098fcd41c 100644 --- a/resource/traversers/dfu_impl.hpp +++ b/resource/traversers/dfu_impl.hpp @@ -71,7 +71,8 @@ struct jobmeta_t { jobid = id; alloc_type = alloc; int64_t g_duration = std::chrono::duration_cast - (graph_duration.graph_end - graph_duration.graph_start).count (); + (graph_duration.graph_end - + std::chrono::system_clock::now()).count (); if (g_duration <= 0) { errno = EINVAL;