private void handleReconnectionRequest(final ReconnectionRequestMessage request) { try { logger.info("Processing reconnection request from cluster coordinator."); // reconnect ConnectionResponse connectionResponse = new ConnectionResponse(getNodeId(), request.getDataFlow(), request.getInstanceId(), request.getNodeConnectionStatuses(), request.getComponentRevisions()); if (connectionResponse.getDataFlow() == null) { logger.info("Received a Reconnection Request that contained no DataFlow. Will attempt to connect to cluster using local flow."); connectionResponse = connect(false, false, createDataFlowFromController()); } loadFromConnectionResponse(connectionResponse); clusterCoordinator.resetNodeStatuses(connectionResponse.getNodeConnectionStatuses().stream() .collect(Collectors.toMap(NodeConnectionStatus::getNodeIdentifier, status -> status))); // reconnected, this node needs to explicitly write the inherited flow to disk, and resume heartbeats saveFlowChanges(); controller.resumeHeartbeats(); logger.info("Node reconnected."); } catch (final Exception ex) { // disconnect controller if (controller.isClustered()) { disconnect("Failed to properly handle Reconnection request due to " + ex.toString()); } logger.error("Handling reconnection request failed due to: " + ex, ex); handleConnectionFailure(ex); } }
private void loadFromConnectionResponse(final ConnectionResponse response) throws ConnectionException { writeLock.lock(); try { if (response.getNodeConnectionStatuses() != null) { clusterCoordinator.resetNodeStatuses(response.getNodeConnectionStatuses().stream() .collect(Collectors.toMap(NodeConnectionStatus::getNodeIdentifier, status -> status)));
@Override public AdaptedConnectionResponse marshal(final ConnectionResponse cr) { final AdaptedConnectionResponse aCr = new AdaptedConnectionResponse(); if (cr != null) { aCr.setDataFlow(cr.getDataFlow()); aCr.setNodeIdentifier(cr.getNodeIdentifier()); aCr.setTryLaterSeconds(cr.getTryLaterSeconds()); aCr.setRejectionReason(cr.getRejectionReason()); aCr.setInstanceId(cr.getInstanceId()); aCr.setNodeConnectionStatuses(cr.getNodeConnectionStatuses()); aCr.setComponentRevisions(cr.getComponentRevisions()); } return aCr; }
@Override public AdaptedConnectionResponse marshal(final ConnectionResponse cr) { final AdaptedConnectionResponse aCr = new AdaptedConnectionResponse(); if (cr != null) { aCr.setDataFlow(cr.getDataFlow()); aCr.setNodeIdentifier(cr.getNodeIdentifier()); aCr.setTryLaterSeconds(cr.getTryLaterSeconds()); aCr.setRejectionReason(cr.getRejectionReason()); aCr.setInstanceId(cr.getInstanceId()); aCr.setNodeConnectionStatuses(cr.getNodeConnectionStatuses()); aCr.setComponentRevisions(cr.getComponentRevisions()); } return aCr; }