protected Result robustSearch(Query query, Execution execution, T connection) {
        Result result;
        try {
            result = search(query, execution, connection);
        } catch (RuntimeException e) { //TODO: Exceptions should not be used to signal backend communication errors
            log(Level.WARNING, "An exception occurred while invoking backend searcher.", e);
            result = new Result(query, ErrorMessage.createBackendCommunicationError("Failed calling " + connection +
                                                                                    " in " + this + " for " + query +
                                                                                    ": " + Exceptions.toMessageString(e)));
        }

        if (result == null)
            result = new Result(query, ErrorMessage.createBackendCommunicationError("No result returned in " + this +
                                                                                    " from " + connection + " for " + query));
        return result;
    }
Call search(Query, Execution, T) and handle any exceptions returned which
we do not want to propagate upwards By default this catches all runtime
exceptions and puts them into the result
container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java