I see now that `isAllCollected()` only returns true once, so it's not possible to call `endRebalance()` twice. But still, there is no synchronization covering both the `retain()` and the `isAllCompletedCall()`, so it's possible that the thread that got the last confirmation  is not the thread to call `endRebalance()`, which would make for some confusing logs.

In the end I just don't see the need for a separate `Collector` class, `RebalanceConfirmationCollector` is longer now than it was before the collector was extracted from it, and I suspect XSiteStateTransferCollector would also be shorter without it.