From 92a59b39a0c22d4cf1b1eb375f9b2970e7725a0e Mon Sep 17 00:00:00 2001 From: Luo Gangyi Date: Wed, 17 May 2017 13:16:29 +0800 Subject: [PATCH] convert unicode to string before we connect to rados rados client only support string argument, therefore we have to convert argument to string first. closes-Bug: #1672792 Change-Id: I007c15dc61db9dbf7df7b8bea7c3dce49f0396f5 (cherry picked from commit 2f5ebdba5f9c5c1485d143c9ec5989c8fbe1e859) --- nova/tests/unit/virt/libvirt/storage/test_rbd.py | 6 ++++++ nova/virt/libvirt/storage/rbd_utils.py | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/nova/tests/unit/virt/libvirt/storage/test_rbd.py b/nova/tests/unit/virt/libvirt/storage/test_rbd.py index 4cb2488a53..504b4df0cd 100644 --- a/nova/tests/unit/virt/libvirt/storage/test_rbd.py +++ b/nova/tests/unit/virt/libvirt/storage/test_rbd.py @@ -310,6 +310,12 @@ class RbdTestCase(test.NoDBTestCase): mock_rados.Rados.open_ioctx.assert_called_once_with(self.rbd_pool) mock_rados.Rados.shutdown.assert_called_once_with() + @mock.patch.object(rbd_utils, 'rados') + def test_connect_to_rados_unicode_arg(self, mock_rados): + self.driver._connect_to_rados(u'unicode_pool') + self.mock_rados.Rados.open_ioctx.assert_called_with( + test.MatchType(str)) + def test_ceph_args_none(self): self.driver.rbd_user = None self.driver.ceph_conf = None diff --git a/nova/virt/libvirt/storage/rbd_utils.py b/nova/virt/libvirt/storage/rbd_utils.py index 8388f0e24a..dc082aa3b5 100644 --- a/nova/virt/libvirt/storage/rbd_utils.py +++ b/nova/virt/libvirt/storage/rbd_utils.py @@ -135,7 +135,11 @@ class RBDDriver(object): try: client.connect() pool_to_open = pool or self.pool - ioctx = client.open_ioctx(pool_to_open) + # NOTE(luogangyi): open_ioctx >= 10.1.0 could handle unicode + # arguments perfectly as part of Python 3 support. + # Therefore, when we turn to Python 3, it's safe to remove + # str() conversion. + ioctx = client.open_ioctx(str(pool_to_open)) return client, ioctx except rados.Error: # shutdown cannot raise an exception -- 2.39.5