diff --git a/src/fts3rest/fts3rest/lib/JobBuilder.py b/src/fts3rest/fts3rest/lib/JobBuilder.py index 706c9e5a5a3dc6aebea820a2c14273d362f00d78..b195a1aa3f54694ae1a372bb94969301450882f9 100644 --- a/src/fts3rest/fts3rest/lib/JobBuilder.py +++ b/src/fts3rest/fts3rest/lib/JobBuilder.py @@ -294,6 +294,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: @@ -492,6 +494,15 @@ class JobBuilder(object): 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( + pylons.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 HTTPBadRequest('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']: