From faa4b32bdc6113516ffd3d30761c2bc97a28c062 Mon Sep 17 00:00:00 2001
From: Joao Lopes <joao.pedro.batista.lopes@cern.ch>
Date: Tue, 12 Oct 2021 18:23:56 +0200
Subject: [PATCH] FTS-1731: Migrate FTS-1728

  - https://gitlab.cern.ch/fts/fts-rest/-/commit/fe704b5ab73e30f6eb2934d24c8f92c181e3db63
---
 src/fts3rest/fts3rest/lib/JobBuilder.py       | 18 ++++++++++++++++++
 src/fts3rest/fts3rest/lib/JobBuilder_utils.py |  2 ++
 2 files changed, 20 insertions(+)

diff --git a/src/fts3rest/fts3rest/lib/JobBuilder.py b/src/fts3rest/fts3rest/lib/JobBuilder.py
index 09aa6281..3e7ffa0b 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 398c9199..8ee8591b 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:
-- 
GitLab