From: David Zafman Date: Thu, 24 Oct 2019 00:00:14 +0000 (-0700) Subject: mgr: Improve balancer module status X-Git-Tag: v12.2.13~18^2~15 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1fae640943271caccc3302df592b0db1c310bc2c;p=ceph.git mgr: Improve balancer module status Add balancer status fields so that slow optimizations can be detected Signed-off-by: David Zafman (cherry picked from commit f04c505b9dc128bdfbcca49d82f8aac4abf8b56f) --- diff --git a/src/pybind/mgr/balancer/module.py b/src/pybind/mgr/balancer/module.py index 06300166a6c..46232c9a451 100644 --- a/src/pybind/mgr/balancer/module.py +++ b/src/pybind/mgr/balancer/module.py @@ -13,6 +13,7 @@ import time from mgr_module import MgrModule, CommandResult from threading import Event from mgr_module import CRUSHMap +import datetime # available modes: 'none', 'crush', 'crush-compat', 'upmap', 'osd_weight' default_mode = 'none' @@ -274,6 +275,11 @@ class Module(MgrModule): plans = {} mode = '' optimizing = False + last_optimize_started = '' + last_optimize_duration = '' + optimize_result = '' + success_string = 'Optimization plan created successfully' + in_progress_string = 'in progress' def __init__(self, *args, **kwargs): super(Module, self).__init__(*args, **kwargs) @@ -285,6 +291,9 @@ class Module(MgrModule): s = { 'plans': list(self.plans.keys()), 'active': self.active, + 'last_optimize_started': self.last_optimize_started, + 'last_optimize_duration': self.last_optimize_duration, + 'optimize_result': self.optimize_result, 'mode': self.get_config('mode', default_mode), } return (0, json.dumps(s, indent=4), '') @@ -351,10 +360,18 @@ class Module(MgrModule): if len(invalid_pool_names): return (-errno.EINVAL, '', 'pools %s not found' % invalid_pool_names) plan = self.plan_create(command['plan'], osdmap, pools) + self.last_optimize_started = time.asctime(time.localtime()) + self.optimize_result = self.in_progress_string + start = time.time() r, detail = self.optimize(plan) - # Add plan if an optimization was created - if not r: + end = time.time() + self.last_optimize_duration = str(datetime.timedelta(seconds=(end - start))) + if r == 0: + # Add plan if an optimization was created + self.optimize_result = self.success_string self.plans[command['plan']] = plan + else: + self.optimize_result = detail return (r, '', detail) elif command['prefix'] == 'balancer rm': self.plan_rm(command['plan']) @@ -439,9 +456,17 @@ class Module(MgrModule): name = 'auto_%s' % time.strftime(TIME_FORMAT, time.gmtime()) plan = self.plan_create(name, self.get_osdmap(), []) self.optimizing = True + self.last_optimize_started = time.asctime(time.localtime()) + self.optimize_result = self.in_progress_string + start = time.time() r, detail = self.optimize(plan) + end = time.time() + self.last_optimize_duration = str(datetime.timedelta(seconds=(end - start))) if r == 0: + self.optimize_result = self.success_string self.execute(plan) + else: + self.optimize_result = detail self.optimizing = False self.log.debug('Sleeping for %d', sleep_interval) self.event.wait(sleep_interval)