Refactor OPC server integrity checks to be asynchronous
Updated the Ingestor and IngestorManager classes to use async methods for checking OPC server integrity and shutting down OPC managers. Adjusted related tests to ensure proper mocking of asynchronous behavior.
This commit is contained in:
@@ -414,7 +414,7 @@ class Ingestor:
|
||||
|
||||
# Check OPC cycles
|
||||
self.logger.info('Checking OPC servers integrity...')
|
||||
self.ingestor_manager.check_opc_servers_integrity()
|
||||
await self.ingestor_manager.check_opc_servers_integrity()
|
||||
|
||||
self.logger.info('Updating managed tags...')
|
||||
await self.update_ingestor_manager(current_managed_tags)
|
||||
|
||||
@@ -228,7 +228,7 @@ class IngestorManager(BaseActivity):
|
||||
|
||||
elif server_instance.config != server_config:
|
||||
self.logger.warning(f'Reinitializing OPC manager for server {server}')
|
||||
server_instance.disconnect()
|
||||
await server_instance.shutdown()
|
||||
del self.opc_managers[server]
|
||||
server_instance = await self.initialize_opc_from_config(server_config)
|
||||
else:
|
||||
@@ -254,12 +254,12 @@ class IngestorManager(BaseActivity):
|
||||
self.logger.warning(
|
||||
f'Server {server} not found in managed tags. Desconnecting from server.'
|
||||
)
|
||||
await self.opc_managers[server].disconnect()
|
||||
await self.opc_managers[server].shutdown()
|
||||
self.opc_managers.pop(server, None)
|
||||
|
||||
metrics.OPC_MANAGERS_ACTIVE.labels(pod_id=self.pod_id).set(len(self.opc_managers))
|
||||
|
||||
def check_opc_servers_integrity(self):
|
||||
async def check_opc_servers_integrity(self):
|
||||
"""
|
||||
Checks the integrity of the OPC servers and updates the OPC servers if necessary.
|
||||
|
||||
@@ -282,6 +282,7 @@ class IngestorManager(BaseActivity):
|
||||
self.logger.warning(f'OPC server {server} is lost. Server will be disconnected.')
|
||||
|
||||
for slot, _config in self.managed_tags.items():
|
||||
await self.managed_tags[slot][server].shutdown()
|
||||
self.managed_tags[slot].pop(server, None)
|
||||
|
||||
metrics.OPC_MANAGERS_ACTIVE.labels(pod_id=self.pod_id).set(len(self.opc_managers))
|
||||
|
||||
@@ -107,6 +107,9 @@ class OpcManager(BaseActivity):
|
||||
f'nodes={self.nodes}, subscriptions={self.subscriptions}'
|
||||
)
|
||||
|
||||
def __del__(self):
|
||||
asyncio.run(self.shutdown())
|
||||
|
||||
async def shutdown(self):
|
||||
"""
|
||||
Comprehensive cleanup method for graceful shutdown.
|
||||
|
||||
Reference in New Issue
Block a user