summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordongwenjuan <dong.wenjuan@zte.com.cn>2016-09-12 16:57:57 +0800
committerdongwenjuan <dong.wenjuan@zte.com.cn>2016-09-20 13:43:50 +0800
commit00ba87a34f69b44962c7a885191ea38f8cc1b440 (patch)
tree8423171e32842cfde2fe205da1cca051af6964e7
parent194f2ea113c07ff6c66e67b368abce0bfa22f595 (diff)
cache host-vm list when inspect start to run
As getting servers list under all tenants in specify host takes most of the time when inspector handling the host failure event, cache the host-vms list when inspector start run to improve the performance. add receive event time in inspector Change-Id: I5fca2816ae9a176be4791bf5dbe26b1c30e743c5 Signed-off-by: dongwenjuan <dong.wenjuan@zte.com.cn>
-rw-r--r--tests/inspector.py25
1 files changed, 20 insertions, 5 deletions
diff --git a/tests/inspector.py b/tests/inspector.py
index c8fb00f9..62614158 100644
--- a/tests/inspector.py
+++ b/tests/inspector.py
@@ -8,10 +8,12 @@
##############################################################################
import argparse
+import collections
from flask import Flask
from flask import request
import json
import os
+import time
import novaclient.client as novaclient
@@ -23,6 +25,7 @@ class DoctorInspectorSample(object):
nova_api_version = '2.11'
def __init__(self):
+ self.servers = collections.defaultdict(list)
self.nova = novaclient.Client(self.nova_api_version,
os.environ['OS_USERNAME'],
os.environ['OS_PASSWORD'],
@@ -31,10 +34,22 @@ class DoctorInspectorSample(object):
connection_pool=True)
# check nova is available
self.nova.servers.list(detailed=False)
+ self.init_servers_list()
+
+ def init_servers_list(self):
+ opts = {'all_tenants': True}
+ servers=self.nova.servers.list(search_opts=opts)
+ self.servers.clear()
+ for server in servers:
+ try:
+ host=server.__dict__.get('OS-EXT-SRV-ATTR:host')
+ self.servers[host].append(server)
+ app.logger.debug('get hostname=%s from server=%s' % (host, server))
+ except Exception as e:
+ app.logger.debug('can not get hostname from server=%s' % server)
def disable_compute_host(self, hostname):
- opts = {'all_tenants': True, 'host': hostname}
- for server in self.nova.servers.list(detailed=False, search_opts=opts):
+ for server in self.servers[hostname]:
self.nova.servers.reset_state(server, 'error')
# NOTE: We use our own client here instead of this novaclient for a
@@ -48,12 +63,13 @@ class DoctorInspectorSample(object):
app = Flask(__name__)
+app.debug = True
inspector = DoctorInspectorSample()
@app.route('/events', methods=['POST'])
def event_posted():
- app.logger.debug('event posted')
+ app.logger.debug('event posted at %s' % time.time())
app.logger.debug('inspector = %s' % inspector)
app.logger.debug('received data = %s' % request.data)
d = json.loads(request.data)
@@ -73,8 +89,7 @@ def get_args():
def main():
args = get_args()
- app.run(port=args.port, debug=True)
-
+ app.run(port=args.port)
if __name__ == '__main__':
main()