Author: chetanm
Date: Wed Nov 23 06:17:08 2016
New Revision: 1770918

URL: http://svn.apache.org/viewvc?rev=1770918&view=rev
Log:
OAK-4939 - Isolate corrupted index and make async indexer more resilient

Set status to failing in case of any corrupt index

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/IndexStatsMBean.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/IndexStatsMBean.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/IndexStatsMBean.java?rev=1770918&r1=1770917&r2=1770918&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/IndexStatsMBean.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/IndexStatsMBean.java
 Wed Nov 23 06:17:08 2016
@@ -35,6 +35,8 @@ public interface IndexStatsMBean {
 
     String STATUS_DONE = "done";
 
+    String STATUS_FAILING = "failing";
+
     String STATUS_INTERRUPTED = "interrupted";
 
     /**

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java?rev=1770918&r1=1770917&r2=1770918&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java
 Wed Nov 23 06:17:08 2016
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-@Version("4.3.0")
+@Version("4.4.0")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.api.jmx;
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java?rev=1770918&r1=1770917&r2=1770918&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
 Wed Nov 23 06:17:08 2016
@@ -896,7 +896,11 @@ public class AsyncIndexUpdate implements
         }
 
         public void done(String now) {
-            status = STATUS_DONE;
+            if (corruptIndexHandler.isFailing(name)){
+                status = STATUS_FAILING;
+            } else {
+                status = STATUS_DONE;
+            }
             done = now;
             if (watch.isRunning()) {
                 watch.stop();

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java?rev=1770918&r1=1770917&r2=1770918&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
 Wed Nov 23 06:17:08 2016
@@ -1665,8 +1665,9 @@ public class AsyncIndexUpdateTest {
         //5. Let async run again
         async.run();
 
-        //Indexing should be ok now
-        assertFalse(async.getIndexStats().isFailing());
+        //Indexing would be considered as failing
+        assertTrue(async.getIndexStats().isFailing());
+        assertEquals(IndexStatsMBean.STATUS_FAILING, 
async.getIndexStats().getStatus());
 
         //barIndex should be considered corrupt now
         
assertTrue(async.getCorruptIndexHandler().getCorruptIndexData("async").containsKey("/oak:index/barIndex"));
@@ -1685,7 +1686,7 @@ public class AsyncIndexUpdateTest {
         store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         async.run();
-        assertFalse(async.getIndexStats().isFailing());
+        assertTrue(async.getIndexStats().isFailing());
 
         //barIndex should be skipped
         assertEquals(2, barIndexInfo.getSkippedCount());


Reply via email to