Skip to content

Commit ec9943c

Browse files
committed
CHANGES:
- More robust handling of clusterdb.pkl on database password changes.
1 parent 04a3399 commit ec9943c

File tree

2 files changed

+25
-29
lines changed

2 files changed

+25
-29
lines changed

core/data/impl/nodeimpl.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -302,23 +302,7 @@ def read_locals(self) -> dict:
302302
return node
303303
raise FatalException(f"No {config_file} found. Exiting.")
304304

305-
async def init_db(self):
306-
async def check_db(url: str) -> str | None:
307-
max_attempts = self.locals.get("database", self.config.get('database')).get('max_retries', 10)
308-
for attempt in range(max_attempts + 1):
309-
try:
310-
aconn = await psycopg.AsyncConnection.connect(url, connect_timeout=5)
311-
async with aconn:
312-
cursor = await aconn.execute("SHOW server_version")
313-
return (await cursor.fetchone())[0]
314-
except ConnectionTimeout:
315-
if attempt < max_attempts:
316-
self.log.warning("- Database not available (yet), trying again ...")
317-
continue
318-
raise
319-
# we will never be here
320-
return None
321-
305+
def get_database_urls(self):
322306
cpool_url = self.config.get("database", self.locals.get('database'))['url']
323307
lpool_url = self.locals.get("database", self.config.get('database'))['url']
324308

@@ -343,7 +327,26 @@ async def check_db(url: str) -> str | None:
343327

344328
cpool_url = cpool_url.replace('SECRET', quote(cpool_pwd) or '')
345329
lpool_url = lpool_url.replace('SECRET', quote(lpool_pwd) or '')
330+
return cpool_url, lpool_url
331+
332+
async def init_db(self):
333+
async def check_db(url: str) -> str | None:
334+
max_attempts = self.locals.get("database", self.config.get('database')).get('max_retries', 10)
335+
for attempt in range(max_attempts + 1):
336+
try:
337+
aconn = await psycopg.AsyncConnection.connect(url, connect_timeout=5)
338+
async with aconn:
339+
cursor = await aconn.execute("SHOW server_version")
340+
return (await cursor.fetchone())[0]
341+
except ConnectionTimeout:
342+
if attempt < max_attempts:
343+
self.log.warning("- Database not available (yet), trying again ...")
344+
continue
345+
raise
346+
# we will never be here
347+
return None
346348

349+
cpool_url, lpool_url = self.get_database_urls()
347350
version = await check_db(lpool_url)
348351
if lpool_url != cpool_url:
349352
await check_db(cpool_url)

services/servicebus/service.py

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,15 @@ def __init__(self, node):
4848
self.init_servers()
4949
self.udp_server = None
5050
self.executor = None
51+
5152
if 'DCS' in self.locals and self.node.locals['DCS'].get('desanitize', True):
5253
if not self.node.locals['DCS'].get('cloud', False) or self.master:
5354
utils.desanitize(self)
5455
self.loop = asyncio.get_event_loop()
55-
# main.yaml database connection has priority for intercom
56-
try:
57-
password = utils.get_password('clusterdb', self.node.config_dir)
58-
except ValueError:
59-
password = utils.get_password('database', self.node.config_dir)
60-
url = self.node.config.get("database", self.node.locals.get('database'))['url'].replace(
61-
'SECRET', password)
62-
self.intercom_channel = PubSub(self.node, 'intercom', url, self.handle_rpc)
63-
# nodes.yaml database connection has priority for broadcasts
64-
url = self.node.locals.get("database", self.node.config.get('database'))['url'].replace(
65-
'SECRET', utils.get_password('database', self.node.config_dir))
66-
self.broadcasts_channel = PubSub(self.node, 'broadcasts', url, self.handle_broadcast_event)
56+
57+
cpool_url, lpool_url = self.node.get_database_urls()
58+
self.intercom_channel = PubSub(self.node, 'intercom', cpool_url, self.handle_rpc)
59+
self.broadcasts_channel = PubSub(self.node, 'broadcasts', lpool_url, self.handle_broadcast_event)
6760
self._lock = asyncio.Lock()
6861

6962
async def start(self):

0 commit comments

Comments
 (0)