Search in sources :

Example 1 with ParseException

use of com.yahoo.document.select.parser.ParseException in project vespa by vespa-engine.

the class DocumentSelectionBuilder method validateSelectionExpression.

private void validateSelectionExpression(String sel, String allowedType) {
    DocumentSelector s;
    try {
        s = new DocumentSelector(sel);
    } catch (ParseException e) {
        throw new IllegalArgumentException("Could not parse document routing selection: " + sel, e);
    }
    AllowedDocumentTypesChecker checker = new AllowedDocumentTypesChecker(allowedType);
    s.visit(checker);
}
Also used : DocumentSelector(com.yahoo.document.select.DocumentSelector) ParseException(com.yahoo.document.select.parser.ParseException)

Example 2 with ParseException

use of com.yahoo.document.select.parser.ParseException in project vespa by vespa-engine.

the class VdsVisit method doRun.

protected int doRun() {
    VisitorParameters visitorParameters = params.getVisitorParameters();
    // If progress file already exists, create resume token from it
    if (visitorParameters.getResumeFileName() != null && !"".equals(visitorParameters.getResumeFileName())) {
        try {
            File file = new File(visitorParameters.getResumeFileName());
            FileInputStream fos = new FileInputStream(file);
            StringBuilder builder = new StringBuilder();
            byte[] b = new byte[100000];
            int length;
            while ((length = fos.read(b)) > 0) {
                builder.append(new String(b, 0, length));
            }
            fos.close();
            visitorParameters.setResumeToken(new ProgressToken(builder.toString()));
            if (params.isVerbose()) {
                System.err.format("Resuming visitor already %.1f %% finished.\n", visitorParameters.getResumeToken().percentFinished());
            }
        } catch (FileNotFoundException e) {
        // Ignore; file has not been created yet but will be shortly.
        } catch (IOException e) {
            System.err.println("Could not open progress file: " + visitorParameters.getResumeFileName());
            e.printStackTrace(System.err);
            return 1;
        }
    }
    initShutdownHook();
    sessionAccessor = sessionAccessorFactory.createVisitorSessionAccessor();
    VdsVisitHandler handler;
    handler = new StdOutVisitorHandler(params.isPrintIdsOnly(), params.isVerbose(), params.isVerbose(), params.isVerbose(), params.getStatisticsParts() != null, params.getAbortOnClusterDown(), params.getProcessTime(), params.jsonOutput);
    if (visitorParameters.getResumeFileName() != null) {
        handler.setProgressFileName(visitorParameters.getResumeFileName());
    }
    visitorParameters.setControlHandler(handler.getControlHandler());
    if (visitorParameters.getRemoteDataHandler() == null) {
        visitorParameters.setLocalDataHandler(handler.getDataHandler());
    }
    if (params.getStatisticsParts() != null) {
        String[] parts = params.getStatisticsParts().split(",");
        for (String s : parts) {
            visitorParameters.setLibraryParameter(s, "true");
        }
    }
    try {
        session = sessionAccessor.createVisitorSession(visitorParameters);
        while (true) {
            try {
                if (session.waitUntilDone(params.getFullTimeout()))
                    break;
            } catch (InterruptedException e) {
            }
        }
        if (visitorParameters.getTraceLevel() > 0) {
            System.out.println(session.getTrace().toString());
        }
    } catch (ParseException e) {
        onDocumentSelectionException(e);
    } catch (IllegalArgumentException e) {
        onIllegalArgumentException(e);
    } catch (Exception e) {
        System.err.println("Document selection string was: " + visitorParameters.getDocumentSelection());
        System.err.println("Caught unexpected exception: ");
        e.printStackTrace(System.err);
        return 1;
    }
    if (visitorParameters.getControlHandler().getResult().code == VisitorControlHandler.CompletionCode.SUCCESS) {
        return 0;
    } else {
        return 1;
    }
}
Also used : VisitorParameters(com.yahoo.documentapi.VisitorParameters) ParseException(com.yahoo.document.select.parser.ParseException) ParseException(com.yahoo.document.select.parser.ParseException) ProgressToken(com.yahoo.documentapi.ProgressToken)

Example 3 with ParseException

use of com.yahoo.document.select.parser.ParseException in project vespa by vespa-engine.

the class DocumentSelectorTestCase method assertVisitWithValidNowWorks.

public void assertVisitWithValidNowWorks(String expression) throws ParseException {
    DocumentSelector selector = new DocumentSelector(expression);
    NowCheckVisitor visitor = new NowCheckVisitor();
    selector.visit(visitor);
    assertTrue(visitor.requiresConversion());
    SelectionExpressionConverter converter = new SelectionExpressionConverter();
    try {
        selector.visit(converter);
    } catch (Exception e) {
        assertFalse("Converter throws exception : " + e.getMessage(), true);
    }
}
Also used : SelectionExpressionConverter(com.yahoo.document.select.convert.SelectionExpressionConverter) ParseException(com.yahoo.document.select.parser.ParseException)

