Do not access DB when it is in maintenance mode.

If the database is in maintenace mode do not attempt to access
it.

Depends-On: I5d8ed7d3935db5568c50f8d585e37a4d0cc6914f
Change-Id: I8cdb42364b7da03129bb8e2debebf6f6947d7ff3
This commit is contained in:
Liam Young 2020-01-30 12:37:36 +00:00
parent fca036ba24
commit 848ce4b5f4
2 changed files with 12 additions and 0 deletions

View File

@ -78,6 +78,7 @@ from charmhelpers.contrib.openstack.utils import (
enable_memcache,
series_upgrade_prepare,
series_upgrade_complete,
is_db_maintenance_mode,
)
from keystone_context import fernet_enabled
@ -317,6 +318,9 @@ def db_joined():
def update_all_identity_relation_units(check_db_ready=True):
if is_db_maintenance_mode():
log('Database maintenance mode, aborting hook.', level=INFO)
return
if is_unit_paused_set():
return
if check_db_ready and not is_db_ready():

View File

@ -104,6 +104,7 @@ TO_PATCH = [
'run_in_apache',
# unitdata
'unitdata',
'is_db_maintenance_mode',
]
@ -197,6 +198,7 @@ class KeystoneRelationTests(CharmTestCase):
@patch.object(hooks, 'CONFIGS')
def test_db_changed_missing_relation_data(self, configs,
mock_log):
self.is_db_maintenance_mode_return_value = False
configs.complete_contexts = MagicMock()
configs.complete_contexts.return_value = []
hooks.db_changed()
@ -206,6 +208,7 @@ class KeystoneRelationTests(CharmTestCase):
@patch.object(hooks, 'update_all_identity_relation_units')
def _shared_db_test(self, configs, unit_name, mock_update_all):
self.is_db_maintenance_mode_return_value = False
self.relation_get.return_value = 'keystone/0 keystone/3'
configs.complete_contexts = MagicMock()
configs.complete_contexts.return_value = ['shared-db']
@ -713,6 +716,7 @@ class KeystoneRelationTests(CharmTestCase):
configure_https,
is_expected_scale):
""" Verify all identity relations are updated """
self.is_db_maintenance_mode.return_value = False
is_db_initialized.return_value = True
is_expected_scale.return_value = True
self.relation_ids.return_value = ['identity-relation:0']
@ -737,6 +741,7 @@ class KeystoneRelationTests(CharmTestCase):
@patch.object(hooks, 'CONFIGS')
def test_update_all_db_not_ready(self, configs, configure_https):
""" Verify update identity relations when DB is not ready """
self.is_db_maintenance_mode.return_value = False
self.is_db_ready.return_value = False
hooks.update_all_identity_relation_units(check_db_ready=True)
self.assertTrue(self.is_db_ready.called)
@ -750,6 +755,7 @@ class KeystoneRelationTests(CharmTestCase):
def test_update_all_db_not_initializd(self, configs, is_db_initialized,
configure_https):
""" Verify update identity relations when DB is not initialized """
self.is_db_maintenance_mode.return_value = False
is_db_initialized.return_value = False
hooks.update_all_identity_relation_units(check_db_ready=False)
self.assertFalse(self.is_db_ready.called)
@ -765,6 +771,7 @@ class KeystoneRelationTests(CharmTestCase):
def test_update_all_leader(self, configs, is_db_initialized,
configure_https, is_expected_scale):
""" Verify update identity relations when the leader"""
self.is_db_maintenance_mode.return_value = False
self.is_elected_leader.return_value = True
is_db_initialized.return_value = True
is_expected_scale.return_value = True
@ -779,6 +786,7 @@ class KeystoneRelationTests(CharmTestCase):
def test_update_all_not_leader(self, configs, is_db_initialized,
configure_https, is_expected_scale):
""" Verify update identity relations when not the leader"""
self.is_db_maintenance_mode.return_value = False
self.is_elected_leader.return_value = False
is_db_initialized.return_value = True
is_expected_scale.return_value = True