Branch: refs/heads/master Home: https://github.com/xwiki/xwiki-platform Commit: 386d76e0554ab67c6c22b6902bc056b3927ca96a https://github.com/xwiki/xwiki-platform/commit/386d76e0554ab67c6c22b6902bc05... Author: ciaens <[email protected]> Date: 2026-10-13 (Tue, 13 Oct 2026) Changed paths: M xwiki-platform-core/xwiki-platform-observation/xwiki-platform-observation-remote/pom.xml M xwiki-platform-core/xwiki-platform-observation/xwiki-platform-observation-remote/src/main/java/org/xwiki/observation/remote/NetworkChannel.java M xwiki-platform-core/xwiki-platform-observation/xwiki-platform-observation-remote/src/main/java/org/xwiki/observation/remote/NetworkChannelLeaderChangedEvent.java M xwiki-platform-core/xwiki-platform-observation/xwiki-platform-observation-remote/src/main/java/org/xwiki/observation/remote/internal/jgroups/JGroupsNetworkChannel.java M xwiki-platform-core/xwiki-platform-observation/xwiki-platform-observation-remote/src/test/java/org/xwiki/observation/remote/TCPROMTest.java M xwiki-platform-core/xwiki-platform-observation/xwiki-platform-observation-remote/src/test/java/org/xwiki/observation/remote/test/AbstractROMTestCase.java Log Message: ----------- XWIKI-25245: NetworkMemberLeftEvent carries the wrong member and the JGroups member id map never shrinks (#6766) * NetworkMemberLeftEvent now carries the member which actually left instead of the previous leader * viewAccepted() reconciles the members from the view it receives (also picks up members whose id arrived before the view) instead of re-reading the channel view * The JGroups address to XWiki id map forgets the addresses which are no longer in the view, so it stops growing on every member restart * The id map is keyed by JGroups Address instead of Address#toString(), which depends on the asynchronous name cache * After reconciling a view, the id of the members which are not known (for example a member which was wrongly suspected and comes back with a merge view) is requested again, without blocking the JGroups thread * A member whose id exchange is not finished yet is no longer stored under a null id, handshake responses which were not received are skipped instead of failing the channel start, and the id map is only exposed once the handshake is over * The leader is always the oldest member of the view (the JGroups coordinator), with a null id while its id is not known, instead of the oldest member whose id is known; the leader change is notified on a change of address or id, so listeners are notified again when the id of the leader is received * The javadoc of NetworkChannelLeaderChangedEvent (data: the new leader, not the previous one, also sent when the id of the leader becomes known) and NetworkChannel#getLeader() (the id can be null) documents this * A member presenting the same id as the current instance is reported in the log * TCPROMTest: new memberLeft, memberIdForgotten and leaderIdUnknown tests, three members fit in the TCPPING port range, system properties are restored * AbstractROMTestCase can emulate more than two instances and gives each one its own permanent directory (they used to share the same id) * Coverage threshold of xwiki-platform-observation-remote raised to 0.79 Co-authored-by: Clément Christiaens <[email protected]> Co-authored-by: Claude <[email protected]> To unsubscribe from these emails, change your notification settings at https://github.com/xwiki/xwiki-platform/settings/notifications