Avoid waits during node secondary

Waiting for the daemons to stop took too much time on some nodes and
could throw off the lockstep. Instead, leverage background=True to run
the systemctl os_commands in the background (when they complete is
irrelevant), stop the Metadata API first, and don't delay during its
stop at all.
This commit is contained in:
Joshua Boniface 2023-11-16 02:34:12 -05:00
parent 0bec6abe71
commit c76a5afd04
2 changed files with 5 additions and 8 deletions

View File

@ -22,7 +22,6 @@
import gevent.pywsgi import gevent.pywsgi
import flask import flask
import sys import sys
import time
import psycopg2 import psycopg2
from threading import Thread from threading import Thread
@ -123,9 +122,7 @@ class MetadataAPIInstance(object):
self.logger.out("Stopping Metadata API at 169.254.169.254:80", state="i") self.logger.out("Stopping Metadata API at 169.254.169.254:80", state="i")
try: try:
self.md_http_server.stop() self.md_http_server.stop()
time.sleep(0.1)
self.md_http_server.close() self.md_http_server.close()
time.sleep(0.1)
self.md_http_server = None self.md_http_server = None
self.logger.out("Successfully stopped Metadata API", state="o") self.logger.out("Successfully stopped Metadata API", state="o")
except Exception as e: except Exception as e:

View File

@ -670,13 +670,13 @@ class NodeInstance(object):
self.zkhandler.write([("base.config.primary_node.sync_lock", "")]) self.zkhandler.write([("base.config.primary_node.sync_lock", "")])
lock.release() lock.release()
self.logger.out("Released write lock for synchronization phase B", state="o") self.logger.out("Released write lock for synchronization phase B", state="o")
# 3. Stop client API # 3. Stop metadata API
self.metadata_api.stop()
# 4. Stop client API
if self.config["enable_api"]: if self.config["enable_api"]:
self.logger.out("Stopping PVC API client service", state="i") self.logger.out("Stopping PVC API client service", state="i")
common.run_os_command("systemctl stop pvcapid.service") common.run_os_command("systemctl stop pvcapid.service", background=True)
common.run_os_command("systemctl disable pvcapid.service") common.run_os_command("systemctl disable pvcapid.service", background=True)
# 4. Stop metadata API
self.metadata_api.stop()
time.sleep(0.1) # Time fir new writer to acquire the lock time.sleep(0.1) # Time fir new writer to acquire the lock
# Synchronize nodes C (I am reader) # Synchronize nodes C (I am reader)