Author: chetanm
Date: Tue Jul 11 05:15:59 2017
New Revision: 1801559
URL: http://svn.apache.org/viewvc?rev=1801559&view=rev
Log:
OAK-6271 - Support for importing index files
Check for lane name if NodeState corresponds to a already switched case
i.e. for a case where indexing got restarted post switch
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/AsyncLaneSwitcher.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexImporter.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java?rev=1801559&r1=1801558&r2=1801559&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java
Tue Jul 11 05:15:59 2017
@@ -227,7 +227,11 @@ public class IndexUtils {
@CheckForNull
public static String getAsyncLaneName(NodeState idxState, String
indexPath) {
- PropertyState async =
idxState.getProperty(IndexConstants.ASYNC_PROPERTY_NAME);
+ return getAsyncLaneName(idxState, indexPath,
idxState.getProperty(IndexConstants.ASYNC_PROPERTY_NAME));
+ }
+
+ @CheckForNull
+ public static String getAsyncLaneName(NodeState idxState, String
indexPath, PropertyState async) {
if (async != null) {
Set<String> asyncNames =
Sets.newHashSet(async.getValue(Type.STRINGS));
asyncNames.remove(IndexConstants.INDEXING_MODE_NRT);
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/AsyncLaneSwitcher.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/AsyncLaneSwitcher.java?rev=1801559&r1=1801558&r2=1801559&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/AsyncLaneSwitcher.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/AsyncLaneSwitcher.java
Tue Jul 11 05:15:59 2017
@@ -85,7 +85,7 @@ public class AsyncLaneSwitcher {
PropertyState previousAsync = idxBuilder.getProperty(ASYNC_PREVIOUS);
checkState(previousAsync != null, "No previous async state property
found for index [%s]", indexPath);
- if (!previousAsync.isArray() &&
ASYNC_PREVIOUS_NONE.equals(previousAsync.getValue(Type.STRING))) {
+ if (isNone(previousAsync)) {
idxBuilder.removeProperty(IndexConstants.ASYNC_PROPERTY_NAME);
} else {
idxBuilder.setProperty(clone(IndexConstants.ASYNC_PROPERTY_NAME,
previousAsync));
@@ -93,6 +93,10 @@ public class AsyncLaneSwitcher {
idxBuilder.removeProperty(ASYNC_PREVIOUS);
}
+ public static boolean isNone(PropertyState previousAsync) {
+ return !previousAsync.isArray() &&
ASYNC_PREVIOUS_NONE.equals(previousAsync.getValue(Type.STRING));
+ }
+
private static PropertyState clone(String newName, PropertyState
currentAsyncState) {
PropertyState clonedState;
if (currentAsyncState.isArray()) {
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexImporter.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexImporter.java?rev=1801559&r1=1801558&r2=1801559&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexImporter.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexImporter.java
Tue Jul 11 05:15:59 2017
@@ -28,6 +28,7 @@ import java.util.Map;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdate;
@@ -201,11 +202,10 @@ public class IndexImporter {
NodeState indexState = NodeStateUtils.getNode(rootState,
indexPath);
checkArgument(indexState.exists(), "No index node found at path
[%s]", indexPath);
- //TODO Also check for previous lane in case of reattempt
String type =
indexState.getString(IndexConstants.TYPE_PROPERTY_NAME);
checkNotNull(type, "No 'type' property found for index at path
[%s]", indexPath);
- String asyncName = IndexUtils.getAsyncLaneName(indexState,
indexPath);
+ String asyncName = getAsyncLaneName(indexPath, indexState);
if (asyncName == null) {
asyncName = ASYNC_LANE_SYNC;
}
@@ -215,6 +215,23 @@ public class IndexImporter {
return map;
}
+ /**
+ * Determines the async lane name. This method also check if lane was
previously switched
+ * then it uses the actual lane name prior to switch was done
+ *
+ * @param indexPath path of index. Mostly used in reporting exception
+ * @param indexState nodeState for index at given path
+ *
+ * @return async lane name or null which would be the case for sync indexes
+ */
+ static String getAsyncLaneName(String indexPath, NodeState indexState) {
+ PropertyState asyncPrevious =
indexState.getProperty(AsyncLaneSwitcher.ASYNC_PREVIOUS);
+ if (asyncPrevious != null && !AsyncLaneSwitcher.isNone(asyncPrevious)){
+ return IndexUtils.getAsyncLaneName(indexState, indexPath,
asyncPrevious);
+ }
+ return IndexUtils.getAsyncLaneName(indexState, indexPath);
+ }
+
private void releaseCheckpoint() {
nodeStore.release(indexerInfo.checkpoint);
log.info("Released the referred checkpoint [{}]",
indexerInfo.checkpoint);