3571a607f2
Short version: make use of the new distributed workload partitioning utilities in Ceilometer to simplify the alarm evaluation partitioning. Code is intentionally non-consolidated to enable easy deletion of 'singleton' and 'partitioned' services in the Kilo cycle. Longer version: The assignment of alarms to individual partitioned alarm evaluators now follows the same pattern as the division of resources between scaled-out central agents. The evaluators each join a tooz group and emit a periodic heartbeat to tooz. Tooz provides distributed group membership information. Thus the set of evaluators share minimal knowledge, but this is sufficient to guide a hash-based approach to determining whether an individual alarm UUID falls under the responsibility of an individual evaluator. The current RPC-fanout-based presence reporting and the master/slave division of responsibilities can be dropped in the next cycle. Also the rebalancing logic when a certain threshold of alarm deletion is crossed will no longer be required. DocImpact Change-Id: Ica8dae569f9ff1c2f8fe58be6ae2def66be0da54 Implements: blueprint hash-based-alarm-partitioning
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
# -*- encoding: utf-8 -*-
|
|
#
|
|
# Copyright 2014 OpenStack Foundation
|
|
#
|
|
# 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 stevedore import driver
|
|
|
|
from ceilometer.alarm import service as alarm_service
|
|
from ceilometer.openstack.common import log
|
|
from ceilometer.openstack.common import service as os_service
|
|
from ceilometer import service
|
|
|
|
|
|
OPTS = [
|
|
cfg.StrOpt('evaluation_service', default='default',
|
|
help='Driver to use for alarm evaluation service. DEPRECATED: '
|
|
'"singleton" and "partitioned" alarm evaluator '
|
|
'services will be removed in Kilo in favour of the '
|
|
'default alarm evaluation service using tooz for '
|
|
'partitioning.'),
|
|
]
|
|
|
|
cfg.CONF.register_opts(OPTS, group='alarm')
|
|
|
|
LOG = log.getLogger(__name__)
|
|
|
|
|
|
def notifier():
|
|
service.prepare_service()
|
|
os_service.launch(alarm_service.AlarmNotifierService()).wait()
|
|
|
|
|
|
def evaluator():
|
|
service.prepare_service()
|
|
eval_service_mgr = driver.DriverManager(
|
|
"ceilometer.alarm.evaluator_service",
|
|
cfg.CONF.alarm.evaluation_service,
|
|
invoke_on_load=True)
|
|
LOG.debug("Alarm evaluator loaded: %s" %
|
|
eval_service_mgr.driver.__class__.__name__)
|
|
os_service.launch(eval_service_mgr.driver).wait()
|