Ensure leader settings on charm upgrade
Currently bootstrapping is gated by is_leader_bootstrapped which checks a handful of leader settings. When upgrading from older versions of the charm, these settings are missing leading to an attempt to bootstrap an already bootstrapped cluster. This change makes sure the leader settings is_leader_bootstrapped is checking for are all set by the leader on upgrade-charm. Closes-Bug: #1755507 Change-Id: I172f10221b9447ca3e0c5403feaa49acccfa9e42
This commit is contained in:
parent
bf84218e31
commit
5bce1985e1
|
@ -305,8 +305,11 @@ def upgrade():
|
|||
log('Unit is paused, skiping upgrade', level=INFO)
|
||||
return
|
||||
|
||||
# Set the Leader's IP
|
||||
# Leader sets on upgrade
|
||||
leader_set(**{'leader-ip': get_relation_ip('cluster')})
|
||||
configure_sstuser(sst_password())
|
||||
if not leader_get('root-password') and leader_get('mysql.passwd'):
|
||||
leader_set(**{'root-password': leader_get('mysql.passwd')})
|
||||
|
||||
# broadcast the bootstrap-uuid
|
||||
wsrep_ready = get_wsrep_value('wsrep_ready') or ""
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import mock
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import tempfile
|
||||
|
@ -485,6 +484,11 @@ class TestUpgradeCharm(CharmTestCase):
|
|||
'config_changed',
|
||||
'get_relation_ip',
|
||||
'leader_set',
|
||||
'sst_password',
|
||||
'configure_sstuser',
|
||||
'leader_get',
|
||||
'notify_bootstrapped',
|
||||
'mark_seeded',
|
||||
]
|
||||
|
||||
def print_log(self, msg, level=None):
|
||||
|
@ -503,19 +507,11 @@ class TestUpgradeCharm(CharmTestCase):
|
|||
except:
|
||||
pass
|
||||
|
||||
@mock.patch('percona_utils.is_leader')
|
||||
@mock.patch('percona_utils.leader_set')
|
||||
@mock.patch('percona_utils.relation_set')
|
||||
@mock.patch('percona_utils.get_wsrep_value')
|
||||
@mock.patch('percona_utils.relation_ids')
|
||||
@mock.patch('percona_utils.resolve_data_dir')
|
||||
def test_upgrade_charm(self, mock_data_dir, mock_rids, mock_wsrep,
|
||||
mock_rset, mock_lset, mock_is_leader):
|
||||
mock_rids.return_value = ['cluster:22']
|
||||
mock_is_leader.return_value = True
|
||||
def test_upgrade_charm_leader(self):
|
||||
self.is_leader.return_value = True
|
||||
self.is_unit_paused_set.return_value = False
|
||||
self.get_relation_ip.return_value = '10.10.10.10'
|
||||
self.leader_get.side_effect = [None, 'mypasswd', 'mypasswd']
|
||||
|
||||
def c(k):
|
||||
values = {'wsrep_ready': 'on',
|
||||
|
@ -523,19 +519,13 @@ class TestUpgradeCharm(CharmTestCase):
|
|||
return values[k]
|
||||
|
||||
self.get_wsrep_value.side_effect = c
|
||||
mock_wsrep.side_effect = c
|
||||
mock_data_dir.return_value = self.tmpdir
|
||||
|
||||
hooks.upgrade()
|
||||
|
||||
seeded_file = os.path.join(self.tmpdir, 'seeded')
|
||||
self.assertTrue(os.path.isfile(seeded_file),
|
||||
"%s is not file" % seeded_file)
|
||||
with open(seeded_file) as f:
|
||||
self.assertEqual(f.read(), 'done')
|
||||
self.mark_seeded.assert_called_once()
|
||||
self.notify_bootstrapped.assert_called_with(cluster_uuid='1234-abcd')
|
||||
self.configure_sstuser.assert_called_once()
|
||||
|
||||
mock_rset.assert_called_with(relation_id='cluster:22',
|
||||
**{'bootstrap-uuid': '1234-abcd'})
|
||||
mock_lset.assert_called_with(**{'bootstrap-uuid': '1234-abcd'})
|
||||
|
||||
self.leader_set.assert_called_with(**{'leader-ip': '10.10.10.10'})
|
||||
self.leader_set.assert_has_calls(
|
||||
[mock.call(**{'leader-ip': '10.10.10.10'}),
|
||||
mock.call(**{'root-password': 'mypasswd'})])
|
||||
|
|
Loading…
Reference in New Issue