MongoDB 3.X cannot be used as database backend

Bug #1434013 reported by Marcin Zbik
14
This bug affects 3 people
Affects Status Importance Assigned to Milestone
Ceilometer
Fix Released
Medium
gordon chung

Bug Description

Due to changes in authentication method in MongoDB 3.X ( http://api.mongodb.org/python/current/examples/authentication.html#scram-sha-1-rfc-5802 and http://docs.mongodb.org/v3.0/release-notes/3.0-scram/) Ceilometer cannot use it, at least by default

Failed to authenticate ceilometer@ceilometer with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document

Using ?authMechanism=SCRAM-SHA-1 in uri (connection = mongodb://ceilometer:ceilometer@127.0.0.1/ceilometer?authMechanism=SCRAM-SHA-1) does not help.

gordon chung (chungg)
Changed in ceilometer:
status: New → Incomplete
status: Incomplete → Triaged
Revision history for this message
gordon chung (chungg) wrote :
Revision history for this message
gordon chung (chungg) wrote :

can you also post logs from collector? and pymongo version

Revision history for this message
Marcin Zbik (zbikmarc+launchpad) wrote :

@ Comment #1
this is about updating from 2.6 to 3.0 when that problem will not occure due to old users having MONGODB-CR hashes already existing in databse.

Bug is about totally new installation with Mongo 3.0

@ Comment #2
I will do this at morning (CET), dont have access to logs now. But there should be no logs so far. It is new installation, so it happens during init of database.

Revision history for this message
Marcin Zbik (zbikmarc+launchpad) wrote :

# ceilometer-dbsync --debug
2015-03-19 10:33:32.147 18284 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.metering.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-19 10:33:32.232 18284 INFO ceilometer.storage.mongo.utils [-] Connecting to mongodb on [('127.0.0.1', 27017)]
2015-03-19 10:33:42.240 18284 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.metering.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-19 10:33:42.241 18284 INFO ceilometer.storage.mongo.utils [-] Connecting to mongodb on [('127.0.0.1', 27017)]

logs from mongodb.log
2015-03-19T10:33:32.234+0100 I NETWORK [initandlisten] connection accepted from 127.0.0.1:57663 #14 (1 connection now open)
2015-03-19T10:33:32.236+0100 I ACCESS [conn14] authenticate db: ceilometer { authenticate: 1, user: "ceilometer", nonce: "xxx", key: "xxx" }
2015-03-19T10:33:32.237+0100 I ACCESS [conn14] Failed to authenticate ceilometer@ceilometer with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document
2015-03-19T10:33:42.242+0100 I NETWORK [initandlisten] connection accepted from 127.0.0.1:57664 #15 (2 connections now open)
2015-03-19T10:33:42.244+0100 I ACCESS [conn15] authenticate db: ceilometer { authenticate: 1, user: "ceilometer", nonce: "xxx", key: "xxx" }
2015-03-19T10:33:42.245+0100 I ACCESS [conn15] Failed to authenticate ceilometer@ceilometer with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document
2015-03-19T10:33:42.245+0100 I NETWORK [conn14] end connection 127.0.0.1:57663 (1 connection now open)

Revision history for this message
gordon chung (chungg) wrote :

can you try updating to pymongo 2.8+.... i was able to connect with pymongo2.8 but got a similar error when using pymongo2.7.2

Revision history for this message
Marcin Zbik (zbikmarc+launchpad) wrote :

Latest pymongo for RHEL 7 is 2.5.2 so far. I will try to install from outside repository.

Revision history for this message
Marcin Zbik (zbikmarc+launchpad) wrote :
Download full text (11.4 KiB)

I updated to 2.8 but cilometer-dbsync fails:

]# ceilometer-dbsync --debug
2015-03-23 09:40:08.251 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.metering.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:40:08.340 25985 INFO ceilometer.storage.mongo.utils [-] Connecting to mongodb on [('127.0.0.1', 27017)]
2015-03-23 09:40:08.579 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.alarm.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:40:08.732 25985 INFO ceilometer.storage.mongo.utils [-] Connecting to mongodb on [('127.0.0.1', 27017)]
2015-03-23 09:40:08.842 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.event.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:40:08.844 25985 INFO ceilometer.storage.mongo.utils [-] Connecting to mongodb on [('127.0.0.1', 27017)]
2015-03-23 09:40:18.954 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.event.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:40:28.970 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.event.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:40:38.980 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.event.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:40:48.995 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.event.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:40:59.011 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.event.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:41:09.026 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.event.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:41:19.040 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.event.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:41:29.050 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.event.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:41:39.066 25985 DEBUG ceilometer.storage [-] looking for 'mongodb' driver in 'ceilometer.event.storage' get_connection /usr/lib/python2.7/site-packages/ceilometer/storage/__init__.py:127
2015-03-23 09:41:39.071 25985 CRITICAL ceilometer [-] OperationFailure: command SON([('listIndexes', u'event'), ('cursor', {})]) on namespace ceilometer.$cmd failed: no collection
2015-03-23 09:41:39.071 25985 TRACE ceilometer Traceback (most recent call last):
2015-03-23 09:41:39.071 25985 TRACE ceilometer File "/usr/bin/ceilometer-dbsync", line 10, i...

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to ceilometer (master)

Fix proposed to branch: master
Review: https://review.openstack.org/166860

Changed in ceilometer:
assignee: nobody → gordon chung (chungg)
status: Triaged → In Progress
Revision history for this message
gordon chung (chungg) wrote :

ok, so i figured it out. it's not related so much to mongo3.x but just a gap in upgrade logic.

basically when creating indices, the mongo backend never checks to see if collection exists (it gets created when the first document is written)... i've added a check to create the collection beforehand.

Changed in ceilometer:
milestone: none → kilo-rc1
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to ceilometer (master)

Reviewed: https://review.openstack.org/166860
Committed: https://git.openstack.org/cgit/openstack/ceilometer/commit/?id=5c0762534b6cceccff151001399e047ffa7f9498
Submitter: Jenkins
Branch: master

commit 5c0762534b6cceccff151001399e047ffa7f9498
Author: gordon chung <email address hidden>
Date: Mon Mar 23 10:35:59 2015 -0400

    ensure collections created on upgrade

    upgrade does not check that collections exists. this can cause
    issues when running upgrade before any data is inserted. this patch
    creates collection on upgrade if it does not exist.

    Change-Id: I1774d1c943050f1a87b386502392e18b0af8c840
    Closes-Bug: #1434013

Changed in ceilometer:
status: In Progress → Fix Committed
Eoghan Glynn (eglynn)
Changed in ceilometer:
importance: Undecided → Medium
Thierry Carrez (ttx)
Changed in ceilometer:
status: Fix Committed → Fix Released
Thierry Carrez (ttx)
Changed in ceilometer:
milestone: kilo-rc1 → 2015.1.0
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Related fix proposed to ceilometer (master)

Related fix proposed to branch: master
Review: https://review.openstack.org/185268

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Change abandoned on ceilometer (master)

Change abandoned by Julien Danjou (<email address hidden>) on branch: master
Review: https://review.openstack.org/185268
Reason: Duplicate of https://review.openstack.org/#/c/175418/

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.