diff --git a/src/fts3rest/fts3rest/lib/JobBuilder.py b/src/fts3rest/fts3rest/lib/JobBuilder.py index 09aa62818af290c6b70954c53692e4f191aee68c..3e7ffa0bc7753ffff12b414c2168755f6bfb309f 100644 --- a/src/fts3rest/fts3rest/lib/JobBuilder.py +++ b/src/fts3rest/fts3rest/lib/JobBuilder.py @@ -337,6 +337,24 @@ class JobBuilder: if max_time_in_queue is not None: expiration_time = time.time() + max_time_in_queue + if max_time_in_queue is not None and self.params["bring_online"] > 0: + # Ensure that the bringonline and expiration delta is respected + timeout_delta = seconds_from_value( + app.config.get("fts3.BringOnlineAndExpirationDelta", None) + ) + if timeout_delta is not None: + log.debug( + "Will enforce BringOnlineAndExpirationDelta=" + + str(timeout_delta) + + "s" + ) + if max_time_in_queue - self.params["bring_online"] < timeout_delta: + raise BadRequest( + "Bringonline and Expiration timeout must be at least " + + str(timeout_delta) + + " seconds apart" + ) + if self.params["overwrite"]: overwrite_flag = "Y" elif self.params["overwrite_on_retry"]: diff --git a/src/fts3rest/fts3rest/lib/JobBuilder_utils.py b/src/fts3rest/fts3rest/lib/JobBuilder_utils.py index 398c919937dcbb470c48752924da0ad0e187f934..8ee8591b752d6ef27ca8889fdeb8eaa5c4c771b7 100644 --- a/src/fts3rest/fts3rest/lib/JobBuilder_utils.py +++ b/src/fts3rest/fts3rest/lib/JobBuilder_utils.py @@ -276,6 +276,8 @@ def seconds_from_value(value): return int(value) * 60 elif suffix == "h": return int(value) * 3600 + elif suffix == "d": + return int(value) * 3600 * 24 else: return None except Exception: