From 2e05c82b807624b8420df4c94d68b75563b230d2 Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Mon, 27 Feb 2017 07:52:29 -0800 Subject: [PATCH] Ignore deleted services in minimum version calculation When we go to detect the minimum version for a given service, we should ignore any deleted services. Without this, we will return the minimum version of all records, including those that have been deleted with "nova service-delete". This patch filters deleted services from the query. Conflicts: nova/db/sqlalchemy/api.py nova/tests/unit/db/test_db_api.py NOTE(mriedem): The conflicts are due to not having change 11cb56a2243faa9f2614a8f9a9a84603bc91d6b1 in Mitaka. Closes-Bug: #1668310 Change-Id: Ic96a5eb3728f97a3c35d2c5121e6fdcd4fd1c70b (cherry picked from commit c79770e615799cd4457ac603dcad4fb3452fe2bc) (cherry picked from commit a1dd547d3ba7d9cf5b73da1ce9668e412501ace1) (cherry picked from commit 1ad5c7305c37079ced24bf623810e63d5eac2661) --- nova/db/sqlalchemy/api.py | 1 + nova/tests/unit/db/test_db_api.py | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 30bbb09c0618..7f983d2bfac3 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -512,6 +512,7 @@ def service_get_minimum_version(context, binary): min_version = context.session.query( func.min(models.Service.version)).\ filter(models.Service.binary == binary).\ + filter(models.Service.deleted == 0).\ filter(models.Service.forced_down == false()).\ scalar() return min_version diff --git a/nova/tests/unit/db/test_db_api.py b/nova/tests/unit/db/test_db_api.py index cb50fc967576..9e0eda96012c 100644 --- a/nova/tests/unit/db/test_db_api.py +++ b/nova/tests/unit/db/test_db_api.py @@ -3427,6 +3427,10 @@ class ServiceTestCase(test.TestCase, ModelsObjectComparatorMixin): self._create_service({'version': 3, 'host': 'host2', 'binary': 'compute'}) + self._create_service({'version': 0, + 'host': 'host0', + 'binary': 'compute', + 'deleted': 1}) self.assertEqual(2, db.service_get_minimum_version(self.ctxt, 'compute'))