/** * Decrement the reference count of the given {@link DocValuesProducer} * generations. */ synchronized void decRef(List<Long> dvProducersGens) throws IOException { IOUtils.applyToAll(dvProducersGens, gen -> { RefCount<DocValuesProducer> dvp = genDVProducers.get(gen); assert dvp != null : "gen=" + gen; dvp.decRef(); }); } }
private void notifyCoreClosedListeners() throws IOException { synchronized(coreClosedListeners) { IOUtils.applyToAll(coreClosedListeners, l -> l.onClose(cacheHelper.getKey())); } }
@Override void notifyReaderClosedListeners() throws IOException { synchronized(readerClosedListeners) { IOUtils.applyToAll(readerClosedListeners, l -> l.onClose(readerCacheHelper.getKey())); } }
@Override void notifyReaderClosedListeners() throws IOException { synchronized(readerClosedListeners) { IOUtils.applyToAll(readerClosedListeners, l -> l.onClose(cacheHelper.getKey())); } }
@Override @SuppressWarnings("try") protected void doClose() throws IOException { Closeable decRefDeleter = () -> { if (writer != null) { try { writer.decRefDeleter(segmentInfos); } catch (AlreadyClosedException ex) { // This is OK, it just means our original writer was // closed before we were, and this may leave some // un-referenced files in the index, which is // harmless. The next time IW is opened on the // index, it will delete them. } } }; try (Closeable finalizer = decRefDeleter) { // try to close each reader, even if an exception is thrown final List<? extends LeafReader> sequentialSubReaders = getSequentialSubReaders(); IOUtils.applyToAll(sequentialSubReaders, LeafReader::decRef); } }
} catch (Throwable t) { try { IOUtils.applyToAll(readers, SegmentReader::decRef); } catch (Throwable t1) { t.addSuppressed(t1);
@SuppressWarnings("try") private synchronized void closeMergeReaders(MergePolicy.OneMerge merge, boolean suppressExceptions) throws IOException { final boolean drop = suppressExceptions == false; try (Closeable finalizer = merge::mergeFinished) { IOUtils.applyToAll(merge.readers, sr -> { final ReadersAndUpdates rld = getPooledInstance(sr.getOriginalSegmentInfo(), false); // We still hold a ref so it should not have been removed: assert rld != null; if (drop) { rld.dropChanges(); } else { rld.dropMergingUpdates(); } rld.release(sr); release(rld); if (drop) { readerPool.drop(rld.info); } }); } finally { Collections.fill(merge.readers, null); } }
/** * Decrement the reference count of the given {@link DocValuesProducer} * generations. */ synchronized void decRef(List<Long> dvProducersGens) throws IOException { IOUtils.applyToAll(dvProducersGens, gen -> { RefCount<DocValuesProducer> dvp = genDVProducers.get(gen); assert dvp != null : "gen=" + gen; dvp.decRef(); }); } }
private void notifyCoreClosedListeners() throws IOException { synchronized(coreClosedListeners) { IOUtils.applyToAll(coreClosedListeners, l -> l.onClose(cacheHelper.getKey())); } }
@Override void notifyReaderClosedListeners() throws IOException { synchronized(readerClosedListeners) { IOUtils.applyToAll(readerClosedListeners, l -> l.onClose(cacheHelper.getKey())); } }
@Override void notifyReaderClosedListeners() throws IOException { synchronized(readerClosedListeners) { IOUtils.applyToAll(readerClosedListeners, l -> l.onClose(readerCacheHelper.getKey())); } }
@Override @SuppressWarnings("try") protected void doClose() throws IOException { Closeable decRefDeleter = () -> { if (writer != null) { try { writer.decRefDeleter(segmentInfos); } catch (AlreadyClosedException ex) { // This is OK, it just means our original writer was // closed before we were, and this may leave some // un-referenced files in the index, which is // harmless. The next time IW is opened on the // index, it will delete them. } } }; try (Closeable finalizer = decRefDeleter) { // try to close each reader, even if an exception is thrown final List<? extends LeafReader> sequentialSubReaders = getSequentialSubReaders(); IOUtils.applyToAll(sequentialSubReaders, LeafReader::decRef); } }
} catch (Throwable t) { try { IOUtils.applyToAll(readers, SegmentReader::decRef); } catch (Throwable t1) { t.addSuppressed(t1);
@SuppressWarnings("try") private synchronized void closeMergeReaders(MergePolicy.OneMerge merge, boolean suppressExceptions) throws IOException { final boolean drop = suppressExceptions == false; try (Closeable finalizer = merge::mergeFinished) { IOUtils.applyToAll(merge.readers, sr -> { final ReadersAndUpdates rld = getPooledInstance(sr.getOriginalSegmentInfo(), false); // We still hold a ref so it should not have been removed: assert rld != null; if (drop) { rld.dropChanges(); } else { rld.dropMergingUpdates(); } rld.release(sr); release(rld); if (drop) { readerPool.drop(rld.info); } }); } finally { Collections.fill(merge.readers, null); } }