docs: public Collection<Address> getCommitNodes(Collection<Address> recipients, CacheTopology cacheTopology) {
        int currentTopologyId = cacheTopology.getTopologyId();
        List<Address> members = cacheTopology.getMembers();
        if (trace) log.tracef("getCommitNodes recipients=%s, currentTopologyId=%s, members=%s, txTopologyId=%s",
                              recipients, currentTopologyId, members, getTopologyId());
        if (hasModification(ClearCommand.class)) {
           return members;
        }
        if (recipients == null) {
           return null;
        }
        // Include all the nodes we sent a LockControlCommand to and are not in the recipients list now
        // either because the topology changed, or because the lock failed.
        // Also include nodes that are no longer in the cluster, so if JGroups retransmits a lock/prepare command
        // after a merge, it also retransmits the commit/rollback.
        Set<Address> allRecipients = new HashSet<>(getRemoteLocksAcquired());
        allRecipients.addAll(recipients);
        if (trace) log.tracef("The merged list of nodes to send commit/rollback is %s", allRecipients);
        return allRecipients;
     }