aodh/ceilometer/cmd/alarm.py
Nejc Saje 3571a607f2 Switch partitioned alarm evaluation to a hash-based approach
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
2014-09-01 14:47:41 -04:00

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()