@Override public boolean canExecuteCommands(NodeId nodeId, Set<Qualifier<?>> qualifiers) throws CoordinatorException { if (qualifiers == null || qualifiers.isEmpty()) { return true; } Set<CommandExecutor<?, ?>> commandExecutors = nodes.get(nodeId).getSecond(); if (commandExecutors == null) throw new CoordinatorException("Node with id " + nodeId + " is not found"); Set<Qualifier<?>> qualifiersCopy = Sets.newHashSet(qualifiers); for (CommandExecutor<?, ?> commandExecutor : commandExecutors) { if (qualifiersCopy.remove(commandExecutor.getQualifier()) && qualifiersCopy.isEmpty()) { return true; } } return false; }
@Override public void registerNode(NodeContext nodeContext, Set<Worker> workers, final StatusChangeListener listener) { log.info("Going to register node {} with {} workers", nodeContext.getId(), workers.size()); Set<CommandExecutor<?, ?>> executors = Sets.newHashSet(); Set<Qualifier<?>> qualifiers = Sets.newHashSet(); for (Worker worker : workers) { for (CommandExecutor<?, ?> executor : worker.getExecutors()) { Qualifier<?> qualifier = executor.getQualifier(); if (qualifiers.contains(qualifier)) { throw new CoordinatorException("Executor for qualifier " + qualifier + " is already registered"); } executors.add(executor); } } nodes.put(nodeContext.getId(), Pair.of(nodeContext, executors)); }
throw new CoordinatorException("Node " + nodeId.getIdentifier() + " hasn't registered");
private <C extends Command<R>, R extends Serializable> CommandExecutor<C, R> getCommandExecutor(C command){ for (CommandExecutor<?, ?> commandExecutor : nodePair.getSecond()) { final CommandExecutor<C, R> executor = (CommandExecutor<C, R>) commandExecutor; if (executor.getQualifier().equals(Qualifier.of(command))) { return executor; } } throw new CoordinatorException("Command " + command + " is not available on " + nodeId.getIdentifier()); } };
@Override public boolean canExecuteCommands(NodeId nodeId, Set<Qualifier<?>> qualifiers) { ZNode typeNode = rootNode.child(CoordinationUtil.nodeNameOf(nodeId.getType())); String identifier = nodeId.getIdentifier(); if (!typeNode.hasChild(identifier)) { throw new CoordinatorException("Node with id " + nodeId + " is not found"); } ZNode node = typeNode.child(identifier); if (!node.hasChild(CoordinationUtil.AVAILABLE_NODE_NAME)) { return false; } for (Qualifier<?> qualifier : qualifiers) { if (!node.hasChild(nodeNameOf(qualifier))) { return false; } } return true; }
Qualifier<?> qualifier = executor.getQualifier(); if (qualifiers.contains(qualifier)) { throw new CoordinatorException("Executor for qualifier " + qualifier + " is already registered");