Speed up openstack server listing
The old openstack driver used the "bare=True" argument to list_servers and then relied on wait_for_server to expand the network information on the server when it was active. The new driver omits the bare argument meaning that neutron is consulted for all server lists. This can be very slow on large systems, so let's switch back to bare=True, but instead of calling wait_for_server (which we are unable to do in the state machine framework since state machine runs are expected to be quick), we add the interface data ourselves when refreshing information about active servers. Change-Id: Ia7dce406e14b06166d5fa1d5d9bea0e661122dde
This commit is contained in:
parent
ad7bf9aaeb
commit
a6c0159e40
|
@ -444,3 +444,6 @@ class FakeAdapter(OpenStackAdapter):
|
|||
self.createServer_fails_with_external_id -= 1
|
||||
raise OpenStackCloudCreateException('server', 'fakeid')
|
||||
return super()._createServer(*args, **kwargs)
|
||||
|
||||
def _expandServer(self, server):
|
||||
return server
|
||||
|
|
|
@ -627,21 +627,27 @@ class OpenStackAdapter(statemachine.Adapter):
|
|||
|
||||
@cachetools.func.ttl_cache(maxsize=1, ttl=CACHE_TTL)
|
||||
def _listServers(self):
|
||||
return self._client.list_servers()
|
||||
return self._client.list_servers(bare=True)
|
||||
|
||||
@cachetools.func.ttl_cache(maxsize=1, ttl=CACHE_TTL)
|
||||
def _listFloatingIps(self):
|
||||
return self._client.list_floating_ips()
|
||||
|
||||
def _refreshServer(self, obj):
|
||||
for server in self._listServers():
|
||||
if server.id == obj.id:
|
||||
return server
|
||||
ret = self._getServer(obj.id)
|
||||
if ret:
|
||||
return ret
|
||||
return obj
|
||||
|
||||
def _expandServer(self, server):
|
||||
return openstack.cloud.meta.add_server_interfaces(
|
||||
self._client, server)
|
||||
|
||||
def _getServer(self, external_id):
|
||||
for server in self._listServers():
|
||||
if server.id == external_id:
|
||||
if server.status in ['ACTIVE', 'ERROR']:
|
||||
return self._expandServer(server)
|
||||
return server
|
||||
return None
|
||||
|
||||
|
|
Loading…
Reference in New Issue