- opts = {'all_tenants': True, 'host': hostname}
- for server in self.nova.servers.list(detailed=False, search_opts=opts):
- self.nova.servers.reset_state(server, 'error')
-
- # NOTE: We use our own client here instead of this novaclient for a
- # workaround. Once keystone provides v2.1 nova api endpoint
- # in the service catalog which is configured by OpenStack
- # installer, we can use this:
- #
- # self.nova.services.force_down(hostname, 'nova-compute', True)
- #
- nova_force_down.force_down(hostname)
+ threads = []
+ if len(self.servers[hostname]) > self.NUMBER_OF_CLIENTS:
+ # TODO(tojuvone): This could be enhanced in future with dynamic
+ # reuse of self.novaclients when all threads in use
+ LOG.error('%d servers in %s. Can handle only %d'%(
+ self.servers[hostname], hostname, self.NUMBER_OF_CLIENTS))
+ for nova, server in zip(self.novaclients, self.servers[hostname]):
+ t = ThreadedResetState(nova, "error", server)
+ t.start()
+ threads.append(t)
+ for t in threads:
+ t.join()
+ self.nova.services.force_down(hostname, 'nova-compute', True)
+ LOG.info('doctor mark host(%s) down at %s' % (hostname, time.time()))