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;
}
}