@Override public boolean isFinished() { readLock.lock(); try { return numCompletedSteps >= numSteps || canceled || matchingRecords.size() >= query.getMaxResults(); } finally { readLock.unlock(); } }
@Override public long getTotalHitCount() { readLock.lock(); try { // Because we filter the results based on the user's permissions, // we don't want to indicate that the total hit count is 1,000+ when we // have 0 matching records, for instance. So, if we have fewer matching // records than the max specified by the query, it is either the case that // we truly don't have enough records to reach the max results, or that // the user is not authorized to see some of the results. Either way, // we want to report the number of events that we find AND that the user // is allowed to see, so we report matching record count, or up to max results. if (matchingRecords.size() < query.getMaxResults()) { return matchingRecords.size(); } else { return query.getMaxResults(); } } finally { readLock.unlock(); } }
@Override public Optional<List<Long>> evaluate(final Query query) { if (latestRecords.getSize() < query.getMaxResults()) { return Optional.empty(); } if (query.getSearchTerms().isEmpty() && query.getStartDate() == null && query.getEndDate() == null) { final List<Long> eventList = latestRecords.asList(); if (eventList.size() > query.getMaxResults()) { return Optional.of(eventList.subList(0, query.getMaxResults())); } else { return Optional.of(eventList); } } else { return Optional.empty(); } }
if (matchingRecords.size() > query.getMaxResults()) { final Iterator<ProvenanceEventRecord> itr = matchingRecords.iterator(); for (int i = 0; i < query.getMaxResults(); i++) { itr.next(); updateExpiration(); if (numCompletedSteps >= numSteps || this.matchingRecords.size() >= query.getMaxResults()) { final long searchNanos = System.nanoTime() - creationNanos; queryTime = TimeUnit.MILLISECONDS.convert(searchNanos, TimeUnit.NANOSECONDS);
@Override public Optional<List<Long>> evaluate(final Query query) { if (query.getMaxResults() > 1000) { // If query max results > 1000 then we know we don't have enough results. So just return empty. return Optional.empty(); } final List<SearchTerm> terms = query.getSearchTerms(); if (terms.size() != 1) { return Optional.empty(); } final SearchTerm term = terms.get(0); if (!COMPONENT_ID_FIELD_NAME.equals(term.getSearchableField().getSearchableFieldName())) { return Optional.empty(); } if (query.getEndDate() != null || query.getStartDate() != null) { return Optional.empty(); } final RingBuffer<Long> ringBuffer = latestRecords.get(term.getValue()); if (ringBuffer == null || ringBuffer.getSize() < query.getMaxResults()) { return Optional.empty(); } List<Long> eventIds = ringBuffer.asList(); if (eventIds.size() > query.getMaxResults()) { eventIds = eventIds.subList(0, query.getMaxResults()); } return Optional.of(eventIds); }
final int maxResults = query.getMaxResults(); final long startIndex = Math.max(maxEventId - query.getMaxResults(), 0L);
@Override public QuerySubmission submitQuery(final Query query, final NiFiUser user) { if (query.getEndDate() != null && query.getStartDate() != null && query.getStartDate().getTime() > query.getEndDate().getTime()) { throw new IllegalArgumentException("Query End Time cannot be before Query Start Time"); } final String userId = user == null ? null : user.getIdentity(); if (query.getSearchTerms().isEmpty() && query.getStartDate() == null && query.getEndDate() == null) { final AsyncQuerySubmission result = new AsyncQuerySubmission(query, 1, userId); queryExecService.submit(new QueryRunnable(ringBuffer, createFilter(query, user), query.getMaxResults(), result)); querySubmissionMap.put(query.getIdentifier(), result); return result; } final AsyncQuerySubmission result = new AsyncQuerySubmission(query, 1, userId); querySubmissionMap.put(query.getIdentifier(), result); queryExecService.submit(new QueryRunnable(ringBuffer, createFilter(query, user), query.getMaxResults(), result)); return result; }
public StandardQueryResult search(final org.apache.nifi.provenance.search.Query provenanceQuery, final NiFiUser user, final AtomicInteger retrievedCount, final long firstEventTimestamp) throws IOException { if (retrievedCount.get() >= provenanceQuery.getMaxResults()) { final StandardQueryResult sqr = new StandardQueryResult(provenanceQuery, 1); sqr.update(Collections.<ProvenanceEventRecord> emptyList(), 0L); indexDirectory, provenanceQuery, provenanceQuery.getMaxResults()); final TopDocs topDocs = searcher.getIndexSearcher().search(luceneQuery, provenanceQuery.getMaxResults()); final long finishSearch = System.nanoTime(); final long searchNanos = finishSearch - searchStartNanos; provenanceQuery.getMaxResults(), maxAttributeChars);
final AsyncQuerySubmission result = new AsyncQuerySubmission(query, 1, userId); if (latestRecords.getSize() >= query.getMaxResults()) { final List<ProvenanceEventRecord> latestList = filterUnauthorizedEvents(latestRecords.asList(), user); final List<ProvenanceEventRecord> trimmed; if (latestList.size() > query.getMaxResults()) { trimmed = latestList.subList(latestList.size() - query.getMaxResults(), latestList.size()); } else { trimmed = latestList;
queryExecutor.submit(new QueryTask(luceneQuery, submission.getResult(), query.getMaxResults(), indexManager, indexDir, eventStore, authorizer, EventTransformer.EMPTY_TRANSFORMER));
requestDto.setMinimumFileSize(query.getMinFileSize()); requestDto.setMaximumFileSize(query.getMaxFileSize()); requestDto.setMaxResults(query.getMaxResults()); if (query.getSearchTerms() != null) { final Map<String, String> searchTerms = new HashMap<>();
@Override public boolean isFinished() { readLock.lock(); try { return numCompletedSteps >= numSteps || canceled || matchingRecords.size() >= query.getMaxResults(); } finally { readLock.unlock(); } }
@Override public long getTotalHitCount() { readLock.lock(); try { // Because we filter the results based on the user's permissions, // we don't want to indicate that the total hit count is 1,000+ when we // have 0 matching records, for instance. So, if we have fewer matching // records than the max specified by the query, it is either the case that // we truly don't have enough records to reach the max results, or that // the user is not authorized to see some of the results. Either way, // we want to report the number of events that we find AND that the user // is allowed to see, so we report matching record count, or up to max results. if (matchingRecords.size() < query.getMaxResults()) { return matchingRecords.size(); } else { return query.getMaxResults(); } } finally { readLock.unlock(); } }
if (matchingRecords.size() > query.getMaxResults()) { final Iterator<ProvenanceEventRecord> itr = matchingRecords.iterator(); for (int i = 0; i < query.getMaxResults(); i++) { itr.next(); updateExpiration(); if (numCompletedSteps >= numSteps || this.matchingRecords.size() >= query.getMaxResults()) { final long searchNanos = System.nanoTime() - creationNanos; queryTime = TimeUnit.MILLISECONDS.convert(searchNanos, TimeUnit.NANOSECONDS);
final int maxResults = query.getMaxResults(); final long startIndex = Math.max(maxEventId - query.getMaxResults(), 0L);