You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2016/12/15 03:22:31 UTC

svn commit: r1774362 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndex.java test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndexFactoryTest.java

Author: chetanm
Date: Thu Dec 15 03:22:31 2016
New Revision: 1774362

URL: http://svn.apache.org/viewvc?rev=1774362&view=rev
Log:
OAK-5305 - NRTIndex link to previous index leads to memory leak

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndex.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndexFactoryTest.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndex.java?rev=1774362&r1=1774361&r2=1774362&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndex.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndex.java Thu Dec 15 03:22:31 2016
@@ -64,7 +64,7 @@ public class NRTIndex implements Closeab
     private final IndexDefinition definition;
     private final IndexCopier indexCopier;
     private final IndexUpdateListener refreshPolicy;
-    private final NRTIndex previous;
+    private NRTIndex previous;
 
     private IndexWriter indexWriter;
     private NRTIndexWriter nrtIndexWriter;
@@ -141,6 +141,9 @@ public class NRTIndex implements Closeab
             FileUtils.deleteQuietly(indexDir);
             log.debug("[{}] Removed directory [{}]", this, indexDir);
         }
+        //Null the reference to previous so as to let it
+        //garbage collect. It would not be accessed post close
+        previous = null;
 
         closed = true;
     }
@@ -149,6 +152,10 @@ public class NRTIndex implements Closeab
         return closed;
     }
 
+    NRTIndex getPrevious() {
+        return previous;
+    }
+
     @Override
     public String toString() {
         return definition.getIndexPath();

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndexFactoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndexFactoryTest.java?rev=1774362&r1=1774361&r2=1774362&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndexFactoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/hybrid/NRTIndexFactoryTest.java Thu Dec 15 03:22:31 2016
@@ -109,6 +109,13 @@ public class NRTIndexFactoryTest {
         assertEquals(0, idx4.getReaders().size());
         //With 3 generation open the first one should be closed
         assertTrue(idx1.isClosed());
+        assertNull(idx1.getPrevious());
+
+        NRTIndex idx5 = indexFactory.createIndex(idxDefn);
+        assertEquals(3, indexFactory.getIndexes("/foo").size());
+
+        assertTrue(idx2.isClosed());
+        assertNull(idx2.getPrevious());
     }
 
     @Test