Fix failure when adding swift/redis as pool

Closes-Bug: #1679459

Change-Id: I5c2f93d9e041d593003a15f658a0d440c6a1857f
This commit is contained in:
Fei Long Wang 2017-04-05 07:11:08 +12:00
parent 56783dc9d8
commit 6b6f359701
3 changed files with 37 additions and 8 deletions

View File

@ -120,7 +120,6 @@ def load_storage_driver(conf, cache, storage_type=None,
instance to pass to the storage driver. Needed to access
the queue controller, mainly.
"""
if control_mode:
mode = 'control'
storage_type = storage_type or conf['drivers'].management_store
@ -197,19 +196,19 @@ def can_connect(uri, conf=None):
:returns: True if can connect else False
:rtype: bool
"""
# NOTE(cabrera): create a mock configuration containing only
# the URI field. This should be sufficient to initialize a
# storage driver.
conf = dynamic_conf(uri, {}, conf=conf)
storage_type = six.moves.urllib_parse.urlparse(uri).scheme
try:
# NOTE(cabrera): create a mock configuration containing only
# the URI field. This should be sufficient to initialize a
# storage driver.
ctrl = load_storage_driver(conf, None,
storage_type=conf.drivers.management_store,
control_mode=True)
driver = load_storage_driver(conf, None,
storage_type=storage_type,
control_driver=load_storage_driver
(conf, None,
storage_type=storage_type,
control_mode=True))
control_driver=ctrl)
return driver.is_alive()
except Exception as exc:
LOG.debug('Can\'t connect to: %s \n%s' % (uri, exc))

View File

@ -5,6 +5,7 @@ enable_deprecated_api_versions = 1,1.1
[drivers]
transport = wsgi
management_store = sqlalchemy
message_store = swift
[drivers:transport:wsgi]

View File

@ -0,0 +1,29 @@
# Copyright (c) 2017 Catalyst IT Ltd.
#
# 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.
import mock
from zaqar.storage import utils
from zaqar import tests as testing
class StorageUtilsTest(testing.TestBase):
config_file = 'wsgi_swift.conf'
def test_can_connect(self):
swift_uri = "swift://zaqar:password@/service"
is_alive_path = 'zaqar.storage.swift.driver.DataDriver.is_alive'
with mock.patch(is_alive_path) as is_alive:
is_alive.return_value = True
self.assertTrue(utils.can_connect(swift_uri, self.conf))