From df21ad9f8b5793eccd06af0824788277712ddc04 Mon Sep 17 00:00:00 2001 From: Andrew Hind Date: Thu, 3 Aug 2006 13:34:02 +0000 Subject: [PATCH] Fix reference counting in the new indexer. Added instrumentation to the new indexer. Exposed lots of configuration options for the new indexer. Added debug settings for the new indexer. Fixed search test model for sort tests (1.3 merge fun) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3455 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/search/impl/lucene/LuceneTest2.java | 2 + .../search/impl/lucene/LuceneTest_model.xml | 391 ++++++++++-------- .../search/impl/lucene/index/IndexEntry.java | 1 + .../search/impl/lucene/index/IndexInfo.java | 382 ++++++++++++----- .../impl/lucene/index/IndexInfoTest.java | 1 + ...nceCountingReadOnlyIndexReaderFactory.java | 38 +- 6 files changed, 515 insertions(+), 300 deletions(-) diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest2.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest2.java index 31ff6e3020..92a10d0ea9 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest2.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest2.java @@ -41,6 +41,7 @@ import org.alfresco.repo.dictionary.M2Model; import org.alfresco.repo.node.BaseNodeServiceTest; import org.alfresco.repo.search.QueryParameterDefImpl; import org.alfresco.repo.search.QueryRegisterComponent; +import org.alfresco.repo.search.impl.lucene.analysis.NumericEncoder; import org.alfresco.repo.search.impl.lucene.fts.FullTextSearchIndexer; import org.alfresco.repo.search.results.ChildAssocRefResultSet; import org.alfresco.repo.search.results.DetachedResultSet; @@ -371,6 +372,7 @@ public class LuceneTest2 extends TestCase super(arg0); } + public void test0() throws Exception { luceneFTS.pause(); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml b/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml index 75856aaee8..9d02c13e29 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml @@ -14,176 +14,227 @@ - - - Test Super Type - sys:container - - - - false - true - - - sys:base - false - true - - - - - - - Test Type - test:testSuperType - - - d:text - true - false - - true - true - true - - - - d:text - true - false - - true - false - true - - - - d:text - true - false - - false - true - true - - - - d:int - true - false - - true - true - true - - - - d:long - true - false - - true - true - true - - - - d:float - true - false - - true - true - true - - - - d:double - true - false - - true - true - true - - - - d:date - true - false - - true - true - true - - - - d:datetime - true - false - - true - true - true - - - - d:boolean - true - false - - true - true - true - - - - d:qname - true - false - - true - true - true - - - - d:category - true - false - - true - true - true - - - - d:noderef - true - false - - true - true - true - - - - d:text - true - false - - true - true - false - - - - - test:testAspect - - - ->>>>>>> .merge-right.r3203 + + + Test Super Type + sys:container + + + d:date + true + false + + true + true + true + + + + d:double + true + false + + true + true + true + + + + d:float + true + false + + true + true + true + + + + d:long + true + false + + true + true + true + + + + d:int + true + false + + true + true + true + + + + + + + false + true + + + sys:base + false + true + + + + + + + Test Type + test:testSuperType + + + d:text + true + false + + true + true + true + + + + d:text + true + false + + true + false + true + + + + d:text + true + false + + false + true + true + + + + d:int + true + false + + true + true + true + + + + d:long + true + false + + true + true + true + + + + d:float + true + false + + true + true + true + + + + d:double + true + false + + true + true + true + + + + d:date + true + false + + true + true + true + + + + d:datetime + true + false + + true + true + true + + + + d:boolean + true + false + + true + true + true + + + + d:qname + true + false + + true + true + true + + + + d:category + true + false + + true + true + true + + + + d:noderef + true + false + + true + true + true + + + + d:text + true + false + + true + true + false + + + + + test:testAspect + + + diff --git a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexEntry.java b/source/java/org/alfresco/repo/search/impl/lucene/index/IndexEntry.java index 9f468d3678..e381d4531f 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexEntry.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/index/IndexEntry.java @@ -154,6 +154,7 @@ class IndexEntry builder.append("Type=").append(getType()).append(" "); builder.append("Status=").append(getStatus()).append(" "); builder.append("Docs=").append(getDocumentCount()).append(" "); + builder.append("Deletions=").append(getDeletions()).append(" "); return builder.toString(); } diff --git a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java b/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java index d6d7d29d22..0408317939 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java @@ -49,13 +49,11 @@ import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.search.IndexerException; import org.alfresco.repo.search.impl.lucene.FilterIndexReaderByNodeRefs2; import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.util.GUID; import org.apache.log4j.Logger; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; -import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.MultiReader; @@ -206,6 +204,32 @@ public class IndexInfo private static HashMap indexInfos = new HashMap(); + private int maxDocsForInMemoryMerge = 10000; + + private int writerMinMergeDocs = 1000; + + private int writerMergeFactor = 5; + + private int writerMaxMergeDocs = 1000000; + + private boolean writerUseCompoundFile = true; + + private int mergerMinMergeDocs = 1000; + + private int mergerMergeFactor = 5; + + private int mergerMaxMergeDocs = 1000000; + + private boolean mergerUseCompoundFile = true; + + private int mergerTargetOverlays = 5; + + // TODO: Something to control the maximum number of overlays + + private boolean enableCleanerThread = true; + + private boolean enableMergerThread = true; + static { System.setProperty("disableLuceneLocks", "true"); @@ -283,6 +307,10 @@ public class IndexInfo try { writer = new IndexWriter(oldIndex, new StandardAnalyzer(), false); + writer.setUseCompoundFile(writerUseCompoundFile); + writer.minMergeDocs = writerMinMergeDocs; + writer.mergeFactor = writerMergeFactor; + writer.maxMergeDocs = writerMaxMergeDocs; writer.optimize(); long docs = writer.docCount(); writer.close(); @@ -393,24 +421,32 @@ public class IndexInfo } } // TODO: Add unrecognised folders for deletion. - cleanerThread = new Thread(cleaner); - cleanerThread.setDaemon(true); - cleanerThread.setName("Index cleaner thread"); - cleanerThread.start(); - mergerThread = new Thread(merger); - mergerThread.setDaemon(true); - mergerThread.setName("Index merger thread"); - mergerThread.start(); + if (enableCleanerThread) + { + cleanerThread = new Thread(cleaner); + cleanerThread.setDaemon(true); + cleanerThread.setName("Index cleaner thread "+indexDirectory); + cleanerThread.start(); + } + + + if (enableMergerThread) + { + mergerThread = new Thread(merger); + mergerThread.setDaemon(true); + mergerThread.setName("Index merger thread "+indexDirectory); + mergerThread.start(); + } IndexWriter writer; try { writer = new IndexWriter(emptyIndex, new StandardAnalyzer(), true); - writer.setUseCompoundFile(true); - writer.minMergeDocs = 1000; - writer.mergeFactor = 5; - writer.maxMergeDocs = 1000000; + writer.setUseCompoundFile(writerUseCompoundFile); + writer.minMergeDocs = writerMinMergeDocs; + writer.mergeFactor = writerMergeFactor; + writer.maxMergeDocs = writerMaxMergeDocs; } catch (IOException e) { @@ -441,21 +477,28 @@ public class IndexInfo // close index writer if required closeDeltaIndexWriter(id); // Check the index knows about the transaction - File location = ensureDeltaIsRegistered(id); - // Create a dummy index reader to deal with empty indexes and not persist these. - if (IndexReader.indexExists(location)) - { - reader = IndexReader.open(location); - } - else - { - reader = IndexReader.open(emptyIndex); - } + reader = buildAndRegisterDeltaReader(id); indexReaders.put(id, reader); } return reader; } + private IndexReader buildAndRegisterDeltaReader(String id) throws IOException + { + IndexReader reader; + File location = ensureDeltaIsRegistered(id); + // Create a dummy index reader to deal with empty indexes and not persist these. + if (IndexReader.indexExists(location)) + { + reader = IndexReader.open(location); + } + else + { + reader = IndexReader.open(emptyIndex); + } + return reader; + } + /** * The delta information does not need to be saved to disk. * @@ -511,10 +554,10 @@ public class IndexInfo if (!IndexReader.indexExists(location)) { IndexWriter creator = new IndexWriter(location, analyzer, true); - creator.setUseCompoundFile(true); - creator.minMergeDocs = 1000; - creator.mergeFactor = 5; - creator.maxMergeDocs = 1000000; + creator.setUseCompoundFile(writerUseCompoundFile); + creator.minMergeDocs = writerMinMergeDocs; + creator.mergeFactor = writerMergeFactor; + creator.maxMergeDocs = writerMaxMergeDocs; return creator; } return null; @@ -538,10 +581,10 @@ public class IndexInfo if (writer == null) { writer = new IndexWriter(location, analyzer, false); - writer.setUseCompoundFile(true); - writer.minMergeDocs = 1000; - writer.mergeFactor = 5; - writer.maxMergeDocs = 1000000; + writer.setUseCompoundFile(writerUseCompoundFile); + writer.minMergeDocs = writerMinMergeDocs; + writer.mergeFactor = writerMergeFactor; + writer.maxMergeDocs = writerMaxMergeDocs; } indexWriters.put(id, writer); } @@ -789,12 +832,14 @@ public class IndexInfo // TODO: Should use the in memory index but we often end up forcing to disk anyway. // Is it worth it? // luceneIndexer.flushPending(); - IndexReader deltaReader = ReferenceCountingReadOnlyIndexReaderFactory.createReader(id, - getDeltaIndexReader(id)); - ReferenceCounting deltaRefCount = (ReferenceCounting) deltaReader; - deltaRefCount.incrementReferenceCount(); + + IndexReader deltaReader = buildAndRegisterDeltaReader(id); IndexReader reader = new MultiReader(new IndexReader[] { new FilterIndexReaderByNodeRefs2(mainIndexReader, deletions, deleteOnlyNodes), deltaReader }); + reader = ReferenceCountingReadOnlyIndexReaderFactory.createReader("MainReader"+id, reader); + ReferenceCounting refCounting = (ReferenceCounting)reader; + refCounting.incrementReferenceCount(); + refCounting.setInvalidForReuse(); return reader; } finally @@ -1659,7 +1704,18 @@ public class IndexInfo { if (indexIsShared) { + long start = 0l; + if (s_logger.isDebugEnabled()) + { + s_logger.debug(" ... waiting for file lock"); + start = System.nanoTime(); + } fileLock = indexInfoChannel.lock(); + if (s_logger.isDebugEnabled()) + { + long end = System.nanoTime(); + s_logger.debug(" ... got file lock in " + ((end - start)/10e6f) + " ms"); + } if (!checkVersion()) { setStatusFromFile(); @@ -1688,6 +1744,10 @@ public class IndexInfo try { fileLock.release(); + if (s_logger.isDebugEnabled()) + { + s_logger.debug(" ... released file lock"); + } } catch (IOException e) { @@ -1696,6 +1756,11 @@ public class IndexInfo } } + /** + * Helper to print out index information + * + * @param args + */ public static void main(String[] args) { @@ -1721,67 +1786,6 @@ public class IndexInfo } } - // public static void main(String[] args) throws IOException - - // { - // System.setProperty("disableLuceneLocks", "true"); - // - // HashSet deletions = new HashSet(); - // for (int i = 0; i < 0; i++) - // { - // deletions.add(new NodeRef(new StoreRef("woof", "bingle"), GUID.generate())); - // } - // - // int repeat = 100; - // int docs = 1; - // final IndexInfo ii = new IndexInfo(new File("c:\\indexTest")); - // - // long totalTimeA = 0; - // long countA = 0; - // - // while (true) - // { - // long start = System.nanoTime(); - // for (int i = 0; i < repeat; i++) - // { - // String guid = GUID.generate(); - // ii.setStatus(guid, TransactionStatus.ACTIVE, null, null); - // IndexWriter writer = ii.getDeltaIndexWriter(guid, new StandardAnalyzer()); - // - // for (int j = 0; j < docs; j++) - // { - // Document doc = new Document(); - // for (int k = 0; k < 15; k++) - // { - // doc.add(new Field("ID" + k, guid + " " + j + " " + k, false, true, false)); - // } - // writer.addDocument(doc); - // } - // - // ii.closeDeltaIndexWriter(guid); - // ii.setStatus(guid, TransactionStatus.PREPARING, null, null); - // ii.setPreparedState(guid, deletions, docs, false); - // ii.getDeletions(guid); - // ii.setStatus(guid, TransactionStatus.PREPARED, null, null); - // ii.setStatus(guid, TransactionStatus.COMMITTING, null, null); - // ii.setStatus(guid, TransactionStatus.COMMITTED, null, null); - // for (int j = 0; j < 0; j++) - // { - // ii.getMainIndexReferenceCountingReadOnlyIndexReader(); - // } - // } - // - // long end = System.nanoTime(); - // - // totalTimeA += (end - start); - // countA += repeat; - // float average = countA * 1000000000f / totalTimeA; - // - // System.out.println("Repeated " - // + repeat + " in " + ((end - start) / 1000000000.0) + " average = " + average); - // } - // } - /** * Clean up support. * @@ -1979,7 +1983,7 @@ public class IndexInfo if (!mergingIndexes && !applyingDeletions) { - if ((indexes > 5) || (deltas > 5)) + if ((indexes > mergerMergeFactor) || (deltas > mergerTargetOverlays)) { if (indexes > deltas) { @@ -2333,7 +2337,7 @@ public class IndexInfo } } - int position = findMergeIndex(1, 1000000, 5, mergeList); + int position = findMergeIndex(1, mergerMaxMergeDocs, mergerMergeFactor, mergeList); String firstMergeId = mergeList.get(position).getName(); long count = 0; @@ -2417,7 +2421,7 @@ public class IndexInfo else if (entry.getStatus() == TransactionStatus.MERGE_TARGET) { outputLocation = location; - if (docCount < 10000) + if (docCount < maxDocsForInMemoryMerge) { ramDirectory = new RAMDirectory(); writer = new IndexWriter(ramDirectory, new StandardAnalyzer(), true); @@ -2425,11 +2429,12 @@ public class IndexInfo else { writer = new IndexWriter(location, new StandardAnalyzer(), true); + } - writer.setUseCompoundFile(true); - writer.minMergeDocs = 1000; - writer.mergeFactor = 5; - writer.maxMergeDocs = 1000000; + writer.setUseCompoundFile(mergerUseCompoundFile); + writer.minMergeDocs = mergerMinMergeDocs; + writer.mergeFactor = mergerMergeFactor; + writer.maxMergeDocs = mergerMaxMergeDocs; } } writer.addIndexes(readers); @@ -2525,17 +2530,18 @@ public class IndexInfo indexEntries.remove(id); deleteQueue.add(id); } - synchronized (cleaner) - { - cleaner.notify(); - } - + dumpInfo(); writeStatus(); clearOldReaders(); + synchronized (cleaner) + { + cleaner.notify(); + } + return null; } @@ -2603,10 +2609,19 @@ public class IndexInfo private void getWriteLock() { + String threadName = null; + long start = 0l; + if (s_logger.isDebugEnabled()) + { + threadName = Thread.currentThread().getName(); + s_logger.debug("Waiting for WRITE lock - " + threadName); + start = System.nanoTime(); + } readWriteLock.writeLock().lock(); if (s_logger.isDebugEnabled()) { - s_logger.debug("GOT WRITE LOCK - " + Thread.currentThread().getName()); + long end = System.nanoTime(); + s_logger.debug("...GOT WRITE LOCK - " + threadName + " - in " + ((end - start)/10e6f) + " ms"); } } @@ -2614,17 +2629,26 @@ public class IndexInfo { if (s_logger.isDebugEnabled()) { - s_logger.debug("RELEASES WRITE LOCK - " + Thread.currentThread().getName()); + s_logger.debug("RELEASED WRITE LOCK - " + Thread.currentThread().getName()); } readWriteLock.writeLock().unlock(); } private void getReadLock() { + String threadName = null; + long start = 0l; + if (s_logger.isDebugEnabled()) + { + threadName = Thread.currentThread().getName(); + s_logger.debug("Waiting for READ lock - " + threadName); + start = System.nanoTime(); + } readWriteLock.readLock().lock(); if (s_logger.isDebugEnabled()) { - s_logger.debug("GOT READ LOCK - " + Thread.currentThread().getName()); + long end = System.nanoTime(); + s_logger.debug("...GOT READ LOCK - " + threadName + " - in " + ((end - start)/10e6f) + " ms"); } } @@ -2632,7 +2656,7 @@ public class IndexInfo { if (s_logger.isDebugEnabled()) { - s_logger.debug("RELEASES READ LOCK - " + Thread.currentThread().getName()); + s_logger.debug("RELEASED READ LOCK - " + Thread.currentThread().getName()); } readWriteLock.readLock().unlock(); } @@ -2641,4 +2665,136 @@ public class IndexInfo { return indexDirectory.toString(); } + + public boolean isEnableCleanerThread() + { + return enableCleanerThread; + } + + public void setEnableCleanerThread(boolean enableCleanerThread) + { + this.enableCleanerThread = enableCleanerThread; + } + + public boolean isEnableMergerThread() + { + return enableMergerThread; + } + + public void setEnableMergerThread(boolean enableMergerThread) + { + this.enableMergerThread = enableMergerThread; + } + + public boolean isIndexIsShared() + { + return indexIsShared; + } + + public void setIndexIsShared(boolean indexIsShared) + { + this.indexIsShared = indexIsShared; + } + + public int getMaxDocsForInMemoryMerge() + { + return maxDocsForInMemoryMerge; + } + + public void setMaxDocsForInMemoryMerge(int maxDocsForInMemoryMerge) + { + this.maxDocsForInMemoryMerge = maxDocsForInMemoryMerge; + } + + public int getMergerMaxMergeDocs() + { + return mergerMaxMergeDocs; + } + + public void setMergerMaxMergeDocs(int mergerMaxMergeDocs) + { + this.mergerMaxMergeDocs = mergerMaxMergeDocs; + } + + public int getMergerMergeFactor() + { + return mergerMergeFactor; + } + + public void setMergerMergeFactor(int mergerMergeFactor) + { + this.mergerMergeFactor = mergerMergeFactor; + } + + public int getMergerMinMergeDocs() + { + return mergerMinMergeDocs; + } + + public void setMergerMinMergeDocs(int mergerMinMergeDocs) + { + this.mergerMinMergeDocs = mergerMinMergeDocs; + } + + public int getMergerTargetOverlays() + { + return mergerTargetOverlays; + } + + public void setMergerTargetOverlays(int mergerTargetOverlays) + { + this.mergerTargetOverlays = mergerTargetOverlays; + } + + public boolean isMergerUseCompoundFile() + { + return mergerUseCompoundFile; + } + + public void setMergerUseCompoundFile(boolean mergerUseCompoundFile) + { + this.mergerUseCompoundFile = mergerUseCompoundFile; + } + + public int getWriterMaxMergeDocs() + { + return writerMaxMergeDocs; + } + + public void setWriterMaxMergeDocs(int writerMaxMergeDocs) + { + this.writerMaxMergeDocs = writerMaxMergeDocs; + } + + public int getWriterMergeFactor() + { + return writerMergeFactor; + } + + public void setWriterMergeFactor(int writerMergeFactor) + { + this.writerMergeFactor = writerMergeFactor; + } + + public int getWriterMinMergeDocs() + { + return writerMinMergeDocs; + } + + public void setWriterMinMergeDocs(int writerMinMergeDocs) + { + this.writerMinMergeDocs = writerMinMergeDocs; + } + + public boolean isWriterUseCompoundFile() + { + return writerUseCompoundFile; + } + + public void setWriterUseCompoundFile(boolean writerUseCompoundFile) + { + this.writerUseCompoundFile = writerUseCompoundFile; + } + + } diff --git a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfoTest.java b/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfoTest.java index eefa22a92d..3770a4f39e 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfoTest.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfoTest.java @@ -207,6 +207,7 @@ public static final String[] UPDATE_LIST_2 = { "alpha2", "bravo2", "charlie2", " writer.addDocument(doc); ii.closeDeltaIndexWriter(guid); + ii.setStatus(guid, TransactionStatus.PREPARING, null, null); ii.setPreparedState(guid, new HashSet(), 1, false); ii.getDeletions(guid); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/index/ReferenceCountingReadOnlyIndexReaderFactory.java b/source/java/org/alfresco/repo/search/impl/lucene/index/ReferenceCountingReadOnlyIndexReaderFactory.java index 5c95d2645c..e6e2e03147 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/index/ReferenceCountingReadOnlyIndexReaderFactory.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/index/ReferenceCountingReadOnlyIndexReaderFactory.java @@ -32,16 +32,17 @@ public class ReferenceCountingReadOnlyIndexReaderFactory public static class ReferenceCountingReadOnlyIndexReader extends FilterIndexReader implements ReferenceCounting { private static Logger s_logger = Logger.getLogger(ReferenceCountingReadOnlyIndexReader.class); - - + private static final long serialVersionUID = 7693185658022810428L; String id; - + int refCount = 0; boolean invalidForReuse = false; + boolean allowsDeletions; + ReferenceCountingReadOnlyIndexReader(String id, IndexReader indexReader) { super(indexReader); @@ -51,18 +52,20 @@ public class ReferenceCountingReadOnlyIndexReaderFactory public synchronized void incrementReferenceCount() { refCount++; - if(s_logger.isDebugEnabled()) + if (s_logger.isDebugEnabled()) { - s_logger.debug(Thread.currentThread().getName()+ ": Reader "+id+ " - increment - ref count is "+refCount); + s_logger.debug(Thread.currentThread().getName() + + ": Reader " + id + " - increment - ref count is " + refCount); } } public synchronized void decrementReferenceCount() throws IOException { refCount--; - if(s_logger.isDebugEnabled()) + if (s_logger.isDebugEnabled()) { - s_logger.debug(Thread.currentThread().getName()+ ": Reader "+id+ " - decrement - ref count is "+refCount); + s_logger.debug(Thread.currentThread().getName() + + ": Reader " + id + " - decrement - ref count is " + refCount); } closeIfRequired(); } @@ -71,17 +74,19 @@ public class ReferenceCountingReadOnlyIndexReaderFactory { if ((refCount == 0) && invalidForReuse) { - if(s_logger.isDebugEnabled()) + if (s_logger.isDebugEnabled()) { - s_logger.debug(Thread.currentThread().getName()+ ": Reader "+id+ " closed."); + s_logger.debug(Thread.currentThread().getName() + ": Reader " + id + " closed."); } in.close(); } else { - if(s_logger.isDebugEnabled()) + if (s_logger.isDebugEnabled()) { - s_logger.debug(Thread.currentThread().getName()+ ": Reader "+id+ " still open .... ref = "+refCount+" invalidForReuse = "+invalidForReuse); + s_logger.debug(Thread.currentThread().getName() + + ": Reader " + id + " still open .... ref = " + refCount + " invalidForReuse = " + + invalidForReuse); } } } @@ -94,9 +99,9 @@ public class ReferenceCountingReadOnlyIndexReaderFactory public synchronized void setInvalidForReuse() throws IOException { invalidForReuse = true; - if(s_logger.isDebugEnabled()) + if (s_logger.isDebugEnabled()) { - s_logger.debug(Thread.currentThread().getName()+ ": Reader "+id+ " set invalid for reuse"); + s_logger.debug(Thread.currentThread().getName() + ": Reader " + id + " set invalid for reuse"); } closeIfRequired(); } @@ -104,9 +109,9 @@ public class ReferenceCountingReadOnlyIndexReaderFactory @Override protected void doClose() throws IOException { - if(s_logger.isDebugEnabled()) + if (s_logger.isDebugEnabled()) { - s_logger.debug(Thread.currentThread().getName()+ ": Reader "+id+ " closing"); + s_logger.debug(Thread.currentThread().getName() + ": Reader " + id + " closing"); } decrementReferenceCount(); } @@ -116,7 +121,6 @@ public class ReferenceCountingReadOnlyIndexReaderFactory { throw new UnsupportedOperationException("Delete is not supported by read only index readers"); } - - + } }