Bug #95306 _get_communication_protocol() fails if one or more members are RECOVERING
Submitted: 8 May 2019 17:20 Modified: 20 May 2019 15:18
Reporter: Miguel Araujo Email Updates:
Status: Closed Impact on me:
Category:MySQL Server: Group Replication Severity:S3 (Non-critical)
Version:8.0.17 OS:Any
Assigned to: CPU Architecture:Any

[8 May 2019 17:20] Miguel Araujo
The UDF group_replication_get_communication_protocol(), used to inspect the group's communication protocol version at runtime, fails if one or more group members are in the RECOVERING state.

There should be no technical reason to disallow the usage of the UDF in such a scenario.

How to repeat:
1) Create a group in instance 1
2) Insert some data in instance 1 to ensure that whenever a member joins the group the distributed recovery is kicked in
3) Join instance 2 to the group
4) Execute group_replication_get_communication_protocol() on instance 1

Suggested fix:
Allow the UDF to succeed if called on an ONLINE member and there are no UNREACHABLE members. So the other group members can be either ONLINE or RECOVERING.

Ideally, UNREACHABLE members should also be accepted as long as there's visible quorum, i.e. the UNREACHABLE members are a minority.
[20 May 2019 15:18] Margaret Fisher
Posted by developer:
Changelog entry added for MySQL 8.0.17:

The group_replication_get_communication_protocol() UDF, which is used to query the group's communication protocol version, failed if any group members were in RECOVERING state, which was an unnecessary restriction. The UDF can now be used provided that the member where it runs is in ONLINE state, and is in contact with a majority of the group.