class NettyExecutorManager extends AbstractExecutorManager<Boolean> {

    @Override
    public Boolean execute(ExecutionContext context) throws ExecuteException {
        LinkedList<String> allNodes = new LinkedList<>();
        Set<String> nodes = getAllNodes(context);
        if (nodes != null) {
            allNodes.addAll(nodes);
        }
        /**
         *  build command accord executeContext
         */
        Command command = context.getCommand();

        /**
         * execute task host
         */
        String startHostAddress = context.getHost().getAddress();
        // remove start host address and add it to head
        allNodes.remove(startHostAddress);
        allNodes.addFirst(startHostAddress);
 
        boolean success = false;
        for (String address : allNodes) {
            try {
                Host host = Host.of(address);
                doExecute(host, command);
                success = true;
                context.setHost(host);
                break;
            } catch (ExecuteException ex) {
                logger.error("retry execute command : {} host : {}", command, address);
            }
        }
        if (!success) {
            throw new ExecuteException("fail after try all nodes");
        }
        
        return success;
    }

    public  NettyExecutorManager();

}