openstack-ceilometer-api.service fails to start if event_connection db is not available
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Ceilometer |
Fix Released
|
High
|
Rohit Jaiswal | ||
Kilo |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
Excerpt from ceilometer.conf
[database]
...
connection=
event_connectio
...
When MongoDB instance at Y.Y.Y.Y host becomes unavailable and a try to restart openstack-
openstack-
EXCERPT from api.log
...
2015-05-20 10:12:54.058 89605 WARNING ceilometer.
2015-05-20 10:12:54.058 89605 CRITICAL ceilometer [-] ConnectionFailure: could not connect to Y.Y.Y.Y:27017: [Errno 111] ECONNREFUSED
2015-05-20 10:12:54.058 89605 TRACE ceilometer Traceback (most recent call last):
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/bin/
2015-05-20 10:12:54.058 89605 TRACE ceilometer sys.exit(main())
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer app.build_server()
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer app = load_app()
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return deploy.
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return loadobj(APP, uri, name=name, **kw)
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return context.create()
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return self.object_
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer app = context.
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return self.object_
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return fix_call(
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer val = callable(*args, **kw)
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return VersionSelector
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer self.v2 = setup_app(
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer storage.
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return _inner()
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return Retrying(*dargs, **dkw).call(f, *args, **kw)
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer raise attempt.get()
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer six.reraise(
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return get_connection(url, namespace)
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer return mgr.driver(url)
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer self.conn = self.CONNECTION
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer client = self._mongo_
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib/
2015-05-20 10:12:54.058 89605 TRACE ceilometer client = MongoProxy(
2015-05-20 10:12:54.058 89605 TRACE ceilometer File "/usr/lib64/
2015-05-20 10:12:54.
2015-05-20 10:12:54.058 89605 TRACE ceilometer
58 89605 TRACE ceilometer raise ConnectionFailu
systemctl --failed -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
openstack-
# ceilometer meter-list
('Connection aborted.', error(111, 'Connection refused'))
# ceilometer event-list
('Connection aborted.', error(111, 'Connection refused'))
event_connection, similarly to metering and alarm connections, allows event-related data be stored at dedicated db, I assume event db failure should just affect event specific api calls not the api service.
Since there might be up to 3 connection configured - it would be great if they can work independently.
In case some of them fails - just a part of functionally, specific to failed connection, would be inaccessible.
Thanks,
Yurii
Changed in ceilometer: | |
assignee: | nobody → Rohit Jaiswal (rohit-jaiswal-3) |
Changed in ceilometer: | |
status: | New → In Progress |
Changed in ceilometer: | |
milestone: | none → liberty-1 |
status: | Fix Committed → Fix Released |
Changed in ceilometer: | |
importance: | Undecided → High |
Changed in ceilometer: | |
milestone: | liberty-1 → 5.0.0 |
no longer affects: | ubuntu |
Reviewed: https:/ /review. openstack. org/184655 /git.openstack. org/cgit/ openstack/ ceilometer/ commit/ ?id=1f30839494c 5b5002173a1f81e b960d735f39643
Committed: https:/
Submitter: Jenkins
Branch: master
commit 1f30839494c5b50 02173a1f81eb960 d735f39643
Author: Rohit Jaiswal <email address hidden>
Date: Thu May 21 00:05:38 2015 +0000
Handle database failures on api startup
Storage layer connections are initialized
for metering, alarm and event in Pecan hook
middleware.
If any of the backends are not responding,
the connections are retried till maximum
retries and the exception propagated to the
Ceilometer-api which fails to startup.
This fix logs and handles the exception in
the Pecan hook and allows all connection
types to be initialized.
Closes-Bug: 1456944
Change-Id: Id70693dafc8239 27b3d72e0371e3e 55d4e5588ce