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