Require mongodb >= 2.2 or fail misserably

The patch adds a minimum requirement for mongodb. This will provide a
useful error message to users when the installed mongodb version doesn't
match the minimum required one.

Change-Id: Iff8bb1645e7276529230da58c408552bebd8647a
This commit is contained in:
Flavio Percoco 2014-08-04 16:51:27 +02:00
parent 36e63c9a45
commit 67949a7870
2 changed files with 21 additions and 0 deletions

View File

@ -151,6 +151,21 @@ class MongodbDriverTest(MongodbSetupMixin, testing.TestBase):
self.assertThat(db.name, matchers.StartsWith( self.assertThat(db.name, matchers.StartsWith(
driver.mongodb_conf.database)) driver.mongodb_conf.database))
def test_version_match(self):
cache = oslo_cache.get_cache()
with mock.patch('pymongo.MongoClient.server_info') as info:
info.return_value = {'version': '2.1'}
self.assertRaises(RuntimeError, mongodb.DataDriver,
self.conf, cache)
info.return_value = {'version': '2.11'}
try:
mongodb.DataDriver(self.conf, cache)
except RuntimeError:
self.fail('version match failed')
@testing.requires_mongodb @testing.requires_mongodb
class MongodbQueueTests(MongodbSetupMixin, base.QueueControllerTest): class MongodbQueueTests(MongodbSetupMixin, base.QueueControllerTest):

View File

@ -21,6 +21,7 @@ import pymongo
import pymongo.errors import pymongo.errors
from zaqar.common import decorators from zaqar.common import decorators
from zaqar.i18n import _
from zaqar.openstack.common import log as logging from zaqar.openstack.common import log as logging
from zaqar.queues import storage from zaqar.queues import storage
from zaqar.queues.storage.mongodb import controllers from zaqar.queues.storage.mongodb import controllers
@ -81,6 +82,11 @@ class DataDriver(storage.DataDriverBase):
group=options.MONGODB_GROUP) group=options.MONGODB_GROUP)
self.mongodb_conf = self.conf[options.MONGODB_GROUP] self.mongodb_conf = self.conf[options.MONGODB_GROUP]
server_version = self.connection.server_info()['version']
if tuple(map(int, server_version.split('.'))) < (2, 2):
raise RuntimeError(_('The mongodb driver requires mongodb>=2.2, '
'%s found') % server_version)
def is_alive(self): def is_alive(self):
try: try:
# NOTE(zyuan): Requires admin access to mongodb # NOTE(zyuan): Requires admin access to mongodb