async def test_replica_reaction_to_master_lock_change(app): plugins = setup_plugins(app, pg_get_timeline=42, pg_replication_role='replica') assert app.initialize() == None plugins.reset_mock() # if the lock changes owner to someone else, carry on trucking plugins.reset_mock() app.master_lock_changed('someone else') assert app._plugins.mock_calls == [ call.pg_replication_role(), ] assert app._master_lock_owner == 'someone else' # if the lock is owned by us, er, we stop replication and become the master plugins.reset_mock() plugins.pg_replication_role.side_effect = ['replica', 'master'] app.master_lock_changed(app.my_id) assert app._plugins.mock_calls == [ call.pg_replication_role(), call.pg_stop_replication(), call.pg_replication_role(), call.pg_get_timeline(), call.dcs_set_timeline(42), call.dcs_set_state({ 'health_problems': {}, 'replication_role': 'master', 'host': '127.0.0.1'}), ] assert app._master_lock_owner == app.my_id
async def test_replica_reaction_to_master_lock_change(app): plugins = setup_plugins(app, pg_get_timeline=42, pg_replication_role='replica') assert app.initialize() == None plugins.reset_mock() # if the lock changes owner to someone else, carry on trucking plugins.reset_mock() app.master_lock_changed('someone else') assert plugins.mock_calls == [ call.pg_replication_role(), call.master_lock_changed('someone else') ] assert app._master_lock_owner == 'someone else' # if the lock is owned by us, er, we stop replication and become the master plugins.reset_mock() plugins.pg_replication_role.side_effect = ['replica', 'master'] app.master_lock_changed(app.my_id) assert plugins.mock_calls == [ call.pg_replication_role(), call.dcs_set_state({ 'replication_role': 'taking-over', 'willing': None, 'health_problems': {}, 'host': '127.0.0.1' }), call.pg_stop_replication(), call.pg_replication_role(), call.pg_get_timeline(), call.dcs_set_timeline(42), call.dcs_set_state({ 'health_problems': {}, 'replication_role': 'master', 'willing': None, 'host': '127.0.0.1' }), call.master_lock_changed('42') ] assert app._master_lock_owner == app.my_id
async def test_replica_reaction_to_master_lock_change(app): plugins = setup_plugins(app, pg_get_timeline=42, pg_am_i_replica=True) assert app.initialize() == None plugins.reset_mock() # if the lock changes owner to someone else, carry on trucking plugins.reset_mock() app.master_lock_changed('someone else') assert app._plugins.mock_calls == [ call.pg_am_i_replica(), ] assert app._master_lock_owner == 'someone else' # if the lock is owned by us, er, we stop replication and become the master plugins.reset_mock() app.master_lock_changed(app.my_id) print(app._plugins.mock_calls) assert app._plugins.mock_calls == [ call.pg_am_i_replica(), call.pg_stop_replication(), call.pg_get_timeline(), call.dcs_set_timeline(42), ] assert app._master_lock_owner == app.my_id