I'm ok with handling the leave events in a separate PR. But I think you can remove the `shouldPut(siteState.key())` call in XSiteStateConsumerImpl even now.

I'm not sure retrying the state push command will work, the `XSiteStateConsumer.applyState` javadoc says "The state is applied as a normal operation in this cluster, so make sure that this method is not invoked twice or more for the state state"

OTOH, I'm pretty sure you'll need to retry the x-site STATE_SEND command on the source site, if you want to handle join/leave events. So I'm pretty sure the x-site state consumer will have to handle duplicate invocations.