From 18570a716c3701f8d5d13dd7ea5d297cc57a9ec5 Mon Sep 17 00:00:00 2001 From: "zhu.boxiang" Date: Thu, 6 Sep 2018 12:13:34 +0800 Subject: [PATCH] Fix wrong filter of backups in db api The function _process_backups_filters aims to filter backups. So fix the model and metadata attribute. Change-Id: Ie6807745fa89731b9db3bc29da653db269219bce Closes-Bug: #1791003 --- cinder/db/sqlalchemy/api.py | 2 +- cinder/tests/unit/test_db_api.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/cinder/db/sqlalchemy/api.py b/cinder/db/sqlalchemy/api.py index cb88b409846..70a8b3122b1 100644 --- a/cinder/db/sqlalchemy/api.py +++ b/cinder/db/sqlalchemy/api.py @@ -5192,7 +5192,7 @@ def _process_backups_filters(query, filters): filters_dict = {} for key, value in filters.items(): if key == 'metadata': - col_attr = getattr(models.Snapshot, 'snapshot_metadata') + col_attr = getattr(models.Backup, 'backup_metadata') for k, v in value.items(): query = query.filter(col_attr.any(key=k, value=v)) else: diff --git a/cinder/tests/unit/test_db_api.py b/cinder/tests/unit/test_db_api.py index 9dea45baf43..5793032728d 100644 --- a/cinder/tests/unit/test_db_api.py +++ b/cinder/tests/unit/test_db_api.py @@ -2794,6 +2794,17 @@ class DBAPIBackupTestCase(BaseTest): filtered_backups = db.backup_get_all(self.ctxt, filters=filters) self._assertEqualListsOfObjects([], filtered_backups) + def tests_backup_get_all_by_filter_metadata(self): + backups = self._get_values() + for i in range(3): + backup = backups[i] + backup['metadata'] = {'fake_key': 'fake' + str(i)} + created = [db.backup_create(self.ctxt, values) + for values in backups] + filters = {'metadata': created[1]['metadata']} + filtered_backups = db.backup_get_all(self.ctxt, filters=filters) + self.assertEqual(len([created[1]]), len(filtered_backups)) + def test_backup_get_all_by_host(self): byhost = db.backup_get_all_by_host(self.ctxt, self.created[1]['host'])