Merge "Offload openstack delete api calls to an executor"

This commit is contained in:
Zuul 2023-03-15 13:37:00 +00:00 committed by Gerrit Code Review
commit eb937a069e
2 changed files with 24 additions and 9 deletions

View File

@ -101,6 +101,7 @@ class OpenStackResource(statemachine.Resource):
class OpenStackDeleteStateMachine(statemachine.StateMachine):
FLOATING_IP_DELETING = 'deleting floating ip'
SERVER_DELETE_SUBMIT = 'submit delete server'
SERVER_DELETE = 'delete server'
SERVER_DELETING = 'deleting server'
COMPLETE = 'complete'
@ -123,7 +124,7 @@ class OpenStackDeleteStateMachine(statemachine.StateMachine):
self.adapter._deleteFloatingIp(fip)
self.state = self.FLOATING_IP_DELETING
if not self.floating_ips:
self.state = self.SERVER_DELETE
self.state = self.SERVER_DELETE_SUBMIT
if self.state == self.FLOATING_IP_DELETING:
fips = []
@ -137,11 +138,17 @@ class OpenStackDeleteStateMachine(statemachine.StateMachine):
if self.floating_ips:
return
else:
self.state = self.SERVER_DELETE
self.state = self.SERVER_DELETE_SUBMIT
if self.state == self.SERVER_DELETE_SUBMIT:
self.delete_future = self.adapter._submitApi(
self.adapter._deleteServer,
self.external_id)
self.state = self.SERVER_DELETE
if self.state == self.SERVER_DELETE:
self.adapter._deleteServer(self.external_id)
self.state = self.SERVER_DELETING
if self.adapter._completeApi(self.delete_future):
self.state = self.SERVER_DELETING
if self.state == self.SERVER_DELETING:
self.server = self.adapter._refreshServerDelete(self.server)
@ -306,8 +313,7 @@ class OpenStackCreateStateMachine(statemachine.StateMachine):
reason=self.server['fault']['message']))
if self.external_id:
try:
self.server = self.adapter._deleteServer(
self.external_id)
self.adapter._deleteServer(self.external_id)
except Exception:
self.log.exception("Error deleting server:")
self.server = None
@ -320,7 +326,7 @@ class OpenStackCreateStateMachine(statemachine.StateMachine):
if self.state == self.SERVER_RETRY:
if self.external_id:
try:
self.server = self.adapter._deleteServer(self.external_id)
self.adapter._deleteServer(self.external_id)
except Exception:
self.log.exception("Error deleting server:")
# We must keep trying the delete until timeout in
@ -395,7 +401,9 @@ class OpenStackAdapter(statemachine.Adapter):
f"nodepool.OpenStackAdapter.{provider_config.name}")
self.provider = provider_config
workers = 8
# The default http connection pool size is 10; match it for
# efficiency.
workers = 10
self.log.info("Create executor with max workers=%s", workers)
self.api_executor = ThreadPoolExecutor(
thread_name_prefix=f'openstack-api-{provider_config.name}',
@ -785,6 +793,7 @@ class OpenStackAdapter(statemachine.Adapter):
def _deleteServer(self, external_id):
with Timer(self.log, 'API call delete_server'):
self._client.delete_server(external_id)
return True
def _getFlavorFromServer(self, server):
# In earlier versions of nova or the sdk, flavor has just an id.

View File

@ -548,8 +548,14 @@ class StateMachineProvider(Provider, QuotaSupport):
super().start(zk_conn)
self.running = True
self._zk = zk_conn
# Matching the workers in openstack/adapter.py
# TODO: unify thread pool handling across drivers
workers = 10
self.log.info("Create keyscan executor with max workers=%s", workers)
self.keyscan_worker = ThreadPoolExecutor(
thread_name_prefix=f'keyscan-{self.provider.name}')
thread_name_prefix=f'keyscan-{self.provider.name}',
max_workers=workers)
self.state_machine_thread = threading.Thread(
target=self._runStateMachines,
daemon=True)