public static StandardNodeHeartbeat fromHeartbeatMessage(final HeartbeatMessage message, final long timestamp) { final Heartbeat heartbeat = message.getHeartbeat(); final HeartbeatPayload payload = HeartbeatPayload.unmarshal(heartbeat.getPayload()); return new StandardNodeHeartbeat(heartbeat.getNodeIdentifier(), timestamp, heartbeat.getConnectionStatus(), (int) payload.getTotalFlowFileCount(), payload.getTotalFlowFileBytes(), payload.getActiveThreadCount(), payload.getSystemStartTime()); } }
public byte[] marshal() throws ProtocolException { final ByteArrayOutputStream payloadBytes = new ByteArrayOutputStream(); marshal(this, payloadBytes); return payloadBytes.toByteArray(); }
final HeartbeatPayload hbPayload = new HeartbeatPayload(); hbPayload.setSystemStartTime(systemStartTime); hbPayload.setActiveThreadCount(getActiveThreadCount()); hbPayload.setTotalFlowFileCount(queueSize.getObjectCount()); hbPayload.setTotalFlowFileBytes(queueSize.getByteCount()); hbPayload.setClusterStatus(clusterCoordinator.getConnectionStatuses()); final Heartbeat heartbeat = new Heartbeat(nodeId, connectionStatus, hbPayload.marshal()); final HeartbeatMessage message = new HeartbeatMessage(); message.setHeartbeat(heartbeat);
final HeartbeatPayload payload = HeartbeatPayload.unmarshal(payloadBytes); final List<NodeConnectionStatus> nodeStatusList = payload.getClusterStatus(); final Map<NodeIdentifier, Long> updateIdMap = nodeStatusList.stream().collect( Collectors.toMap(status -> status.getNodeIdentifier(), status -> status.getUpdateIdentifier()));
public static HeartbeatPayload unmarshal(final byte[] bytes) throws ProtocolException { return unmarshal(new ByteArrayInputStream(bytes)); } }
public static HeartbeatPayload unmarshal(final byte[] bytes) throws ProtocolException { return unmarshal(new ByteArrayInputStream(bytes)); } }
private ProtocolMessage handleHeartbeat(final HeartbeatMessage msg) { final HeartbeatMessage heartbeatMsg = msg; final Heartbeat heartbeat = heartbeatMsg.getHeartbeat(); final NodeIdentifier nodeId = heartbeat.getNodeIdentifier(); final NodeConnectionStatus connectionStatus = heartbeat.getConnectionStatus(); final byte[] payloadBytes = heartbeat.getPayload(); final HeartbeatPayload payload = HeartbeatPayload.unmarshal(payloadBytes); final int activeThreadCount = payload.getActiveThreadCount(); final int flowFileCount = (int) payload.getTotalFlowFileCount(); final long flowFileBytes = payload.getTotalFlowFileBytes(); final long systemStartTime = payload.getSystemStartTime(); final NodeHeartbeat nodeHeartbeat = new StandardNodeHeartbeat(nodeId, System.currentTimeMillis(), connectionStatus, flowFileCount, flowFileBytes, activeThreadCount, systemStartTime); heartbeatMessages.put(heartbeat.getNodeIdentifier(), nodeHeartbeat); logger.debug("Received new heartbeat from {}", nodeId); // Formulate a List of differences between our view of the cluster topology and the node's view // and send that back to the node so that it is in-sync with us List<NodeConnectionStatus> nodeStatusList = payload.getClusterStatus(); if (nodeStatusList == null) { nodeStatusList = Collections.emptyList(); } final List<NodeConnectionStatus> updatedStatuses = getUpdatedStatuses(nodeStatusList); final HeartbeatResponseMessage responseMessage = new HeartbeatResponseMessage(); responseMessage.setUpdatedNodeStatuses(updatedStatuses); if (!getClusterCoordinator().isFlowElectionComplete()) { responseMessage.setFlowElectionMessage(getClusterCoordinator().getFlowElectionStatus()); } return responseMessage; }
public byte[] marshal() throws ProtocolException { final ByteArrayOutputStream payloadBytes = new ByteArrayOutputStream(); marshal(this, payloadBytes); return payloadBytes.toByteArray(); }