Changing singleton usage
We won't be talking to any more than one temporal cluster at a
time, so it does not make sense to have clients cached by API
endpoint. Instead the main() of any program wanting to use
temporal can just set the class level variable and then simply
instantiate the class anywhere it is needed and it will
manage the cached client without needing the temporal API URL
Change-Id: Ia22635dc454e8df14ca22bc1e095f625d7e7337b
Signed-off-by: Mark Beierl <mark.beierl@canonical.com>
diff --git a/osm_common/wftemporal.py b/osm_common/wftemporal.py
index 0f7d421..90b6497 100644
--- a/osm_common/wftemporal.py
+++ b/osm_common/wftemporal.py
@@ -22,11 +22,11 @@
class WFTemporal(object):
- clients = {}
+ _client = None
+ temporal_api = None
- def __init__(self, temporal_api=None, logger_name="temporal.client"):
+ def __init__(self, logger_name="temporal.client"):
self.logger = logging.getLogger(logger_name)
- self.temporal_api = temporal_api
async def execute_workflow(
self, task_queue: str, workflow_name: str, workflow_data: any, id: str = None
@@ -44,24 +44,16 @@
async def start_workflow(
self, task_queue: str, workflow_name: str, workflow_data: any, id: str = None
):
- client = await self.get_client()
+ if WFTemporal._client is None:
+ self.logger.debug(
+ f"No cached client found, connecting to {WFTemporal.temporal_api}"
+ )
+ WFTemporal._client = await Client.connect(WFTemporal.temporal_api)
+
if id is None:
id = str(uuid.uuid4())
self.logger.info(f"Starting workflow {workflow_name}, id {id}")
- handle = await client.start_workflow(
+ handle = await WFTemporal._client.start_workflow(
workflow=workflow_name, arg=workflow_data, id=id, task_queue=task_queue
)
return handle
-
- async def get_client(self):
- if self.temporal_api in WFTemporal.clients:
- client = WFTemporal.clients[self.temporal_api]
- else:
- self.logger.debug(
- f"No cached client found, connecting to {self.temporal_api}"
- )
- client = await Client.connect(self.temporal_api)
- WFTemporal.clients[self.temporal_api] = client
-
- self.logger.debug(f"Using client {client} for {self.temporal_api}")
- return client