def resume(args): """Resume the MySQL service. @raises Exception should the service fail to start.""" if not service_resume(MYSQL_SERVICE): raise Exception("Failed to resume MySQL service.") assess_status()
def main(): try: hooks.execute(sys.argv) except UnregisteredHookError as e: log('Unknown hook {} - skipping.'.format(e)) update_shared_db_rels() assess_status(register_configs())
def bootstrap_pxc(args): """ Force a bootstrap on this node This action will run bootstrap-pxc on this node bootstrapping the cluster. This action should only be run after a cold start requiring a bootstrap. This action should only be run on the node with the highest sequence number as displayed in workgoup status and found in grastate.dat. If this unit has the highest sequence number and is not the juju leader node, a subsequent action run of notify-bootstrapped is required. """ try: # Force safe to bootstrap percona_utils.set_grastate_safe_to_bootstrap() # Boostrap this node percona_utils.bootstrap_pxc() percona_utils.notify_bootstrapped() except (percona_utils.GRAStateFileNotFound, OSError) as e: action_set({'output': e.output, 'return-code': e.returncode}) action_fail("The GRAState file does not exist or cannot " "be written to.") except (subprocess.CalledProcessError, Exception) as e: action_set({ 'output': e.output, 'return-code': e.returncode, 'traceback': traceback.format_exc() }) action_fail("The bootstrap-pxc failed. " "See traceback in show-action-output") action_set({ 'output': "Bootstrap succeeded. " "Wait for the other units to run update-status" }) percona_utils.assess_status(percona_utils.register_configs())
def test_assess_status(self): with mock.patch.object(percona_utils, 'assess_status_func') as asf: callee = mock.MagicMock() asf.return_value = callee percona_utils.assess_status('test-config') asf.assert_called_once_with('test-config') callee.assert_called_once_with()
def test_bootstrapped_not_in_sync(self): self.config.return_value = 3 self.is_sufficient_peers.return_value = True self.is_bootstrapped.return_value = True self.cluster_in_sync.return_value = False percona_utils.assess_status() self.status_set.assert_called_with('blocked', mock.ANY)
def main(): try: hooks.execute(sys.argv) except UnregisteredHookError as e: log('Unknown hook {} - skipping.'.format(e)) kvstore = kv() if not kvstore.get(INITIAL_CLIENT_UPDATE_KEY, False): update_client_db_relations() assess_status(register_configs())
def test_assess_status(self, get_upstream_version, application_version_set, determine_packages): get_upstream_version.return_value = '5.6.17' determine_packages.return_value = ['percona-xtradb-cluster-server-5.6'] with mock.patch.object(percona_utils, 'assess_status_func') as asf: callee = mock.Mock() asf.return_value = callee percona_utils.assess_status('test-config') asf.assert_called_once_with('test-config') callee.assert_called_once_with() get_upstream_version.assert_called_with( 'percona-xtradb-cluster-server-5.6') application_version_set.assert_called_with('5.6.17')
def test_assess_status_find_pkg(self, get_upstream_version, application_version_set, determine_packages, pxc_installed): get_upstream_version.side_effect = [None, None, '5.6.17'] determine_packages.return_value = ['percona-xtradb-cluster-server'] pxc_installed.return_value = True with mock.patch.object(percona_utils, 'assess_status_func') as asf: callee = mock.Mock() asf.return_value = callee percona_utils.assess_status('test-config') asf.assert_called_once_with('test-config') callee.assert_called_once_with() get_upstream_version.assert_called_with( 'percona-xtradb-cluster-server-5.6') application_version_set.assert_called_with('5.6.17')
def test_assess_status_find_pkg_fails(self, get_upstream_version, application_version_set, determine_packages, pxc_installed, log): get_upstream_version.return_value = None determine_packages.return_value = ['percona-xtradb-cluster-server'] pxc_installed.return_value = True with mock.patch.object(percona_utils, 'assess_status_func') as asf: callee = mock.Mock() asf.return_value = callee percona_utils.assess_status('test-config') asf.assert_called_once_with('test-config') callee.assert_called_once_with() get_upstream_version.assert_called_with( 'percona-xtradb-cluster-server-5.7') self.assertFalse(application_version_set.called) self.assertTrue(log.called)
def main(): try: hooks.execute(sys.argv) except UnregisteredHookError as e: log('Unknown hook {} - skipping.'.format(e)) assess_status(register_configs())
def test_not_bootstrapped(self): self.config.return_value = 3 self.is_sufficient_peers.return_value = True self.is_bootstrapped.return_value = False percona_utils.assess_status() self.status_set.assert_called_with('waiting', mock.ANY)
def test_insufficient_peers(self): self.config.return_value = 3 self.is_sufficient_peers.return_value = False percona_utils.assess_status() self.status_set.assert_called_with('blocked', mock.ANY)
def test_single_unit(self): self.config.return_value = None self.is_sufficient_peers.return_value = True percona_utils.assess_status() self.status_set.assert_called_with('active', mock.ANY)