| Bug #112779 | Not auto rejoin after failing to parse relay log | ||
|---|---|---|---|
| Submitted: | 20 Oct 2023 3:57 | Modified: | 24 Oct 2023 6:39 |
| Reporter: | zetang zeng (OCA) | Email Updates: | |
| Status: | Can't repeat | Impact on me: | |
| Category: | MySQL Server: Group Replication | Severity: | S3 (Non-critical) |
| Version: | 8.0.33 | OS: | Any |
| Assigned to: | MySQL Verification Team | CPU Architecture: | Any |
[20 Oct 2023 3:57]
zetang zeng
[21 Oct 2023 1:37]
MySQL Verification Team
Hi, I cannot reproduce this. If I set packet drop server will try to rejoin 3 times every 5 minutes and will stop trying then as expected.
[24 Oct 2023 6:39]
zetang zeng
From source code, when some network problem causes failure to parse binlog, it will leave group without AUTO_REJOIN. My problem is why not?
No auto-rejoin from applier.cc :
leave_group_on_failure::mask leave_actions;
/*
Only follow exit_state_action if we were already inside a group. We may
happen to come across an applier error during the startup of GR (i.e.
during the execution of the START GROUP_REPLICATION command). We must not
follow exit_state_action on that situation.
*/
leave_actions.set(leave_group_on_failure::HANDLE_EXIT_STATE_ACTION,
gcs_module->belongs_to_group());
leave_group_on_failure::leave(leave_actions,
ER_GRP_RPL_APPLIER_EXECUTION_FATAL_ERROR,
nullptr, exit_state_action_abort_log_message);
another case with auto-rejoin
const char *exit_state_action_abort_log_message =
"Member was expelled from the group due to network failures.";
leave_group_on_failure::mask leave_actions;
leave_actions.set(leave_group_on_failure::ALREADY_LEFT_GROUP, true);
leave_actions.set(leave_group_on_failure::CLEAN_GROUP_MEMBERSHIP, true);
leave_actions.set(leave_group_on_failure::STOP_APPLIER, true);
leave_actions.set(leave_group_on_failure::HANDLE_EXIT_STATE_ACTION, true);
leave_actions.set(leave_group_on_failure::HANDLE_AUTO_REJOIN, true);
leave_group_on_failure::leave(leave_actions, ER_GRP_RPL_MEMBER_EXPELLED,
&m_notification_ctx,
exit_state_action_abort_log_message);
