private void disconnectAsynchronously(final DisconnectMessage request, final int attempts, final int retrySeconds) { final Thread disconnectThread = new Thread(new Runnable() { @Override public void run() { final NodeIdentifier nodeId = request.getNodeId(); for (int i = 0; i < attempts; i++) { try { senderListener.disconnect(request); reportEvent(nodeId, Severity.INFO, "Node disconnected due to " + request.getExplanation()); return; } catch (final Exception e) { logger.error("Failed to notify {} that it has been disconnected from the cluster due to {}", request.getNodeId(), request.getExplanation()); try { Thread.sleep(retrySeconds * 1000L); } catch (final InterruptedException ie) { Thread.currentThread().interrupt(); return; } } } } }, "Disconnect " + request.getNodeId()); disconnectThread.start(); }
@Override public void run() { final NodeIdentifier nodeId = request.getNodeId(); for (int i = 0; i < attempts; i++) { try { senderListener.disconnect(request); reportEvent(nodeId, Severity.INFO, "Node disconnected due to " + request.getExplanation()); return; } catch (final Exception e) { logger.error("Failed to notify {} that it has been disconnected from the cluster due to {}", request.getNodeId(), request.getExplanation()); try { Thread.sleep(retrySeconds * 1000L); } catch (final InterruptedException ie) { Thread.currentThread().interrupt(); return; } } } } }, "Disconnect " + request.getNodeId());
/** * Requests a node to disconnect from the cluster. The configured value for * handshake timeout is applied to the socket before making the request. * * @param msg a message * @throws ProtocolException if the message failed to be sent */ @Override public void disconnect(final DisconnectMessage msg) throws ProtocolException { Socket socket = null; try { socket = createSocket(msg.getNodeId(), true); // marshal message to output stream try { final ProtocolMessageMarshaller<ProtocolMessage> marshaller = protocolContext.createMarshaller(); marshaller.marshal(msg, socket.getOutputStream()); } catch (final IOException ioe) { throw new ProtocolException("Failed marshalling '" + msg.getType() + "' protocol message due to: " + ioe, ioe); } } finally { SocketUtils.closeQuietly(socket); } }
private NodeIdentifier getNodeIdentifier(final ProtocolMessage message) { if (message == null) { return null; } switch (message.getType()) { case CONNECTION_REQUEST: return ((ConnectionRequestMessage) message).getConnectionRequest().getProposedNodeIdentifier(); case HEARTBEAT: return ((HeartbeatMessage) message).getHeartbeat().getNodeIdentifier(); case OFFLOAD_REQUEST: return ((OffloadMessage) message).getNodeId(); case DISCONNECTION_REQUEST: return ((DisconnectMessage) message).getNodeId(); case FLOW_REQUEST: return ((FlowRequestMessage) message).getNodeId(); case RECONNECTION_REQUEST: return ((ReconnectionRequestMessage) message).getNodeId(); default: return null; } }
/** * Requests a node to disconnect from the cluster. The configured value for * handshake timeout is applied to the socket before making the request. * * @param msg a message * @throws ProtocolException if the message failed to be sent */ @Override public void disconnect(final DisconnectMessage msg) throws ProtocolException { Socket socket = null; try { socket = createSocket(msg.getNodeId(), true); // marshal message to output stream try { final ProtocolMessageMarshaller<ProtocolMessage> marshaller = protocolContext.createMarshaller(); marshaller.marshal(msg, socket.getOutputStream()); } catch (final IOException ioe) { throw new ProtocolException("Failed marshalling '" + msg.getType() + "' protocol message due to: " + ioe, ioe); } } finally { SocketUtils.closeQuietly(socket); } }
private NodeIdentifier getNodeIdentifier(final ProtocolMessage message) { if (message == null) { return null; } switch (message.getType()) { case CONNECTION_REQUEST: return ((ConnectionRequestMessage) message).getConnectionRequest().getProposedNodeIdentifier(); case HEARTBEAT: return ((HeartbeatMessage) message).getHeartbeat().getNodeIdentifier(); case OFFLOAD_REQUEST: return ((OffloadMessage) message).getNodeId(); case DISCONNECTION_REQUEST: return ((DisconnectMessage) message).getNodeId(); case FLOW_REQUEST: return ((FlowRequestMessage) message).getNodeId(); case RECONNECTION_REQUEST: return ((ReconnectionRequestMessage) message).getNodeId(); default: return null; } }