private SocketChannel createChannel() throws IOException { final SocketChannel socketChannel = SocketChannel.open(); try { socketChannel.configureBlocking(true); final Socket socket = socketChannel.socket(); socket.setSoTimeout(timeoutMillis); socket.connect(new InetSocketAddress(nodeIdentifier.getLoadBalanceAddress(), nodeIdentifier.getLoadBalancePort())); socket.setSoTimeout(timeoutMillis); return socketChannel; } catch (final Exception e) { try { socketChannel.close(); } catch (final Exception closeException) { e.addSuppressed(closeException); } throw e; } }
private NodeIdentifier resolveNodeId(final NodeIdentifier proposedIdentifier) { final NodeConnectionStatus proposedConnectionStatus = new NodeConnectionStatus(proposedIdentifier, DisconnectionCode.NOT_YET_CONNECTED); final NodeConnectionStatus existingStatus = nodeStatuses.putIfAbsent(proposedIdentifier, proposedConnectionStatus); NodeIdentifier resolvedNodeId = proposedIdentifier; if (existingStatus == null) { // there is no node with that ID resolvedNodeId = proposedIdentifier; logger.debug("No existing node with ID {}; resolved node ID is as-proposed", proposedIdentifier.getFullDescription()); onNodeAdded(resolvedNodeId, true); } else if (existingStatus.getNodeIdentifier().logicallyEquals(proposedIdentifier)) { // there is a node with that ID but it's the same node. resolvedNodeId = proposedIdentifier; logger.debug("A node already exists with ID {} and is logically equivalent; resolved node ID is as-proposed: {}", proposedIdentifier.getId(), proposedIdentifier.getFullDescription()); } else { // there is a node with that ID and it's a different node resolvedNodeId = new NodeIdentifier(UUID.randomUUID().toString(), proposedIdentifier.getApiAddress(), proposedIdentifier.getApiPort(), proposedIdentifier.getSocketAddress(), proposedIdentifier.getSocketPort(), proposedIdentifier.getLoadBalanceAddress(), proposedIdentifier.getLoadBalancePort(), proposedIdentifier.getSiteToSiteAddress(), proposedIdentifier.getSiteToSitePort(), proposedIdentifier.getSiteToSiteHttpApiPort(), proposedIdentifier.isSiteToSiteSecure()); logger.debug("A node already exists with ID {}. Proposed Node Identifier was {}; existing Node Identifier is {}; Resolved Node Identifier is {}", proposedIdentifier.getId(), proposedIdentifier.getFullDescription(), getNodeIdentifier(proposedIdentifier.getId()).getFullDescription(), resolvedNodeId.getFullDescription()); } return resolvedNodeId; }
private NodeIdentifier addNodeIdentities(final NodeIdentifier nodeId, final Set<String> nodeIdentities) { return new NodeIdentifier(nodeId.getId(), nodeId.getApiAddress(), nodeId.getApiPort(), nodeId.getSocketAddress(), nodeId.getSocketPort(), nodeId.getLoadBalanceAddress(), nodeId.getLoadBalancePort(), nodeId.getSiteToSiteAddress(), nodeId.getSiteToSitePort(), nodeId.getSiteToSiteHttpApiPort(), nodeId.isSiteToSiteSecure(), nodeIdentities); }
@Override public AdaptedNodeIdentifier marshal(final NodeIdentifier ni) { if (ni == null) { return null; } else { final AdaptedNodeIdentifier aNi = new AdaptedNodeIdentifier(); aNi.setId(ni.getId()); aNi.setApiAddress(ni.getApiAddress()); aNi.setApiPort(ni.getApiPort()); aNi.setSocketAddress(ni.getSocketAddress()); aNi.setSocketPort(ni.getSocketPort()); aNi.setLoadBalanceAddress(ni.getLoadBalanceAddress()); aNi.setLoadBalancePort(ni.getLoadBalancePort()); aNi.setSiteToSiteAddress(ni.getSiteToSiteAddress()); aNi.setSiteToSitePort(ni.getSiteToSitePort()); aNi.setSiteToSiteHttpApiPort(ni.getSiteToSiteHttpApiPort()); aNi.setSiteToSiteSecure(ni.isSiteToSiteSecure()); return aNi; } }
public static NodeIdentifierDescriptor fromNodeIdentifier(final NodeIdentifier nodeId, final boolean localNodeId) { final NodeIdentifierDescriptor descriptor = new NodeIdentifierDescriptor(); descriptor.setId(nodeId.getId()); descriptor.setApiAddress(nodeId.getApiAddress()); descriptor.setApiPort(nodeId.getApiPort()); descriptor.setSocketAddress(nodeId.getSocketAddress()); descriptor.setSocketPort(nodeId.getSocketPort()); descriptor.setSiteToSiteAddress(nodeId.getSiteToSiteAddress()); descriptor.setSiteToSitePort(nodeId.getSiteToSitePort()); descriptor.setSiteToSiteHttpApiPort(nodeId.getSiteToSiteHttpApiPort()); descriptor.setSiteToSiteSecure(nodeId.isSiteToSiteSecure()); descriptor.setNodeIdentities(nodeId.getNodeIdentities()); descriptor.setLoadBalanceAddress(nodeId.getLoadBalanceAddress()); descriptor.setLoadBalancePort(nodeId.getLoadBalancePort()); descriptor.setLocalNodeIdentifier(localNodeId); return descriptor; }
@Override public AdaptedNodeIdentifier marshal(final NodeIdentifier ni) { if (ni == null) { return null; } else { final AdaptedNodeIdentifier aNi = new AdaptedNodeIdentifier(); aNi.setId(ni.getId()); aNi.setApiAddress(ni.getApiAddress()); aNi.setApiPort(ni.getApiPort()); aNi.setSocketAddress(ni.getSocketAddress()); aNi.setSocketPort(ni.getSocketPort()); aNi.setLoadBalanceAddress(ni.getLoadBalanceAddress()); aNi.setLoadBalancePort(ni.getLoadBalancePort()); aNi.setSiteToSiteAddress(ni.getSiteToSiteAddress()); aNi.setSiteToSitePort(ni.getSiteToSitePort()); aNi.setSiteToSiteHttpApiPort(ni.getSiteToSiteHttpApiPort()); aNi.setSiteToSiteSecure(ni.isSiteToSiteSecure()); return aNi; } }