From 1cf51ae531b073b012413adc5b94799d4c9997e3 Mon Sep 17 00:00:00 2001 From: Radu Carpa Date: Mon, 13 Jun 2022 13:43:51 +0200 Subject: [PATCH] Monitoring & Logging: fix transfer_link sent by receiver. Closes #5640 Under normal operation, when we get a notification from FTS about a transfer completion, we know about the transfer and retrieve it from the database. It doesn't cost us anything to use the request.external_host field from the db table, which has the correct format. We can ignore the occurances when it's not the case. It means that we got a notification from FTS about a transfer submitted by rucio, but about which rucio doesn't know anything.... we would have bigger problems to investigate in such case than a wrong monitoring link. --- lib/rucio/tests/test_conveyor.py | 1 + lib/rucio/transfertool/fts3.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/rucio/tests/test_conveyor.py b/lib/rucio/tests/test_conveyor.py index e2366157d9c..4cf26204ad9 100644 --- a/lib/rucio/tests/test_conveyor.py +++ b/lib/rucio/tests/test_conveyor.py @@ -469,6 +469,7 @@ def test_multisource_receiver(vo, did_factory, replica_client, root_account, met assert msg_submitted['payload']['request-id'] == request['id'] msg_done = next(msg for msg in msgs if msg['event_type'] == 'transfer-done') assert msg_done['payload']['request-id'] == request['id'] + assert msg_done['payload']['transfer_link'].startswith('https://fts:8449/') finally: receiver_graceful_stop.set() receiver_thread.join(timeout=5) diff --git a/lib/rucio/transfertool/fts3.py b/lib/rucio/transfertool/fts3.py index 7df82c34a2d..0db37f81f31 100644 --- a/lib/rucio/transfertool/fts3.py +++ b/lib/rucio/transfertool/fts3.py @@ -358,6 +358,7 @@ def __init__(self, external_host, request_id, request=None): # Initialized in child class initialize(): self._reason = None self._src_rse = None + self._fts_address = self.external_host # Supported db fields bellow: self.state = None self.external_id = None @@ -393,7 +394,7 @@ def get_monitor_msg_fields(self, session, logger=logging.log): return fields def _transfer_link(self): - return '%s/fts3/ftsmon/#/job/%s' % (self.external_host.replace('8446', '8449'), self._transfer_id) + return '%s/fts3/ftsmon/#/job/%s' % (self._fts_address.replace('8446', '8449'), self._transfer_id) def _find_attribute_updates(self, request, new_state, reason, overwrite_corrupted_files): attributes = None @@ -514,6 +515,7 @@ def initialize(self, session, logger=logging.log): self._reason = reason self._src_rse = src_rse_name + self._fts_address = request['external_host'] or self._fts_address self.state = new_state self.external_id = transfer_id