Merge "Offload openstack delete api calls to an executor"
This commit is contained in:
commit
eb937a069e
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue