private final Res handleRequest( final Req senseiReq, final IndexReaderFactory<BoboSegmentReader> readerFactory, final SenseiQueryBuilderFactory queryBuilderFactory, Map<IndexReaderFactory<BoboSegmentReader>, List<ZoieMultiReader<BoboSegmentReader>>> indexReadersToCleanUp) throws Exception { List<ZoieMultiReader<BoboSegmentReader>> readerList = null; readerList = GetReaderTimer.time(new Callable<List<ZoieMultiReader<BoboSegmentReader>>>() { @Override public List<ZoieMultiReader<BoboSegmentReader>> call() throws Exception { if (readerFactory == null) { return Collections.emptyList(); } return readerFactory.getIndexReaders(); } }); if (logger.isDebugEnabled()) { logger.debug("obtained readerList of size: " + readerList == null ? 0 : readerList.size()); } if (readerFactory != null && readerList != null) { indexReadersToCleanUp.put(readerFactory, readerList); } final List<BoboSegmentReader> boboReaders = ZoieMultiReader.extractDecoratedReaders(readerList); return SearchTimer.time(new Callable<Res>() { @Override public Res call() throws Exception { return handlePartitionedRequest(senseiReq, boboReaders, queryBuilderFactory); } }); }
public synchronized static void updateExistingBoboIndexes(SenseiCore senseiCore, long uid, int index, Set<String> facets) { for (int partition : senseiCore.getPartitions()) { IndexReaderFactory<BoboSegmentReader> indexReaderFactory = senseiCore .getIndexReaderFactory(partition); List<ZoieMultiReader<BoboSegmentReader>> indexReaders = null; try { indexReaders = indexReaderFactory.getIndexReaders(); List<BoboSegmentReader> boboReaders = ZoieMultiReader.extractDecoratedReaders(indexReaders); for (BoboSegmentReader boboSegmentReader : boboReaders) { recoverReaderIfNeeded(uid, index, facets, boboSegmentReader); } } catch (IOException ex) { logger.error(ex.getMessage(), ex); } finally { if (indexReaders != null) { indexReaderFactory.returnIndexReaders(indexReaders); } } } }