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
(cherry picked from commit 5bce1985e1
)
This commit is contained in:
parent
84dd9cde8d
commit
85551aced0
|
@ -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