log.debugf("Node %s joining cache %s", transport.getAddress(), cacheName);
LocalCacheStatus cacheStatus = new LocalCacheStatus(joinInfo, stm, phm);
runningCaches.put(cacheName, cacheStatus);
int viewId = transport.getViewId();
ReplicableCommand command = new CacheTopologyControlCommand(cacheName,
CacheTopologyControlCommand.Type.JOIN, transport.getAddress(), joinInfo, viewId);
long timeout = joinInfo.getTimeout();
long endTime = timeService.expectedEndTime(timeout, TimeUnit.MILLISECONDS);
// Synchronize here to delay any rebalance until after we have received the initial cache topology.
// This ensures that the cache will have a topology at the end of startup (with awaitInitialTransfer disabled).