Ignore removed provider in _cleanupLeakedInstances

Sometimes when a provider is removed _cleanupLeakedInstances fails
with [1] because the provider has been removed between config
iteration and getting the manager. Getting a non existent provider
should return None instead of an exception so we can skip that
provider cleanly without the need of catching exceptions.

[1] Traceback
ERROR:nodepool.CleanupWorker:Exception in CleanupWorker (leaked instance cleanup)
Traceback (most recent call last):
  File "/Users/q282539/repos/cc/nodepool/nodepool/launcher.py", line 598, in _run
    task()
  File "/Users/q282539/repos/cc/nodepool/nodepool/launcher.py", line 473, in _cleanupLeakedInstances
    manager = self._nodepool.getProviderManager(provider.name)
  File "/Users/q282539/repos/cc/nodepool/nodepool/launcher.py", line 792, in getProviderManager
    return self.config.provider_managers[provider_name]
KeyError: 'fake-provider2'

Change-Id: Iae1266efc6e17b50b5a176afc5b28f26f2fa7177
This commit is contained in:
Tobias Henkel 2018-10-08 15:19:56 +02:00
parent ad49f5421c
commit 17ebcdd286
No known key found for this signature in database
GPG Key ID: 03750DEC158E5FA2
1 changed files with 3 additions and 2 deletions

View File

@ -471,7 +471,8 @@ class CleanupWorker(BaseCleanupWorker):
'''
for provider in self._nodepool.config.providers.values():
manager = self._nodepool.getProviderManager(provider.name)
manager.cleanupLeakedResources()
if manager:
manager.cleanupLeakedResources()
def _cleanupMaxReadyAge(self):
'''
@ -789,7 +790,7 @@ class NodePool(threading.Thread):
return self.zk
def getProviderManager(self, provider_name):
return self.config.provider_managers[provider_name]
return self.config.provider_managers.get(provider_name)
def getPoolWorkers(self, provider_name):
return [t for t in self._pool_threads.values() if