@Override public void addResponse(SessionID sessionID, SearchRequestID requestID, final GroupID group, List<IndexQueryResult> queryResults, NodeID nodeID) { setResultForRequest(sessionID, requestID, group, queryResults, nodeID, null); }
@Override public boolean isEmpty() { return size() == 0; }
@Override public ListIterator<T> listIterator(int index) { return new ListItr(index); }
@Override public void initializeMessage(SearchResultsRequestMessage requestMessage) { requestMessage.initialize(getRequestID(), getCacheName(), getQueryStack(), includeKeys(), includeValues(), getAttributes(), getSortBy(), getAggregators(), getMaxResults(), startIndex, getResultPrefetchLimit()); }
@Override public void handleEvent(final EventContext context) { if (context instanceof SearchResponseMessage) { final SearchResponseMessage responseMsg = (SearchResponseMessage) context; if (responseMsg.isError()) { this.searchResultMgr.addErrorResponse(responseMsg.getLocalSessionID(), responseMsg.getRequestID(), responseMsg.getGroupIDFrom(), responseMsg.getErrorMessage(), responseMsg.getSourceNodeID()); } else { this.searchResultMgr.addResponse(responseMsg.getLocalSessionID(), responseMsg.getRequestID(), responseMsg.getGroupIDFrom(), responseMsg.getResults(), responseMsg.getSourceNodeID()); } } else { throw new AssertionError("Unknown message type received from server - " + context.getClass().getName()); } }
@Override public synchronized SearchQueryResults<IndexQueryResult> loadResults(String cachename, SearchRequestID reqId, List queryStack, boolean includeKeys, boolean includeValues, Set<String> attributeSet, List<NVPair> sortAttributeMap, List<NVPair> aggregators, int maxResults, int start, int size, GroupID from) throws AbortedOperationException { waitUntilRunningAbortable(); SearchResultFetchContext reqCtxt = new SearchResultFetchContext(reqId, cachename, queryStack, includeKeys, includeValues, attributeSet, sortAttributeMap, aggregators, maxResults, start, size); sendRequest(from, reqCtxt); return submitRequest(reqId, reqCtxt, from); }
@Override public SearchResultManager createSearchResultManager(TCLogger logger, DSOClientMessageChannel dsoChannel, SessionManager sessionManager, AbortableOperationManager abortableOperationManager) { return new NullSearchResultManager(); }
private SearchQueryResults submitRequest(SearchRequestID reqId, SearchResultFetchContext reqCtxt, GroupID dest) throws AbortedOperationException { Assert.assertTrue(Thread.holdsLock(this)); ConcurrentMap<GroupID, SearchResultFetchContext> contexts = Maps.newConcurrentMap(); contexts.put(dest, reqCtxt); getRequestMap().put(reqId, contexts); final int size = getRequestMap().size(); if ((size != 0) && ((size % 500) == 0)) { this.logger.warn("Many pending query requests in the system: " + size); } return waitForResult(reqId, contexts); }
@Override public SearchResultManager createSearchResultManager(TCLogger logger, DSOClientMessageChannel dsoChannel, SessionManager sessionManager, AbortableOperationManager abortableOperationManager) { return new SearchResultManagerImpl(groupIDs, logger, dsoChannel.getSearchRequestMessageFactory(), sessionManager, abortableOperationManager); }
@Override public Iterator<T> iterator() { return new Itr(); }
@Override public List<T> subList(int fromIndex, int toIndex) { return new SubList(fromIndex, toIndex); }
@Override public void close() { if (resultLoader != null) resultLoader.releaseResults(this.requestId); }
@Override public ListIterator<T> listIterator() { return listIterator(0); }
private SearchQueryResults checkOpenCursorLimit(int pageSize) { if (pageSize != Search.BATCH_SIZE_UNLIMITED && MAX_OPEN_RESULTS > 0 && resultMgr.getOpenResultSetCount() >= MAX_OPEN_RESULTS) return new SearchQueryResultsImpl<IndexQueryResult>("Max open result set limit reached: " + resultMgr.getOpenResultSetCount() + ", limit=" + MAX_OPEN_RESULTS); return null; }
@Override public void handleEvent(final EventContext context) { if (context instanceof SearchResponseMessage) { final SearchResponseMessage responseMsg = (SearchResponseMessage) context; if (responseMsg.isError()) { this.searchResultMgr.addErrorResponse(responseMsg.getLocalSessionID(), responseMsg.getRequestID(), responseMsg.getGroupIDFrom(), responseMsg.getErrorMessage(), responseMsg.getSourceNodeID()); } else { this.searchResultMgr.addResponse(responseMsg.getLocalSessionID(), responseMsg.getRequestID(), responseMsg.getGroupIDFrom(), responseMsg.getResults(), responseMsg.getSourceNodeID()); } } else { throw new AssertionError("Unknown message type received from server - " + context.getClass().getName()); } }
@Override public SearchResultManager createSearchResultManager(TCLogger logger, DSOClientMessageChannel dsoChannel, SessionManager sessionManager, AbortableOperationManager abortableOperationManager) { return new NullSearchResultManager(); }
@Override public void addErrorResponse(SessionID sessionID, SearchRequestID requestID, final GroupID group, String errorMessage, NodeID nodeID) { setResultForRequest(sessionID, requestID, group, null, nodeID, errorMessage); }
@Override public SearchResultManager createSearchResultManager(TCLogger logger, DSOClientMessageChannel dsoChannel, SessionManager sessionManager, AbortableOperationManager abortableOperationManager) { final GroupID defaultGroups[] = dsoChannel.getGroupIDs(); Assert.assertNotNull(defaultGroups); Assert.assertEquals(1, defaultGroups.length); return new SearchResultManagerImpl(new OrderedGroupIDs(defaultGroups), logger, dsoChannel.getSearchRequestMessageFactory(), sessionManager, abortableOperationManager); }