Author: alexparvulescu Date: Tue Apr 26 14:44:24 2016 New Revision: 1741044
URL: http://svn.apache.org/viewvc?rev=1741044&view=rev Log: OAK-4099 Lucene index appear to be corrupted with compaction enabled - merged r1741032 Added: jackrabbit/oak/branches/1.4/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTrackerTest.java - copied unchanged from r1741032, jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTrackerTest.java Modified: jackrabbit/oak/branches/1.4/ (props changed) jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java Propchange: jackrabbit/oak/branches/1.4/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Apr 26 14:44:24 2016 @@ -1,3 +1,3 @@ /jackrabbit/oak/branches/1.0:1665962 -/jackrabbit/oak/trunk:1733615,1733875,1733913,1734230,1734254,1735052,1735405,1735484,1735549,1735564,1735622,1735638,1735919,1735983,1736176,1737998,1738004,1738775,1738963,1740971 +/jackrabbit/oak/trunk:1733615,1733875,1733913,1734230,1734254,1735052,1735405,1735484,1735549,1735564,1735622,1735638,1735919,1735983,1736176,1737998,1738004,1738775,1738963,1740971,1741032 /jackrabbit/trunk:1345480 Modified: jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java?rev=1741044&r1=1741043&r2=1741044&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java (original) +++ jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java Tue Apr 26 14:44:24 2016 @@ -61,6 +61,8 @@ class IndexTracker { private volatile Map<String, IndexNode> indices = emptyMap(); + private volatile boolean refresh; + IndexTracker() { this(null); } @@ -83,6 +85,17 @@ class IndexTracker { } synchronized void update(final NodeState root) { + if (refresh) { + this.root = root; + close(); + refresh = false; + log.info("Refreshed the opened indexes"); + } else { + diffAndUpdate(root); + } + } + + private synchronized void diffAndUpdate(final NodeState root) { Map<String, IndexNode> original = indices; final Map<String, IndexNode> updates = newHashMap(); @@ -129,6 +142,10 @@ class IndexTracker { } } + void refresh() { + refresh = true; + } + IndexNode acquireIndexNode(String path) { IndexNode index = indices.get(path); if (index != null && index.acquire()) { @@ -177,5 +194,4 @@ class IndexTracker { return null; } - } Modified: jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java?rev=1741044&r1=1741043&r2=1741044&view=diff ============================================================================== --- jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java (original) +++ jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java Tue Apr 26 14:44:24 2016 @@ -35,7 +35,6 @@ import javax.management.NotCompliantMBea import com.google.common.base.Strings; import com.google.common.collect.Lists; -import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.felix.scr.annotations.Activate; import org.apache.felix.scr.annotations.Component; @@ -56,6 +55,7 @@ import org.apache.jackrabbit.oak.spi.com import org.apache.jackrabbit.oak.plugins.index.lucene.score.ScorerProviderFactory; import org.apache.jackrabbit.oak.spi.commit.BackgroundObserverMBean; import org.apache.jackrabbit.oak.spi.commit.Observer; +import org.apache.jackrabbit.oak.spi.gc.GCMonitor; import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider; import org.apache.jackrabbit.oak.spi.whiteboard.Registration; import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard; @@ -70,6 +70,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static com.google.common.base.Preconditions.checkNotNull; +import static java.util.Collections.emptyMap; import static org.apache.commons.io.FileUtils.ONE_MB; import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean; @@ -242,6 +243,7 @@ public class LuceneIndexProviderService new LuceneIndexMBeanImpl(indexProvider.getTracker()), LuceneIndexMBean.TYPE, "Lucene Index statistics")); + registerGCMonitor(whiteboard, indexProvider.getTracker()); } @Deactivate @@ -488,6 +490,17 @@ public class LuceneIndexProviderService } } + private void registerGCMonitor(Whiteboard whiteboard, + final IndexTracker tracker) { + GCMonitor gcMonitor = new GCMonitor.Empty() { + @Override + public void compacted(long[] segmentCounts, long[] recordCounts, + long[] compactionMapWeights) { + tracker.refresh(); + } + }; + oakRegs.add(whiteboard.register(GCMonitor.class, gcMonitor, emptyMap())); + } protected void bindNodeAggregator(NodeAggregator aggregator) { this.nodeAggregator = aggregator;