Example 4 with ParseException

use of com.yahoo.document.select.parser.ParseException in project vespa by vespa-engine.

the class DocumentSelectorTestCase method assertVisitWithInvalidNowFails.

public void assertVisitWithInvalidNowFails(String expression, String expectedError) throws ParseException {
    DocumentSelector selector = new DocumentSelector(expression);
    NowCheckVisitor visitor = new NowCheckVisitor();
    selector.visit(visitor);
    assertTrue(visitor.requiresConversion());
    SelectionExpressionConverter converter = new SelectionExpressionConverter();
    try {
        selector.visit(converter);
        assertFalse("Should not be able to convert " + expression + " query", true);
    } catch (Exception e) {
        assertEquals(expectedError, e.getMessage());
    }
}
Also used : SelectionExpressionConverter(com.yahoo.document.select.convert.SelectionExpressionConverter) ParseException(com.yahoo.document.select.parser.ParseException)

Example 5 with ParseException

use of com.yahoo.document.select.parser.ParseException in project vespa by vespa-engine.

the class VdsStreamingSearcher method doSearch2.

@Override
public Result doSearch2(Query query, QueryPacket queryPacket, CacheKey cacheKey, Execution execution) {
    // TODO refactor this method into smaller methods, it's hard to see the actual code
    lazyTrace(query, 7, "Routing to storage cluster ", getStorageClusterRouteSpec());
    if (route == null) {
        route = Route.parse(getStorageClusterRouteSpec());
    }
    lazyTrace(query, 8, "Route is ", route);
    lazyTrace(query, 7, "doSearch2(): query docsum class=", query.getPresentation().getSummary(), ", default docsum class=", getDefaultDocsumClass());
    if (query.getPresentation().getSummary() == null) {
        lazyTrace(query, 6, "doSearch2(): No summary class specified in query, using default: ", getDefaultDocsumClass());
        query.getPresentation().setSummary(getDefaultDocsumClass());
    } else {
        lazyTrace(query, 6, "doSearch2(): Summary class has been specified in query: ", query.getPresentation().getSummary());
    }
    lazyTrace(query, 8, "doSearch2(): rank properties=", query.getRanking());
    lazyTrace(query, 8, "doSearch2(): sort specification=", query.getRanking().getSorting() == null ? null : query.getRanking().getSorting().fieldOrders());
    int documentSelectionQueryParameterCount = 0;
    if (query.properties().getString(streamingUserid) != null)
        documentSelectionQueryParameterCount++;
    if (query.properties().getString(streamingGroupname) != null)
        documentSelectionQueryParameterCount++;
    if (query.properties().getString(streamingSelection) != null)
        documentSelectionQueryParameterCount++;
    if (documentSelectionQueryParameterCount != 1) {
        return new Result(query, ErrorMessage.createBackendCommunicationError("Streaming search needs one and " + "only one of these query parameters to be set: streaming.userid, streaming.groupname, " + "streaming.selection"));
    }
    query.trace("Routing to search cluster " + getSearchClusterConfigId(), 4);
    Visitor visitor = visitorFactory.createVisitor(query, getSearchClusterConfigId(), route);
    try {
        visitor.doSearch();
    } catch (ParseException e) {
        return new Result(query, ErrorMessage.createBackendCommunicationError("Failed to parse document selection string: " + e.getMessage() + "'."));
    } catch (TokenMgrError e) {
        return new Result(query, ErrorMessage.createBackendCommunicationError("Failed to tokenize document selection string: " + e.getMessage() + "'."));
    } catch (TimeoutException e) {
        return new Result(query, ErrorMessage.createTimeout(e.getMessage()));
    } catch (InterruptedException | IllegalArgumentException e) {
        return new Result(query, ErrorMessage.createBackendCommunicationError(e.getMessage()));
    }
    lazyTrace(query, 8, "offset=", query.getOffset(), ", hits=", query.getHits());
    Result result = new Result(query);
    // Sorted on rank
    List<SearchResult.Hit> hits = visitor.getHits();
    Map<String, DocumentSummary.Summary> summaryMap = visitor.getSummaryMap();
    lazyTrace(query, 7, "total hit count = ", visitor.getTotalHitCount(), ", returned hit count = ", hits.size(), ", summary count = ", summaryMap.size());
    result.setTotalHitCount(visitor.getTotalHitCount());
    query.trace(visitor.getStatistics().toString(), false, 2);
    query.getContext(true).setProperty(STREAMING_STATISTICS, visitor.getStatistics());
    Packet[] summaryPackets = new Packet[hits.size()];
    int index = 0;
    boolean skippedEarlierResult = false;
    for (SearchResult.Hit hit : hits) {
        if (!verifyDocId(hit.getDocId(), query, skippedEarlierResult)) {
            skippedEarlierResult = true;
            continue;
        }
        FastHit fastHit = buildSummaryHit(query, hit);
        result.hits().add(fastHit);
        DocumentSummary.Summary summary = summaryMap.get(hit.getDocId());
        if (summary != null) {
            DocsumPacket dp = new DocsumPacket(summary.getSummary());
            // log.log(LogLevel.SPAM, "DocsumPacket: " + dp);
            summaryPackets[index] = dp;
        } else {
            return new Result(query, ErrorMessage.createBackendCommunicationError("Did not find summary for hit with document id " + hit.getDocId()));
        }
        index++;
    }
    if (result.isFilled(query.getPresentation().getSummary())) {
        lazyTrace(query, 8, "Result is filled for summary class ", query.getPresentation().getSummary());
    } else {
        lazyTrace(query, 8, "Result is not filled for summary class ", query.getPresentation().getSummary());
    }
    List<Grouping> groupingList = visitor.getGroupings();
    lazyTrace(query, 8, "Grouping list=", groupingList);
    if (!groupingList.isEmpty()) {
        GroupingListHit groupHit = new GroupingListHit(groupingList, getDocsumDefinitionSet(query));
        result.hits().add(groupHit);
    }
    int skippedHits;
    try {
        FillHitsResult fillHitsResult = fillHits(result, summaryPackets, query.getPresentation().getSummary());
        skippedHits = fillHitsResult.skippedHits;
        if (fillHitsResult.error != null) {
            result.hits().addError(ErrorMessage.createTimeout(fillHitsResult.error));
            return result;
        }
    } catch (TimeoutException e) {
        result.hits().addError(ErrorMessage.createTimeout(e.getMessage()));
        return result;
    } catch (IOException e) {
        return new Result(query, ErrorMessage.createBackendCommunicationError("Error filling hits with summary fields"));
    }
    if (skippedHits == 0) {
        // TODO: cache results or result.analyzeHits(); ?
        query.trace("All hits have been filled", 4);
    } else {
        lazyTrace(query, 8, "Skipping some hits for query: ", result.getQuery());
    }
    lazyTrace(query, 8, "Returning result ", result);
    if (skippedHits > 0) {
        getLogger().info("skipping " + skippedHits + " hits for query: " + result.getQuery());
        result.hits().addError(com.yahoo.search.result.ErrorMessage.createTimeout("Missing hit summary data for " + skippedHits + " hits"));
    }
    return result;
}
Also used : IdString(com.yahoo.document.idstring.IdString) Result(com.yahoo.search.Result) SearchResult(com.yahoo.vdslib.SearchResult) TimeoutException(com.yahoo.prelude.fastsearch.TimeoutException) DocsumPacket(com.yahoo.fs4.DocsumPacket) QueryPacket(com.yahoo.fs4.QueryPacket) Packet(com.yahoo.fs4.Packet) DocsumPacket(com.yahoo.fs4.DocsumPacket) TokenMgrError(com.yahoo.document.select.parser.TokenMgrError) SearchResult(com.yahoo.vdslib.SearchResult) Grouping(com.yahoo.searchlib.aggregation.Grouping) IOException(java.io.IOException) GroupingListHit(com.yahoo.prelude.fastsearch.GroupingListHit) GroupingListHit(com.yahoo.prelude.fastsearch.GroupingListHit) FastHit(com.yahoo.prelude.fastsearch.FastHit) FastHit(com.yahoo.prelude.fastsearch.FastHit) DocumentSummary(com.yahoo.vdslib.DocumentSummary) ParseException(com.yahoo.document.select.parser.ParseException) DocumentSummary(com.yahoo.vdslib.DocumentSummary)

