From 1378173cb21eb382cfbcaebf927012ae94de5c63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89douard=20Thuleau?= Date: Wed, 18 Jan 2017 19:28:37 +0100 Subject: [PATCH] [VNC API Server] API list resource ignores unknown filters If a resource type is listed with unknown filter(s), we should not take care of that filter(s). Change-Id: I1a98c03a178f80da89a72550bd1f553c622be010 Closes-Bug: #1657533 --- src/config/api-server/tests/test_crud_basic.py | 6 ++++++ src/config/common/vnc_cassandra.py | 5 ++++- src/config/common/vnc_rdbms.py | 4 +++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/config/api-server/tests/test_crud_basic.py b/src/config/api-server/tests/test_crud_basic.py index 65a627573c9..d45e1fc7828 100644 --- a/src/config/api-server/tests/test_crud_basic.py +++ b/src/config/api-server/tests/test_crud_basic.py @@ -950,6 +950,12 @@ def create_vns(): self.assertThat(obj_dict[0]['fq_name'][:-1], Equals(proj_obj.fq_name)) + # unanchored list with unknown filter + read_vn_objs = self._vnc_lib.virtual_networks_list( + parent_id=proj_obj.uuid, + filters={'foo': 'bar'})['virtual-networks'] + self.assertEqual(len(read_vn_objs), num_objs) + # parent anchored detailed list without filters read_vn_objs = self._vnc_lib.virtual_networks_list( parent_id=proj_obj.uuid, detail=True) diff --git a/src/config/common/vnc_cassandra.py b/src/config/common/vnc_cassandra.py index 704ff299647..0e865198652 100644 --- a/src/config/common/vnc_cassandra.py +++ b/src/config/common/vnc_cassandra.py @@ -975,7 +975,10 @@ def filter_rows(coll_infos, filters=None): return coll_infos filtered_infos = {} - columns = ['prop:%s' % filter_key for filter_key in filters] + columns = ['prop:%s' % filter_key for filter_key in filters if + filter_key in obj_class.prop_fields] + if not columns: + return coll_infos rows = self.multiget(self._OBJ_UUID_CF_NAME, coll_infos.keys(), columns=columns) diff --git a/src/config/common/vnc_rdbms.py b/src/config/common/vnc_rdbms.py index abe794be161..03cfb95c327 100644 --- a/src/config/common/vnc_rdbms.py +++ b/src/config/common/vnc_rdbms.py @@ -1078,7 +1078,9 @@ def object_list(self, res_type, parent_uuids=None, back_ref_uuids=None, if filters: for key, value in filters.iteritems(): - value = [ json.dumps(v) for v in value] + if key not in obj_class.prop_fields: + continue + value = [json.dumps(v) for v in value] sqa_objs = sqa_objs.filter(getattr(sqa_class, key).in_(value)) if count: