You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2017/07/11 05:15:59 UTC

svn commit: r1801559 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index: IndexUtils.java importer/AsyncLaneSwitcher.java importer/IndexImporter.java

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