Aggregations

ParseException (com.yahoo.document.select.parser.ParseException)6 SelectionExpressionConverter (com.yahoo.document.select.convert.SelectionExpressionConverter)2 IdString (com.yahoo.document.idstring.IdString)1 DocumentSelector (com.yahoo.document.select.DocumentSelector)1 TokenMgrError (com.yahoo.document.select.parser.TokenMgrError)1 ProgressToken (com.yahoo.documentapi.ProgressToken)1 VisitorParameters (com.yahoo.documentapi.VisitorParameters)1 DocsumPacket (com.yahoo.fs4.DocsumPacket)1 Packet (com.yahoo.fs4.Packet)1 QueryPacket (com.yahoo.fs4.QueryPacket)1 FastHit (com.yahoo.prelude.fastsearch.FastHit)1 GroupingListHit (com.yahoo.prelude.fastsearch.GroupingListHit)1 TimeoutException (com.yahoo.prelude.fastsearch.TimeoutException)1 Result (com.yahoo.search.Result)1 Grouping (com.yahoo.searchlib.aggregation.Grouping)1 Utf8String (com.yahoo.text.Utf8String)1 DocumentSummary (com.yahoo.vdslib.DocumentSummary)1 SearchResult (com.yahoo.vdslib.SearchResult)1 IOException (java.io.IOException)1