Skip to content

Commit 96736c3

Browse files
authored
Merge pull request #154 from IATI/develop
Fix MQ message sending error handling
2 parents b657020 + 4e289af commit 96736c3

4 files changed

Lines changed: 57 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
1414

1515
### Removed
1616

17+
## [1.4.9] - 2026-05-25
18+
19+
### Fixed
20+
21+
- Updated error handling for MQ sending so that any errors sending dataset
22+
check results doesn't cause checker loop to exit early.
23+
1724
## [1.4.8] - 2026-05-18
1825

1926
### Removed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "bulk-data-service"
3-
version = "1.4.8"
3+
version = "1.4.9"
44
requires-python = ">= 3.12.6"
55
readme = "README.md"
66
dependencies = [

src/utilities/azure.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,14 @@ def send_dataset_check_result_message(context: BDSContext, msg_payload: dict, re
184184
try:
185185
send_message_to_iati_mq(context, topic_name, msg_payload)
186186
break
187-
except azure.servicebus.exceptions.ServiceBusConnectionError as e:
187+
except azure.servicebus.exceptions.ServiceBusError as e:
188188
if retry_number == retries:
189-
raise RuntimeError("{}".format(e))
189+
context.logger.error(
190+
"Dataset check result message could not be sent to the IATI MQ after {} attempts. "
191+
"Error details: {}".format(retry_number, e)
192+
)
193+
except Exception as e:
194+
raise RuntimeError("{}".format(e))
190195

191196

192197
def send_message_to_iati_mq(context: BDSContext, topic_name, msg_payload):

tests/integration/test_dataset_update.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import uuid
33

44
import pytest
5+
from azure.servicebus.exceptions import ServiceBusQuotaExceededError
56

67
from bulk_data_service.checker import checker_run
78
from helpers.data_helpers import (
@@ -199,6 +200,47 @@ def test_update_dataset_registration_details(get_and_clear_up_context, field, or
199200
assert datasets_in_bds[dataset_id][field] == expected
200201

201202

203+
def test_update_dataset_mq_message_send_doesnt_crash_on_error(monkeypatch, get_and_clear_up_context): # noqa: F811
204+
205+
context = get_and_clear_up_context
206+
207+
class FailingTopicSender:
208+
def send_messages(self, *args, **kwargs):
209+
raise ServiceBusQuotaExceededError(
210+
message="Test simulated service bus send failure",
211+
)
212+
213+
def close(self):
214+
return None
215+
216+
class FakeServiceBusClient:
217+
def get_topic_sender(self, *args, **kwargs):
218+
return FailingTopicSender()
219+
220+
def close(self):
221+
return None
222+
223+
class FakeServiceFactory:
224+
def get_service_bus_client(self, *args, **kwargs):
225+
return FakeServiceBusClient()
226+
227+
def get_suitecrm_client(self):
228+
raise NotImplementedError
229+
230+
monkeypatch.setattr(context, "_service_factory", FakeServiceFactory())
231+
232+
dataset_id = uuid.UUID("c8a40aa5-9f31-4bcf-a36f-51c1fc2cc159")
233+
234+
context["DATA_REGISTRY_BASE_URL"] = "http://localhost:3000/ckan-registration/datasets-01-1-dataset"
235+
datasets_in_bds = {}
236+
checker_run(context, datasets_in_bds)
237+
238+
context.logger.error.assert_called_once()
239+
assert context.logger.error.call_args.args[0].startswith(
240+
"Dataset check result message could not be sent to the IATI MQ"
241+
)
242+
243+
202244
def test_dataset_download_404s_then_successful(get_and_clear_up_context): # noqa: F811
203245

204246
context = get_and_clear_up_context

0 commit comments

Comments
 (0)