def test_is_in_recovery(self, connect): connect().cursor().fetchone.return_value = [sentinel.flag] connect().cursor.reset_mock() connect.reset_mock() self.assertEqual(postgresql.is_in_recovery(), sentinel.flag) connect.assert_called_once_with() connect().cursor.assert_called_once_with() connect().cursor().execute.assert_called_once_with("SELECT pg_is_in_recovery()")
def test_is_in_recovery(self, connect): connect().cursor().fetchone.return_value = [sentinel.flag] connect().cursor.reset_mock() connect.reset_mock() self.assertEqual(postgresql.is_in_recovery(), sentinel.flag) connect.assert_called_once_with() connect().cursor.assert_called_once_with() connect().cursor().execute.assert_called_once_with( 'SELECT pg_is_in_recovery()')
def promote_to_master(): status_set("maintenance", "Promoting to master") postgresql.promote() set_following(None) publish_following() while postgresql.is_in_recovery(): status_set("maintenance", "Waiting for startup") time.sleep(1) if postgresql.has_version("12"): assert not os.path.exists(postgresql.hot_standby_signal_path( )), "standby.signal still exists after promotion" else: assert not os.path.exists(postgresql.recovery_conf_path( )), "recovery.conf still exists after promotion" update_replication_states() helpers.ping_peers()
def start(): status_set('maintenance', 'Starting PostgreSQL') postgresql.start() while postgresql.is_primary() and postgresql.is_in_recovery(): status_set('maintenance', 'Startup recovery') time.sleep(1) store = unitdata.kv() open_ports(store.get('postgresql.cluster.pgconf.live.port') or 5432, store.get('postgresql.cluster.pgconf.current.port') or 5432) # Update the 'live' config now we know it is in effect. This # is used to detect future config changes that require a restart. settings = store.getrange('postgresql.cluster.pgconf.current.', strip=True) store.unsetrange(prefix='postgresql.cluster.pgconf.live.') store.update(settings, prefix='postgresql.cluster.pgconf.live.') reactive.set_state('postgresql.cluster.is_running') reactive.remove_state('postgresql.cluster.needs_restart') reactive.remove_state('postgresql.cluster.needs_reload')
def start(): status_set("maintenance", "Starting PostgreSQL") postgresql.start() while postgresql.is_primary() and postgresql.is_in_recovery(): status_set("maintenance", "Startup recovery") time.sleep(1) store = unitdata.kv() open_ports( store.get("postgresql.cluster.pgconf.live.port") or 5432, store.get("postgresql.cluster.pgconf.current.port") or 5432, ) # Update the 'live' config now we know it is in effect. This # is used to detect future config changes that require a restart. settings = store.getrange("postgresql.cluster.pgconf.current.", strip=True) store.unsetrange(prefix="postgresql.cluster.pgconf.live.") store.update(settings, prefix="postgresql.cluster.pgconf.live.") reactive.set_state("postgresql.cluster.is_running") reactive.remove_state("postgresql.cluster.needs_restart") reactive.remove_state("postgresql.cluster.needs_reload")