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_get,
|
||||||
action_set,
|
action_set,
|
||||||
action_fail,
|
action_fail,
|
||||||
|
relation_ids,
|
||||||
|
relation_set,
|
||||||
leader_set,
|
leader_set,
|
||||||
is_leader,
|
is_leader,
|
||||||
)
|
)
|
||||||
@ -21,6 +23,10 @@ from charmhelpers.core.host import (
|
|||||||
lsb_release,
|
lsb_release,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from charmhelpers.contrib.openstack.utils import (
|
||||||
|
DB_SERIES_UPGRADING_KEY,
|
||||||
|
)
|
||||||
|
|
||||||
from percona_utils import (
|
from percona_utils import (
|
||||||
pause_unit_helper,
|
pause_unit_helper,
|
||||||
resume_unit_helper,
|
resume_unit_helper,
|
||||||
@ -60,6 +66,10 @@ def complete_cluster_series_upgrade(args):
|
|||||||
# Unset cluster_series_upgrading
|
# Unset cluster_series_upgrading
|
||||||
leader_set(cluster_series_upgrading="")
|
leader_set(cluster_series_upgrading="")
|
||||||
leader_set(cluster_series_upgrade_leader="")
|
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()
|
config_changed()
|
||||||
|
|
||||||
|
|
||||||
|
@ -293,6 +293,10 @@ PACKAGE_CODENAMES = {
|
|||||||
|
|
||||||
DEFAULT_LOOPBACK_SIZE = '5G'
|
DEFAULT_LOOPBACK_SIZE = '5G'
|
||||||
|
|
||||||
|
DB_SERIES_UPGRADING_KEY = 'cluster-series-upgrading'
|
||||||
|
|
||||||
|
DB_MAINTENANCE_KEYS = [DB_SERIES_UPGRADING_KEY]
|
||||||
|
|
||||||
|
|
||||||
class CompareOpenStackReleases(BasicStringComparator):
|
class CompareOpenStackReleases(BasicStringComparator):
|
||||||
"""Provide comparisons of OpenStack releases.
|
"""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.harden import harden
|
||||||
from charmhelpers.contrib.hardening.mysql.checks import run_mysql_checks
|
from charmhelpers.contrib.hardening.mysql.checks import run_mysql_checks
|
||||||
from charmhelpers.contrib.openstack.utils import (
|
from charmhelpers.contrib.openstack.utils import (
|
||||||
|
DB_SERIES_UPGRADING_KEY,
|
||||||
is_unit_paused_set,
|
is_unit_paused_set,
|
||||||
is_unit_upgrading_set,
|
is_unit_upgrading_set,
|
||||||
set_unit_upgrading,
|
set_unit_upgrading,
|
||||||
@ -356,6 +357,10 @@ def prepare():
|
|||||||
leader_set(cluster_series_upgrading=True)
|
leader_set(cluster_series_upgrading=True)
|
||||||
leader_set(
|
leader_set(
|
||||||
cluster_series_upgrade_leader=get_relation_ip('cluster'))
|
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:
|
else:
|
||||||
hosts = [leader_get('cluster_series_upgrade_leader')]
|
hosts = [leader_get('cluster_series_upgrade_leader')]
|
||||||
|
|
||||||
@ -945,6 +950,11 @@ def leader_settings_changed():
|
|||||||
# NOTE(tkurek): deconfigure old leader
|
# NOTE(tkurek): deconfigure old leader
|
||||||
if relation_ids('slave'):
|
if relation_ids('slave'):
|
||||||
deconfigure_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')
|
@hooks.hook('leader-elected')
|
||||||
|
@ -15,3 +15,23 @@ stestr>=2.2.0
|
|||||||
coverage>=4.5.2
|
coverage>=4.5.2
|
||||||
keyring==18.0.1
|
keyring==18.0.1
|
||||||
setuptools<=40.0.0
|
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):
|
class CompleteClusterSeriesUpgrade(CharmTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
to_patch = [
|
||||||
|
"is_leader",
|
||||||
|
"config_changed",
|
||||||
|
"leader_set",
|
||||||
|
"relation_ids",
|
||||||
|
"relation_set"]
|
||||||
super(CompleteClusterSeriesUpgrade, self).setUp(
|
super(CompleteClusterSeriesUpgrade, self).setUp(
|
||||||
actions, ["config_changed", "is_leader", "leader_set"])
|
actions, to_patch)
|
||||||
|
|
||||||
def test_leader_complete_series_upgrade(self):
|
def test_leader_complete_series_upgrade(self):
|
||||||
self.is_leader.return_value = True
|
self.is_leader.return_value = True
|
||||||
|
|
||||||
|
self.relation_ids.return_value = ['relid:1']
|
||||||
calls = [mock.call(cluster_series_upgrading=""),
|
calls = [mock.call(cluster_series_upgrading=""),
|
||||||
mock.call(cluster_series_upgrade_leader="")]
|
mock.call(cluster_series_upgrade_leader="")]
|
||||||
actions.complete_cluster_series_upgrade([])
|
actions.complete_cluster_series_upgrade([])
|
||||||
self.leader_set.assert_has_calls(calls)
|
self.leader_set.assert_has_calls(calls)
|
||||||
self.config_changed.assert_called_once_with()
|
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):
|
def test_non_leader_complete_series_upgrade(self):
|
||||||
self.is_leader.return_value = False
|
self.is_leader.return_value = False
|
||||||
|
@ -619,6 +619,48 @@ class TestInstallPerconaXtraDB(CharmTestCase):
|
|||||||
self.run_mysql_checks.assert_not_called()
|
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):
|
class TestUpgradeCharm(CharmTestCase):
|
||||||
TO_PATCH = [
|
TO_PATCH = [
|
||||||
'config',
|
'config',
|
||||||
|
Loading…
Reference in New Issue
Block a user