Skip to content

Commit 2f7b474

Browse files
CH-67 Change listener initialization to use a singleton and the setup_event_service call idempotent
1 parent d4937fb commit 2f7b474

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

  • infrastructure/common-images/cloudharness-django/libraries/cloudharness-django/cloudharness_django/services

infrastructure/common-images/cloudharness-django/libraries/cloudharness-django/cloudharness_django/services/events.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class KeycloakMessageService:
1515
def __init__(self, kafka_group_id):
1616
self._topic = "keycloak.fct.admin"
1717
self.kafka_group_id = kafka_group_id
18+
self.topics_initialized = False
1819

1920
@staticmethod
2021
def event_handler(app, event_client, message):
@@ -50,6 +51,9 @@ def event_handler(app, event_client, message):
5051
raise e
5152

5253
def init_topics(self):
54+
if self.topics_initialized:
55+
return
56+
5357
log.info("Starting Kafka consumer threads")
5458
try:
5559
event_client = EventClient(self._topic)
@@ -59,6 +63,7 @@ def init_topics(self):
5963
except TopicAlreadyExistsError as e:
6064
pass
6165
event_client.async_consume(app={}, group_id=self.kafka_group_id, handler=KeycloakMessageService.event_handler)
66+
self.topics_initialized = True
6267
except Exception as e:
6368
log.error(f"Error creating topic {self._topic}", exc_info=e)
6469

@@ -79,8 +84,15 @@ def setup_event_service(self):
7984
pass
8085

8186

87+
_message_service_singleton = None
88+
89+
8290
def init_listener():
8391
if not hasattr(settings, "PROJECT_NAME"):
8492
raise KeycloakOIDCNoProjectError("Project name not found, please set PROJECT_NAME in your settings module")
8593

86-
KeycloakMessageService(settings.PROJECT_NAME).setup_event_service()
94+
global _message_service_singleton
95+
if _message_service_singleton is None:
96+
_message_service_singleton = KeycloakMessageService(settings.PROJECT_NAME).setup_event_service()
97+
98+
_message_service_singleton.setup_event_service()

0 commit comments

Comments
 (0)