Added a new scheduler filter for metrics
The scheduler filter MetricsFilter filters out those hosts which don't have the metrics data available as required by metric settings. This is part of the blueprint utilization-aware-scheduling. DocImpact: Added a new metrics filter. Change-Id: Ib4a898774daf683c4496ef3e9953d23027f11ac0changes/26/61926/9
parent
f5d1943992
commit
e8faf3a2a6
@ -0,0 +1,54 @@
|
||||
# Copyright (c) 2014 Intel, Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from oslo.config import cfg
|
||||
|
||||
from nova.openstack.common.gettextutils import _
|
||||
from nova.openstack.common import log as logging
|
||||
from nova.scheduler import filters
|
||||
from nova.scheduler import utils
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.import_opt('weight_setting',
|
||||
'nova.scheduler.weights.metrics',
|
||||
group='metrics')
|
||||
|
||||
|
||||
class MetricsFilter(filters.BaseHostFilter):
|
||||
"""Metrics Filter
|
||||
|
||||
This filter is used to filter out those hosts which don't have the
|
||||
corresponding metrics so these the metrics weigher won't fail due to
|
||||
these hosts.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
super(MetricsFilter, self).__init__()
|
||||
opts = utils.parse_options(CONF.metrics.weight_setting,
|
||||
sep='=',
|
||||
converter=float,
|
||||
name="metrics.weight_setting")
|
||||
self.keys = [x[0] for x in opts]
|
||||
|
||||
def host_passes(self, host_state, filter_properties):
|
||||
unavail = [i for i in self.keys if i not in host_state.metrics]
|
||||
if unavail:
|
||||
LOG.debug(_("%(host_state)s does not have the following "
|
||||
"metrics: %(metrics)s"),
|
||||
{'host_state': host_state,
|
||||
'metrics': ', '.join(unavail)})
|
||||
return len(unavail) == 0
|
Loading…
Reference in New Issue