@Override public List<ZoieMultiReader<R>> getIndexReaders() { cachedreadersLock.readLock().lock(); List<ZoieMultiReader<R>> readers = cachedreaders; for (ZoieMultiReader<R> r : readers) { r.incZoieRef(); } cachedreadersLock.readLock().unlock(); return readers; }
@Override public List<ZoieMultiReader<R>> getIndexReaders() { cachedreadersLock.readLock().lock(); List<ZoieMultiReader<R>> readers = cachedreaders; for (ZoieMultiReader<R> r : readers) { r.incZoieRef(); } cachedreadersLock.readLock().unlock(); return readers; }
/** * swap the disk IndexReader cached in mem. In order to count the reference properly, * we need to lock the access to _mem so that it is safe to compare whether the old * and new disk IndexReader are different. decZoieRef the old IndexReader only when they * differ. * @param diskIndexReader the new disk IndexReader * @param oldDiskReader the old disk IndexReader from old mem * @param mem the new mem */ private void lockAndSwapMem(ZoieMultiReader<R> diskIndexReader, ZoieMultiReader<R> oldDiskReader, Mem<R> mem) { synchronized (_memLock) { if (oldDiskReader != diskIndexReader) { if (oldDiskReader != null) { oldDiskReader.decZoieRef(); } diskIndexReader.incZoieRef(); } _mem = mem; } }
/** * swap the disk IndexReader cached in mem. In order to count the reference properly, * we need to lock the access to _mem so that it is safe to compare whether the old * and new disk IndexReader are different. decZoieRef the old IndexReader only when they * differ. * @param diskIndexReader the new disk IndexReader * @param oldDiskReader the old disk IndexReader from old mem * @param mem the new mem */ private void lockAndSwapMem(ZoieMultiReader<R> diskIndexReader, ZoieMultiReader<R> oldDiskReader, Mem<R> mem) { synchronized (_memLock) { if (oldDiskReader != diskIndexReader) { if (oldDiskReader != null) { oldDiskReader.decZoieRef(); } diskIndexReader.incZoieRef(); } _mem = mem; } }
log.debug("add reader from box archives"); r.incZoieRef(); list.add(r);
log.debug("add reader from box archives"); r.incZoieRef(); list.add(r);
public void commitDeletes() throws IOException { ZoieMultiReader<R> reader = null; synchronized (this) { reader = openIndexReader(); if (reader == null) { return; } reader.incZoieRef(); reader.commitDeletes(); reader.decZoieRef(); } }
public void commitDeletes() throws IOException { ZoieMultiReader<R> reader = null; synchronized (this) { reader = openIndexReader(); if (reader == null) { return; } reader.incZoieRef(); reader.commitDeletes(); reader.decZoieRef(); } }
@Override public int getNumdocs() { ZoieMultiReader<R> reader = null; synchronized (this) { reader = openIndexReader(); if (reader == null) { return 0; } reader.incZoieRef(); } int numDocs = reader.numDocs(); reader.decZoieRef(); return numDocs; }
@Override public int getNumdocs() { ZoieMultiReader<R> reader = null; synchronized (this) { reader = openIndexReader(); if (reader == null) { return 0; } reader.incZoieRef(); } int numDocs = reader.numDocs(); reader.decZoieRef(); return numDocs; }
public SearchIndexManager(DirectoryManager dirMgr, Comparator<String> versionComparator, IndexReaderDecorator<R> indexReaderDecorator, DocIDMapperFactory docIDMapperFactory, RAMIndexFactory<R> ramIndexFactory) { _dirMgr = dirMgr; _versionComparator = versionComparator; _docIDMapperFactory = docIDMapperFactory; _ramIndexFactory = ramIndexFactory; if (indexReaderDecorator != null) { _indexReaderDecorator = indexReaderDecorator; } else { throw new IllegalArgumentException("indexReaderDecorator cannot be null"); } _diskIndexerStatus = Status.Sleep; _diskIndex = new DiskSearchIndex<R>(_dirMgr, _indexReaderDecorator, this); ZoieMultiReader<R> diskIndexReader = null; try { diskIndexReader = _diskIndex.getNewReader(); } catch (IOException e) { log.error(e.getMessage(), e); return; } String version = _diskIndex.getVersion(); RAMSearchIndex<R> memIndexA = _ramIndexFactory .newInstance(version, _indexReaderDecorator, this); Mem<R> mem = new Mem<R>(memIndexA, null, memIndexA, null, diskIndexReader); if (diskIndexReader != null) { diskIndexReader.incZoieRef(); } _mem = mem; }
public SearchIndexManager(DirectoryManager dirMgr, Comparator<String> versionComparator, IndexReaderDecorator<R> indexReaderDecorator, DocIDMapperFactory docIDMapperFactory, RAMIndexFactory<R> ramIndexFactory) { _dirMgr = dirMgr; _versionComparator = versionComparator; _docIDMapperFactory = docIDMapperFactory; _ramIndexFactory = ramIndexFactory; if (indexReaderDecorator != null) { _indexReaderDecorator = indexReaderDecorator; } else { throw new IllegalArgumentException("indexReaderDecorator cannot be null"); } _diskIndexerStatus = Status.Sleep; _diskIndex = new DiskSearchIndex<R>(_dirMgr, _indexReaderDecorator, this); ZoieMultiReader<R> diskIndexReader = null; try { diskIndexReader = _diskIndex.getNewReader(); } catch (IOException e) { log.error(e.getMessage(), e); return; } String version = _diskIndex.getVersion(); RAMSearchIndex<R> memIndexA = _ramIndexFactory .newInstance(version, _indexReaderDecorator, this); Mem<R> mem = new Mem<R>(memIndexA, null, memIndexA, null, diskIndexReader); if (diskIndexReader != null) { diskIndexReader.incZoieRef(); } _mem = mem; }
public void markDeletes(LongSet delDocs) throws IOException { if (delDocs != null && delDocs.size() > 0) { ZoieMultiReader<R> reader = null; synchronized (this) { reader = openIndexReader(); if (reader == null) { return; } reader.incZoieRef(); reader.markDeletes(delDocs, _delDocs); reader.decZoieRef(); } } }
public void markDeletes(LongSet delDocs) throws IOException { if (delDocs != null && delDocs.size() > 0) { ZoieMultiReader<R> reader = null; synchronized (this) { reader = openIndexReader(); if (reader == null) { return; } reader.incZoieRef(); reader.markDeletes(delDocs, _delDocs); reader.decZoieRef(); } } }
public void refreshDiskReader() throws IOException { log.info("refreshing disk reader ..."); ZoieMultiReader<R> diskIndexReader = null; try { // load a new reader, not in the lock because this should be done in the background // and should not contend with the readers diskIndexReader = _diskIndex.getNewReader(); } catch (IOException e) { ZoieHealth.setFatal(); log.error(e.getMessage(), e); throw e; } synchronized (_memLock) { Mem<R> oldMem = _mem; ZoieMultiReader<R> oldDiskIndexReader = oldMem.get_diskIndexReader(); if (diskIndexReader != oldDiskIndexReader) { Mem<R> mem = new Mem<R>(oldMem.get_memIndexA(), oldMem.get_memIndexB(), oldMem.get_currentWritable(), oldMem.get_currentReadOnly(), diskIndexReader); if (oldDiskIndexReader != null) { oldDiskIndexReader.decZoieRef(); } diskIndexReader.incZoieRef(); _mem = mem; } } log.info("disk reader refreshed"); }
public void refreshDiskReader() throws IOException { log.info("refreshing disk reader ..."); ZoieMultiReader<R> diskIndexReader = null; try { // load a new reader, not in the lock because this should be done in the background // and should not contend with the readers diskIndexReader = _diskIndex.getNewReader(); } catch (IOException e) { ZoieHealth.setFatal(); log.error(e.getMessage(), e); throw e; } synchronized (_memLock) { Mem<R> oldMem = _mem; ZoieMultiReader<R> oldDiskIndexReader = oldMem.get_diskIndexReader(); if (diskIndexReader != oldDiskIndexReader) { Mem<R> mem = new Mem<R>(oldMem.get_memIndexA(), oldMem.get_memIndexB(), oldMem.get_currentWritable(), oldMem.get_currentReadOnly(), diskIndexReader); if (oldDiskIndexReader != null) { oldDiskIndexReader.decZoieRef(); } diskIndexReader.incZoieRef(); _mem = mem; } } log.info("disk reader refreshed"); }
diskIndexReader.incZoieRef();
diskIndexReader.incZoieRef();