public MulticastJoiner(Node node) { super(node); maxTryCount = new AtomicInteger(calculateTryCount()); node.multicastService.addMulticastListener(new SplitBrainMulticastListener(node, splitBrainJoinMessages)); }
@Override public void doJoin() { long joinStartTime = Clock.currentTimeMillis(); long maxJoinMillis = getMaxJoinMillis(); Address thisAddress = node.getThisAddress(); while (shouldRetry() && (Clock.currentTimeMillis() - joinStartTime < maxJoinMillis)) { // clear master node clusterService.setMasterAddressToJoin(null); Address masterAddress = getTargetAddress(); if (masterAddress == null) { masterAddress = findMasterWithMulticast(); } clusterService.setMasterAddressToJoin(masterAddress); if (masterAddress == null || thisAddress.equals(masterAddress)) { clusterJoinManager.setThisMemberAsMaster(); return; } logger.info("Trying to join to discovered node: " + masterAddress); joinMaster(); } }
private void joinMaster() { long maxMasterJoinTime = getMaxJoinTimeToMasterNode(); long start = Clock.currentTimeMillis(); while (shouldRetry() && Clock.currentTimeMillis() - start < maxMasterJoinTime) { Address master = clusterService.getMasterAddress(); if (master != null) { if (logger.isFineEnabled()) { logger.fine("Joining to master " + master); } clusterJoinManager.sendJoinRequest(master, true); } else { break; } try { Thread.sleep(JOIN_RETRY_INTERVAL); } catch (InterruptedException e) { currentThread().interrupt(); } if (isBlacklisted(master)) { clusterService.setMasterAddressToJoin(null); return; } } }
private void handleNotActiveOrNotJoined(JoinMessage joinMessage) { if (isJoinRequest(joinMessage)) { Joiner joiner = node.getJoiner(); if (joiner instanceof MulticastJoiner) { MulticastJoiner multicastJoiner = (MulticastJoiner) joiner; multicastJoiner.onReceivedJoinRequest((JoinRequest) joinMessage); } else { logDroppedMessage(joinMessage); } } else { Address address = joinMessage.getAddress(); if (node.getJoiner().isBlacklisted(address)) { logDroppedMessage(joinMessage); return; } ClusterServiceImpl clusterService = node.getClusterService(); if (!clusterService.isJoined() && clusterService.getMasterAddress() == null) { clusterService.setMasterAddressToJoin(joinMessage.getAddress()); } else { logDroppedMessage(joinMessage); } } }
Joiner createJoiner() { JoinConfig join = config.getNetworkConfig().getJoin(); join.verify(); if (properties.getBoolean(DISCOVERY_SPI_ENABLED) || isAnyAliasedConfigEnabled(join)) { //TODO: Auto-Upgrade Multicast+AWS configuration! logger.info("Activating Discovery SPI Joiner"); return new DiscoveryJoiner(this, discoveryService, usePublicAddress(join)); } else { if (join.getMulticastConfig().isEnabled() && multicastService != null) { logger.info("Creating MulticastJoiner"); return new MulticastJoiner(this); } else if (join.getTcpIpConfig().isEnabled()) { logger.info("Creating TcpIpJoiner"); return new TcpIpJoiner(this); } else if (join.getAwsConfig().isEnabled()) { logger.info("Creating AWSJoiner"); return createAwsJoiner(); } } return null; }
private Address findMasterWithMulticast() { try { if (logger.isFineEnabled()) { logger.fine("Searching for master node. Max tries: " + maxTryCount.get()); } JoinRequest joinRequest = node.createJoinRequest(false); while (node.isRunning() && currentTryCount.incrementAndGet() <= maxTryCount.get()) { joinRequest.setTryCount(currentTryCount.get()); node.multicastService.send(joinRequest); Address masterAddress = clusterService.getMasterAddress(); if (masterAddress == null) { //noinspection BusyWait Thread.sleep(getPublishInterval()); } else { return masterAddress; } } } catch (final Exception e) { if (logger != null) { logger.warning(e); } } finally { currentTryCount.set(0); } return null; }
private void handleNotActiveOrNotJoined(JoinMessage joinMessage) { if (isJoinRequest(joinMessage)) { Joiner joiner = node.getJoiner(); if (joiner instanceof MulticastJoiner) { MulticastJoiner multicastJoiner = (MulticastJoiner) joiner; multicastJoiner.onReceivedJoinRequest((JoinRequest) joinMessage); } else { logDroppedMessage(joinMessage); } } else { Address address = joinMessage.getAddress(); if (node.getJoiner().isBlacklisted(address)) { logDroppedMessage(joinMessage); return; } ClusterServiceImpl clusterService = node.getClusterService(); if (!clusterService.isJoined() && clusterService.getMasterAddress() == null) { clusterService.setMasterAddressToJoin(joinMessage.getAddress()); } else { logDroppedMessage(joinMessage); } } }
Joiner createJoiner() { JoinConfig join = config.getNetworkConfig().getJoin(); join.verify(); if (properties.getBoolean(DISCOVERY_SPI_ENABLED) || isAnyAliasedConfigEnabled(join)) { //TODO: Auto-Upgrade Multicast+AWS configuration! logger.info("Activating Discovery SPI Joiner"); return new DiscoveryJoiner(this, discoveryService, usePublicAddress(join)); } else { if (join.getMulticastConfig().isEnabled() && multicastService != null) { logger.info("Creating MulticastJoiner"); return new MulticastJoiner(this); } else if (join.getTcpIpConfig().isEnabled()) { logger.info("Creating TcpIpJoiner"); return new TcpIpJoiner(this); } else if (join.getAwsConfig().isEnabled()) { logger.info("Creating AWSJoiner"); return createAwsJoiner(); } } return null; }
private Address findMasterWithMulticast() { try { if (logger.isFineEnabled()) { logger.fine("Searching for master node. Max tries: " + maxTryCount.get()); } JoinRequest joinRequest = node.createJoinRequest(false); while (node.isRunning() && currentTryCount.incrementAndGet() <= maxTryCount.get()) { joinRequest.setTryCount(currentTryCount.get()); node.multicastService.send(joinRequest); Address masterAddress = clusterService.getMasterAddress(); if (masterAddress == null) { //noinspection BusyWait Thread.sleep(getPublishInterval()); } else { return masterAddress; } } } catch (final Exception e) { if (logger != null) { logger.warning(e); } } finally { currentTryCount.set(0); } return null; }
@Override public void doJoin() { long joinStartTime = Clock.currentTimeMillis(); long maxJoinMillis = getMaxJoinMillis(); Address thisAddress = node.getThisAddress(); while (shouldRetry() && (Clock.currentTimeMillis() - joinStartTime < maxJoinMillis)) { // clear master node clusterService.setMasterAddressToJoin(null); Address masterAddress = getTargetAddress(); if (masterAddress == null) { masterAddress = findMasterWithMulticast(); } clusterService.setMasterAddressToJoin(masterAddress); if (masterAddress == null || thisAddress.equals(masterAddress)) { clusterJoinManager.setThisMemberAsMaster(); return; } logger.info("Trying to join to discovered node: " + masterAddress); joinMaster(); } }
private void joinMaster() { long maxMasterJoinTime = getMaxJoinTimeToMasterNode(); long start = Clock.currentTimeMillis(); while (shouldRetry() && Clock.currentTimeMillis() - start < maxMasterJoinTime) { Address master = clusterService.getMasterAddress(); if (master != null) { if (logger.isFineEnabled()) { logger.fine("Joining to master " + master); } clusterJoinManager.sendJoinRequest(master, true); } else { break; } try { Thread.sleep(JOIN_RETRY_INTERVAL); } catch (InterruptedException e) { currentThread().interrupt(); } if (isBlacklisted(master)) { clusterService.setMasterAddressToJoin(null); return; } } }
public MulticastJoiner(Node node) { super(node); maxTryCount = new AtomicInteger(calculateTryCount()); node.multicastService.addMulticastListener(new SplitBrainMulticastListener(node, splitBrainJoinMessages)); }