public Set<String> validateRegisteredNodes(ClientModel client) { Map<String, Integer> registeredNodes = client.getRegisteredNodes(); if (registeredNodes == null || registeredNodes.isEmpty()) { return Collections.emptySet(); } int currentTime = Time.currentTime(); Set<String> validatedNodes = new TreeSet<String>(); if (client.getNodeReRegistrationTimeout() > 0) { List<String> toRemove = new LinkedList<String>(); for (Map.Entry<String, Integer> entry : registeredNodes.entrySet()) { Integer lastReRegistration = entry.getValue(); if (lastReRegistration + client.getNodeReRegistrationTimeout() < currentTime) { toRemove.add(entry.getKey()); } else { validatedNodes.add(entry.getKey()); } } // Remove time-outed nodes for (String node : toRemove) { client.unregisterNode(node); } } else { // Periodic node reRegistration is disabled, so allow all nodes validatedNodes.addAll(registeredNodes.keySet()); } return validatedNodes; }
/** * Unregister a cluster node from the client * * @param node */ @Path("nodes/{node}") @DELETE @NoCache public void unregisterNode(final @PathParam("node") String node) { auth.requireManage(); if (client == null) { throw new NotFoundException("Could not find client"); } if (logger.isDebugEnabled()) logger.debug("Unregister node: " + node); Integer time = client.getRegisteredNodes().get(node); if (time == null) { throw new NotFoundException("Client does not have node "); } client.unregisterNode(node); adminEvent .operation(OperationType.DELETE) .resource(ResourceType.CLUSTER_NODE) .resourcePath(uriInfo) .success(); }
@Override public void unregisterNode(String nodeHost) { getDelegateForUpdate(); updated.unregisterNode(nodeHost); }