Fix duplicated queues on multi pools

Now we're saving queues on management plane, so it's not necessary
to interate all the pools to list queues. This patch fixes the issue
and adds a test for that.

Closes-Bug: #1490807

Change-Id: I595f240d2944c55c2f4883bbc3070aaf25c19763
This commit is contained in:
Fei Long Wang 2015-09-08 15:11:04 +12:00
parent e66c45b40e
commit 3b7888c84a
2 changed files with 21 additions and 7 deletions

View File

@ -146,13 +146,14 @@ class QueueController(storage.Queue):
def all_pages():
cursor = self._pool_catalog._pools_ctrl.list(limit=0)
for pool in next(cursor):
yield next(self._pool_catalog.get_driver(pool['name'])
.queue_controller.list(
project=project,
marker=marker,
limit=limit,
detailed=detailed))
pools_list = list(next(cursor))
anypool = pools_list and pools_list[0]
yield next(self._pool_catalog.get_driver(anypool['name'])
.queue_controller.list(
project=project,
marker=marker,
limit=limit,
detailed=detailed))
# make a heap compared with 'name'
ls = heapq.merge(*[

View File

@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations under
# the License.
import mock
import uuid
from zaqar.openstack.common.cache import cache as oslo_cache
@ -96,3 +97,15 @@ class PoolCatalogTest(testing.TestBase):
self.catalog.register,
'test', project=self.project,
flavor='fake')
def test_queues_list_on_multi_pools(self):
def fake_list(project=None, marker=None, limit=10, detailed=False):
yield iter([{'name': 'fake_queue'}])
list_str = 'zaqar.storage.mongodb.queues.QueueController.list'
with mock.patch(list_str) as queues_list:
queues_list.side_effect = fake_list
queue_controller = pooling.QueueController(self.catalog)
result = queue_controller.list(project=self.project)
queue_list = list(next(result))
self.assertEqual(1, len(queue_list))