WL#14563: Make IP Allowlist modifiable while GR is running

Affects: Server-8.0   —   Status: Complete

EXECUTIVE SUMMARY
=================

This work allows users to change IP allow list on a group member while
GR is running.  To reflect this change on all group members, the
change needs to be done at each member.


USER STORIES
============

- As a DBA I want to update the IP allow list while GR is running so
  that when adding a new member I do not have to restart GR on every
  member the list is updated.

SCOPE
=====

- This worklog is limited to making one group replication option be
  settable while group replication is running. It does not change its
  semantics in any way.

LIMITS
======

- None. We are lifting a limitation actually.
FR1. When updating the group_replication_ip_allow_list, there shall
     not be any error returned stating that the option cannot be
     changed while GR is running. (Note: ip_white_list is deprecated.)

FR2. When updating the group_replication_ip_white_list, there shall
     not be any error returned stating that the option cannot be
     changed while GR is running. (Note: ip_white_list is deprecated.)

FR3. The scope of this variables is single instance. Therefore, updating
     this variable on an instance SHALL NOT modify the variable on all
     other instances that are part of the group.

FR4. To update the entire group user MUST update all instances, one
     by one.
SUMMARY OF THE APPROACH
=======================

The approach is as follows:
- remove the check that disallows changing the variable while GR
  is running.
- Implement the variable reconfiguration in GCS.
- Make sure synchronization happens between the XCom kernel thread
  and user threads, using atomics since this is a fast operation,
  to guarantee that we don't have concurrent access to modifiable
  data.

USER INTERFACE
==============

System Variables: group_replication_ip_[allow|white]_list
- NAME: group_replication_ip_[allow|white]_list
- VALUES: No change
- DEFAULT: No change
- SCOPE: No change
- REPLICATED: No change
- DYNAMIC: Yes. It can be settable even with GR running after this worklog.
- PERSIST: No change
- PRIVILEGES: No change
- COMMAND LINE: No change
- DESCRIPTION: No change
- OBSERVABILITY: No change

OBSERVABILITY
=============

No change

USER PROCEDURE
==============

No change

SECURITY CONTEXT
================

No change

DEPLOYMENT and INSTALLATION
===========================

N/A

PROTOCOL
========

N/A

FAILURE MODEL SPECIFICATION
===========================

N/A

UPGRADE/DOWNGRADE and CROSS-VERSION REPLICATION
===============================================

N/A
BLOCK DIAGRAM
=============

N/A


INTERFACE SPECIFICATION
=======================

N/A

DESIGN IMPLEMENTATION STEPS
===========================

1. Add support ip_allowlist in the (re)configure member function
   Gcs_xcom_interface.
2. Include synchronization using atomics for the Gcs_ip_allowlist
   object. Operations on this object are fast, so different threads
   can spin a little.
3. Remove the const keyword from the interface definition for the
   Gcs_ip_allowlist, since now it needs to change its own object
   (synchronization flag).
4. Remove runtime check that would block changing the variable.
5. Fix the existing tests.