@Override public final void join() { blacklistedAddresses.clear(); doJoin(); if (!clusterService.isJoined() && shouldResetHotRestartData()) { logger.warning("Could not join to the cluster because hot restart data must be reset."); node.getNodeExtension().getInternalHotRestartService().resetHotRestartData(); reset(); doJoin(); } postJoin(); }
/** * Sends a split brain join request to the target address and checks the response to see if this node should merge * to the target address. */ protected final SplitBrainMergeCheckResult sendSplitBrainJoinMessageAndCheckResponse(Address target, SplitBrainJoinMessage request) { SplitBrainJoinMessage response = sendSplitBrainJoinMessage(target, request); return clusterService.getClusterJoinManager().shouldMerge(response); }
@Override public final void join() { blacklistedAddresses.clear(); doJoin(); if (!clusterService.isJoined() && isMemberExcludedFromHotRestart()) { logger.warning("Could not join to the cluster because hot restart data must be reset."); node.getNodeExtension().getInternalHotRestartService().forceStartBeforeJoin(); reset(); doJoin(); } postJoin(); }
if (!preCheckClusterState(clusterService)) { return false; clusterService.changeClusterState(FROZEN); return verifyMemberListVersionAfterStateChange(clusterService, clusterState, expectedMemberListVersion); } catch (Exception e) { String error = e.getClass().getName() + ": " + e.getMessage();
@Override public void reset() { super.reset(); // since this node is going to merge with a detected cluster, clear the queued split brain join messages (if any) splitBrainJoinMessages.clear(); }
private void postJoin() { blacklistedAddresses.clear(); if (logger.isFineEnabled()) { logger.fine("PostJoin master: " + clusterService.getMasterAddress() + ", isMaster: " + clusterService.isMaster()); } if (!node.isRunning()) { return; } if (tryCount.incrementAndGet() == JOIN_TRY_COUNT) { logger.warning("Join try count exceed limit, setting this node as master!"); clusterJoinManager.setThisMemberAsMaster(); } if (clusterService.isJoined()) { if (!clusterService.isMaster()) { ensureConnectionToAllMembers(); } if (clusterService.getSize() == 1) { clusterService.printMemberList(); } } }
protected void startClusterMerge(Address targetAddress, int expectedMemberListVersion) { ClusterServiceImpl clusterService = node.clusterService; if (!prepareClusterState(clusterService, expectedMemberListVersion)) { return; } OperationService operationService = node.nodeEngine.getOperationService(); Collection<Member> memberList = clusterService.getMembers(); Collection<Future> futures = new ArrayList<Future>(memberList.size()); for (Member member : memberList) { if (!member.localMember()) { Operation op = new MergeClustersOp(targetAddress); Future<Object> future = operationService.invokeOnTarget(ClusterServiceImpl.SERVICE_NAME, op, member.getAddress()); futures.add(future); } } waitWithDeadline(futures, SPLIT_BRAIN_MERGE_TIMEOUT_SECONDS, TimeUnit.SECONDS, splitBrainMergeExceptionHandler); Operation op = new MergeClustersOp(targetAddress); op.setNodeEngine(node.nodeEngine).setService(clusterService).setOperationResponseHandler(createEmptyResponseHandler()); operationService.run(op); }
protected final boolean shouldRetry() { return node.isRunning() && !clusterService.isJoined() && !shouldResetHotRestartData(); }
protected final boolean shouldRetry() { return node.isRunning() && !clusterService.isJoined() && !isMemberExcludedFromHotRestart(); }
if (!preCheckClusterState(clusterService)) { return false; clusterService.changeClusterState(FROZEN); return verifyMemberListVersionAfterStateChange(clusterService, clusterState, expectedMemberListVersion); } catch (Exception e) { String error = e.getClass().getName() + ": " + e.getMessage();
@Override public void reset() { super.reset(); // since this node is going to merge with a detected cluster, clear the queued split brain join messages (if any) splitBrainJoinMessages.clear(); }
private void postJoin() { blacklistedAddresses.clear(); if (logger.isFineEnabled()) { logger.fine("PostJoin master: " + clusterService.getMasterAddress() + ", isMaster: " + clusterService.isMaster()); } if (!node.isRunning()) { return; } if (tryCount.incrementAndGet() == JOIN_TRY_COUNT) { logger.warning("Join try count exceed limit, setting this node as master!"); clusterJoinManager.setThisMemberAsMaster(); } if (clusterService.isJoined()) { if (!clusterService.isMaster()) { ensureConnectionToAllMembers(); } if (clusterService.getSize() == 1) { clusterService.printMemberList(); } } }
protected void startClusterMerge(Address targetAddress, int expectedMemberListVersion) { ClusterServiceImpl clusterService = node.clusterService; if (!prepareClusterState(clusterService, expectedMemberListVersion)) { return; } OperationService operationService = node.nodeEngine.getOperationService(); Collection<Member> memberList = clusterService.getMembers(); Collection<Future> futures = new ArrayList<Future>(memberList.size()); for (Member member : memberList) { if (!member.localMember()) { Operation op = new MergeClustersOp(targetAddress); Future<Object> future = operationService.invokeOnTarget(ClusterServiceImpl.SERVICE_NAME, op, member.getAddress()); futures.add(future); } } waitWithDeadline(futures, SPLIT_BRAIN_MERGE_TIMEOUT_SECONDS, TimeUnit.SECONDS, splitBrainMergeExceptionHandler); Operation op = new MergeClustersOp(targetAddress); op.setNodeEngine(node.nodeEngine).setService(clusterService).setOperationResponseHandler(createEmptyResponseHandler()); operationService.run(op); }
/** * Sends a split brain join request to the target address and checks the response to see if this node should merge * to the target address. */ protected final SplitBrainMergeCheckResult sendSplitBrainJoinMessageAndCheckResponse(Address target, SplitBrainJoinMessage request) { SplitBrainJoinMessage response = sendSplitBrainJoinMessage(target, request); return clusterService.getClusterJoinManager().shouldMerge(response); }