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

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

Updated based on review from Alex and Vikas

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/TrackingCorruptIndexHandler.java

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=1770919&r1=1770918&r2=1770919&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:17 2016
@@ -577,14 +577,15 @@ public class AsyncIndexUpdate implements
     private void markFailingIndexesAsCorrupt(NodeBuilder builder) {
         for (Map.Entry<String, CorruptIndexInfo> index : 
corruptIndexHandler.getCorruptIndexData(name).entrySet()){
             NodeBuilder indexBuilder = childBuilder(builder, index.getKey());
+            CorruptIndexInfo info = index.getValue();
             if 
(!indexBuilder.hasProperty(IndexConstants.CORRUPT_PROPERTY_NAME)){
-                CorruptIndexInfo info = index.getValue();
                 String corruptSince = 
ISO8601.format(info.getCorruptSinceAsCal());
                 indexBuilder.setProperty(
                         
PropertyStates.createProperty(IndexConstants.CORRUPT_PROPERTY_NAME, 
corruptSince, Type.DATE));
                 log.info("Marking [{}] as corrupt. The index is failing {}", 
info.getPath(), info.getStats());
             } else {
-                log.debug("Failing index at [{}] is already marked as corrupt. 
The index is failing {}");
+                log.debug("Failing index at [{}] is already marked as corrupt. 
The index is failing {}",
+                        info.getPath(), info.getStats());
             }
         }
     }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java?rev=1770919&r1=1770918&r2=1770919&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexerService.java
 Wed Nov 23 06:17:17 2016
@@ -148,7 +148,7 @@ public class AsyncIndexerService {
                     PROP_FAILING_INDEX_TIMEOUT, failingIndexTimeoutSeconds);
         } else {
             log.info("Auto corrupt index isolation handling is enabled. Any 
async index which fails for [{}]s would " +
-                    "be marked as corrupted and would be skipped from further 
indexing");
+                    "be marked as corrupted and would be skipped from further 
indexing", failingIndexTimeoutSeconds);
         }
         return corruptIndexHandler;
     }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java?rev=1770919&r1=1770918&r2=1770919&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
 Wed Nov 23 06:17:17 2016
@@ -394,7 +394,7 @@ public class IndexUpdate implements Edit
         if (corrupt != null) {
             definition.removeProperty(IndexConstants.CORRUPT_PROPERTY_NAME);
             log.info("Removing corrupt flag from index [{}] which has been 
marked " +
-                    "as corrupt since [{}]", indexPath, corrupt);
+                    "as corrupt since [{}]", indexPath, 
corrupt.getValue(Type.DATE));
         }
     }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/TrackingCorruptIndexHandler.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/TrackingCorruptIndexHandler.java?rev=1770919&r1=1770918&r2=1770919&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/TrackingCorruptIndexHandler.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/TrackingCorruptIndexHandler.java
 Wed Nov 23 06:17:17 2016
@@ -45,7 +45,7 @@ import static com.google.common.base.Pre
 public class TrackingCorruptIndexHandler implements CorruptIndexHandler {
     private final Logger log = LoggerFactory.getLogger(getClass());
     private Clock clock = Clock.SIMPLE;
-    private int indexerCycleCount;
+    private long indexerCycleCount;
     private long corruptIntervalMillis = TimeUnit.MINUTES.toMillis(30);
     private final Map<String, CorruptIndexInfo> indexes = 
Maps.newConcurrentMap();
 
@@ -129,7 +129,7 @@ public class TrackingCorruptIndexHandler
     public class CorruptIndexInfo {
         private final String asyncName;
         private final String path;
-        private final int lastIndexerCycleCount = indexerCycleCount;
+        private final long lastIndexerCycleCount = indexerCycleCount;
         private String exception = "";
         private int failureCount;
         private int skippedCount;
@@ -182,7 +182,7 @@ public class TrackingCorruptIndexHandler
             return path;
         }
 
-        private int getCycleCount() {
+        private long getCycleCount() {
             return indexerCycleCount - lastIndexerCycleCount;
         }
     }


Reply via email to