Notify clients of series upgrade
When the percona cluster is undergoing a series upgrade, clients should suspend db activity in their hooks (like db migrations). This change sents a notification of upgrade Change-Id: I9d02180fcb0fec6bd017c6150bfca5963896fd2f
This commit is contained in:
parent
ea3c395780
commit
341eb0fcc4
|
@ -12,6 +12,8 @@ from charmhelpers.core.hookenv import (
|
|||
action_get,
|
||||
action_set,
|
||||
action_fail,
|
||||
relation_ids,
|
||||
relation_set,
|
||||
leader_set,
|
||||
is_leader,
|
||||
)
|
||||
|
@ -21,6 +23,10 @@ from charmhelpers.core.host import (
|
|||
lsb_release,
|
||||
)
|
||||
|
||||
from charmhelpers.contrib.openstack.utils import (
|
||||
DB_SERIES_UPGRADING_KEY,
|
||||
)
|
||||
|
||||
from percona_utils import (
|
||||
pause_unit_helper,
|
||||
resume_unit_helper,
|
||||
|
@ -60,6 +66,10 @@ def complete_cluster_series_upgrade(args):
|
|||
# Unset cluster_series_upgrading
|
||||
leader_set(cluster_series_upgrading="")
|
||||
leader_set(cluster_series_upgrade_leader="")
|
||||
for r_id in relation_ids('shared-db'):
|
||||
relation_set(
|
||||
relation_id=r_id,
|
||||
relation_settings={DB_SERIES_UPGRADING_KEY: None})
|
||||
config_changed()
|
||||
|
||||
|
||||
|
|
|
@ -293,6 +293,10 @@ PACKAGE_CODENAMES = {
|
|||
|
||||
DEFAULT_LOOPBACK_SIZE = '5G'
|
||||
|
||||
DB_SERIES_UPGRADING_KEY = 'cluster-series-upgrading'
|
||||
|
||||
DB_MAINTENANCE_KEYS = [DB_SERIES_UPGRADING_KEY]
|
||||
|
||||
|
||||
class CompareOpenStackReleases(BasicStringComparator):
|
||||
"""Provide comparisons of OpenStack releases.
|
||||
|
|
|
@ -67,6 +67,7 @@ from charmhelpers.contrib.charmsupport import nrpe
|
|||
from charmhelpers.contrib.hardening.harden import harden
|
||||
from charmhelpers.contrib.hardening.mysql.checks import run_mysql_checks
|
||||
from charmhelpers.contrib.openstack.utils import (
|
||||
DB_SERIES_UPGRADING_KEY,
|
||||
is_unit_paused_set,
|
||||
is_unit_upgrading_set,
|
||||
set_unit_upgrading,
|
||||
|
@ -356,6 +357,10 @@ def prepare():
|
|||
leader_set(cluster_series_upgrading=True)
|
||||
leader_set(
|
||||
cluster_series_upgrade_leader=get_relation_ip('cluster'))
|
||||
for r_id in relation_ids('shared-db'):
|
||||
relation_set(
|
||||
relation_id=r_id,
|
||||
relation_settings={DB_SERIES_UPGRADING_KEY: True})
|
||||
else:
|
||||
hosts = [leader_get('cluster_series_upgrade_leader')]
|
||||
|
||||
|
@ -945,6 +950,11 @@ def leader_settings_changed():
|
|||
# NOTE(tkurek): deconfigure old leader
|
||||
if relation_ids('slave'):
|
||||
deconfigure_slave()
|
||||
if not leader_get('cluster_series_upgrading'):
|
||||
for r_id in relation_ids('shared-db'):
|
||||
relation_set(
|
||||
relation_id=r_id,
|
||||
relation_settings={DB_SERIES_UPGRADING_KEY: None})
|
||||
|
||||
|
||||
@hooks.hook('leader-elected')
|
||||
|
|
|
@ -15,3 +15,23 @@ stestr>=2.2.0
|
|||
coverage>=4.5.2
|
||||
keyring==18.0.1
|
||||
setuptools<=40.0.0
|
||||
# BEGIN: Amulet OpenStack Charm Helper Requirements
|
||||
# Liberty client lower constraints
|
||||
amulet>=1.14.3,<2.0;python_version=='2.7'
|
||||
bundletester>=0.6.1,<1.0;python_version=='2.7'
|
||||
python-ceilometerclient>=1.5.0
|
||||
python-cinderclient>=1.4.0,<5.0.0
|
||||
python-glanceclient>=1.1.0
|
||||
python-heatclient>=0.8.0
|
||||
python-keystoneclient>=1.7.1
|
||||
python-neutronclient>=3.1.0
|
||||
python-novaclient>=2.30.1
|
||||
python-openstackclient>=1.7.0
|
||||
python-swiftclient>=2.6.0
|
||||
pika>=0.10.0,<1.0
|
||||
distro-info
|
||||
git+https://github.com/juju/charm-helpers.git#egg=charmhelpers
|
||||
# END: Amulet OpenStack Charm Helper Requirements
|
||||
# NOTE: workaround for 14.04 pip/tox
|
||||
pytz
|
||||
pyudev # for ceph-* charm unit tests (not mocked?)
|
||||
|
|
|
@ -48,17 +48,27 @@ class ResumeTestCase(CharmTestCase):
|
|||
class CompleteClusterSeriesUpgrade(CharmTestCase):
|
||||
|
||||
def setUp(self):
|
||||
to_patch = [
|
||||
"is_leader",
|
||||
"config_changed",
|
||||
"leader_set",
|
||||
"relation_ids",
|
||||
"relation_set"]
|
||||
super(CompleteClusterSeriesUpgrade, self).setUp(
|
||||
actions, ["config_changed", "is_leader", "leader_set"])
|
||||
actions, to_patch)
|
||||
|
||||
def test_leader_complete_series_upgrade(self):
|
||||
self.is_leader.return_value = True
|
||||
|
||||
self.relation_ids.return_value = ['relid:1']
|
||||
calls = [mock.call(cluster_series_upgrading=""),
|
||||
mock.call(cluster_series_upgrade_leader="")]
|
||||
actions.complete_cluster_series_upgrade([])
|
||||
self.leader_set.assert_has_calls(calls)
|
||||
self.config_changed.assert_called_once_with()
|
||||
self.relation_set.assert_called_once_with(
|
||||
relation_id='relid:1',
|
||||
relation_settings={'cluster-series-upgrading': None})
|
||||
|
||||
def test_non_leader_complete_series_upgrade(self):
|
||||
self.is_leader.return_value = False
|
||||
|
|
|
@ -619,6 +619,48 @@ class TestInstallPerconaXtraDB(CharmTestCase):
|
|||
self.run_mysql_checks.assert_not_called()
|
||||
|
||||
|
||||
class TestSeriesUpgrade(CharmTestCase):
|
||||
TO_PATCH = [
|
||||
'register_configs',
|
||||
'pause_unit_helper',
|
||||
'set_unit_upgrading',
|
||||
'leader_get',
|
||||
'leader_set',
|
||||
'relation_ids',
|
||||
'relation_set',
|
||||
'get_relation_ip',
|
||||
'render_config',
|
||||
]
|
||||
|
||||
def setUp(self):
|
||||
CharmTestCase.setUp(self, hooks, self.TO_PATCH)
|
||||
|
||||
def test_prepare_leader(self):
|
||||
self.register_configs.return_value = 'registered_configs'
|
||||
self.leader_get.return_value = None
|
||||
self.get_relation_ip.return_value = '10.0.0.10'
|
||||
self.relation_ids.return_value = ['relid:1']
|
||||
hooks.prepare()
|
||||
self.pause_unit_helper.assert_called_once_with('registered_configs')
|
||||
self.set_unit_upgrading.assert_called_once_with()
|
||||
leader_set_calls = [
|
||||
mock.call(cluster_series_upgrading=True),
|
||||
mock.call(cluster_series_upgrade_leader='10.0.0.10')]
|
||||
self.leader_set.assert_has_calls(leader_set_calls)
|
||||
self.relation_set.assert_called_once_with(
|
||||
relation_id='relid:1',
|
||||
relation_settings={'cluster-series-upgrading': True})
|
||||
self.render_config.assert_called_once_with([])
|
||||
|
||||
def test_prepare_non_leader(self):
|
||||
self.register_configs.return_value = 'registered_configs'
|
||||
self.leader_get.return_value = '10.0.0.10'
|
||||
hooks.prepare()
|
||||
self.pause_unit_helper.assert_called_once_with('registered_configs')
|
||||
self.set_unit_upgrading.assert_called_once_with()
|
||||
self.render_config.assert_called_once_with(['10.0.0.10'])
|
||||
|
||||
|
||||
class TestUpgradeCharm(CharmTestCase):
|
||||
TO_PATCH = [
|
||||
'config',
|
||||
|
|
Loading…
Reference in New Issue