mirror of
https://github.com/ansible/awx.git
synced 2026-05-06 17:07:36 -02:30
Fix wsrelay not retry to establish db connection (#15031)
- run_wsrelay retry to run wsrelay forever with 10 second sleep - wsrelay restart on`on_ws_heartbeat` task if fail to db connection goes away
This commit is contained in:
@@ -165,9 +165,11 @@ class Command(BaseCommand):
|
|||||||
return
|
return
|
||||||
|
|
||||||
WebsocketsMetricsServer().start()
|
WebsocketsMetricsServer().start()
|
||||||
|
websocket_relay_manager = WebSocketRelayManager()
|
||||||
|
|
||||||
try:
|
while True:
|
||||||
websocket_relay_manager = WebSocketRelayManager()
|
try:
|
||||||
asyncio.run(websocket_relay_manager.run())
|
asyncio.run(websocket_relay_manager.run())
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
logger.info('Terminating Websocket Relayer')
|
logger.info('Restarting Websocket Relayer')
|
||||||
|
time.sleep(10)
|
||||||
|
|||||||
@@ -310,19 +310,27 @@ class WebSocketRelayManager(object):
|
|||||||
for k, v in settings.LISTENER_DATABASES.get('default', {}).get('OPTIONS', {}).items():
|
for k, v in settings.LISTENER_DATABASES.get('default', {}).get('OPTIONS', {}).items():
|
||||||
database_conf['OPTIONS'][k] = v
|
database_conf['OPTIONS'][k] = v
|
||||||
|
|
||||||
async_conn = await psycopg.AsyncConnection.connect(
|
task = None
|
||||||
dbname=database_conf['NAME'],
|
|
||||||
host=database_conf['HOST'],
|
|
||||||
user=database_conf['USER'],
|
|
||||||
password=database_conf['PASSWORD'],
|
|
||||||
port=database_conf['PORT'],
|
|
||||||
**database_conf.get("OPTIONS", {}),
|
|
||||||
)
|
|
||||||
await async_conn.set_autocommit(True)
|
|
||||||
event_loop.create_task(self.on_ws_heartbeat(async_conn))
|
|
||||||
|
|
||||||
# Establishes a websocket connection to /websocket/relay on all API servers
|
# Establishes a websocket connection to /websocket/relay on all API servers
|
||||||
while True:
|
while True:
|
||||||
|
if not task or task.done():
|
||||||
|
try:
|
||||||
|
async_conn = await psycopg.AsyncConnection.connect(
|
||||||
|
dbname=database_conf['NAME'],
|
||||||
|
host=database_conf['HOST'],
|
||||||
|
user=database_conf['USER'],
|
||||||
|
password=database_conf['PASSWORD'],
|
||||||
|
port=database_conf['PORT'],
|
||||||
|
**database_conf.get("OPTIONS", {}),
|
||||||
|
)
|
||||||
|
|
||||||
|
task = event_loop.create_task(self.on_ws_heartbeat(async_conn), name="on_ws_heartbeat")
|
||||||
|
logger.info("Creating `on_ws_heartbeat` task in event loop.")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"Failed to connect to database for pg_notify: {e}")
|
||||||
|
|
||||||
future_remote_hosts = self.known_hosts.keys()
|
future_remote_hosts = self.known_hosts.keys()
|
||||||
current_remote_hosts = self.relay_connections.keys()
|
current_remote_hosts = self.relay_connections.keys()
|
||||||
deleted_remote_hosts = set(current_remote_hosts) - set(future_remote_hosts)
|
deleted_remote_hosts = set(current_remote_hosts) - set(future_remote_hosts)
|
||||||
|
|||||||
Reference in New Issue
Block a user