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 2014/11/27 12:37:04 UTC
svn commit: r1642113 - in /jackrabbit/oak/branches/1.0: ./
oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/
oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/
Author: chetanm
Date: Thu Nov 27 11:37:04 2014
New Revision: 1642113
URL: http://svn.apache.org/r1642113
Log:
OAK-2276 - Support for index format version
Merging revisions 1641599
Modified:
jackrabbit/oak/branches/1.0/ (props changed)
jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexFormatVersion.java
jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1641599
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1642113&r1=1642112&r2=1642113&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java Thu Nov 27 11:37:04 2014
@@ -39,6 +39,7 @@ import com.google.common.collect.Immutab
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
+import com.google.common.primitives.Ints;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
@@ -65,6 +66,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.ENTRY_COUNT_PROPERTY_NAME;
import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.REINDEX_COUNT;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.BLOB_SIZE;
+import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.COMPAT_MODE;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EVALUATE_PATH_RESTRICTION;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EXCLUDE_PROPERTY_NAMES;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EXPERIMENTAL_STORAGE;
@@ -706,7 +708,7 @@ class IndexDefinition {
if (!hasIndexingRules(defn)){
NodeState rulesState = createIndexRules(defn).getNodeState();
indexDefn.setChildNode(LuceneIndexConstants.INDEX_RULES, rulesState);
- indexDefn.setProperty(INDEX_VERSION, determineIndexFormatVersion(defn).getVersion());
+ indexDefn.setProperty(INDEX_VERSION, determineIndexFormatVersion(defn, indexDefn).getVersion());
indexDefn.removeProperty(DECLARING_NODE_TYPES);
indexDefn.removeProperty(INCLUDE_PROPERTY_NAMES);
@@ -985,34 +987,76 @@ class IndexDefinition {
nb.setProperty(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED, Type.NAME);
}
- private static IndexFormatVersion determineIndexFormatVersion(NodeState defn) {
- return determineIndexFormatVersion(defn, null);
- }
-
private static IndexFormatVersion determineIndexFormatVersion(NodeState defn, NodeBuilder defnb) {
if (defnb != null && !defnb.getChildNode(INDEX_DATA_CHILD_NAME).exists()){
- return IndexFormatVersion.getCurrent();
+ return determineVersionForFreshIndex(defnb);
}
- if (defn.hasProperty(LuceneIndexConstants.COMPAT_MODE)){
- return IndexFormatVersion.getVersion((int)defn.getLong(LuceneIndexConstants.COMPAT_MODE));
+ //Compat mode version if specified has highest priority
+ if (defn.hasProperty(COMPAT_MODE)){
+ return versionFrom(defn.getProperty(COMPAT_MODE));
}
if (defn.hasProperty(INDEX_VERSION)){
- return IndexFormatVersion.getVersion((int)defn.getLong(INDEX_VERSION));
+ return versionFrom(defn.getProperty(INDEX_VERSION));
}
//No existing index data i.e. reindex or fresh index
if (!defn.getChildNode(INDEX_DATA_CHILD_NAME).exists()){
- return IndexFormatVersion.getCurrent();
+ return determineVersionForFreshIndex(defn);
}
boolean fullTextEnabled = getOptionalValue(defn, FULL_TEXT_ENABLED, true);
+
//A fulltext index with old indexing format confirms to V1. However
//a propertyIndex with old indexing format confirms to V2
return fullTextEnabled ? IndexFormatVersion.V1 : IndexFormatVersion.V2;
}
+ static IndexFormatVersion determineVersionForFreshIndex(NodeState defn){
+ return determineVersionForFreshIndex(defn.getProperty(FULL_TEXT_ENABLED),
+ defn.getProperty(COMPAT_MODE), defn.getProperty(INDEX_VERSION));
+ }
+
+ static IndexFormatVersion determineVersionForFreshIndex(NodeBuilder defnb){
+ return determineVersionForFreshIndex(defnb.getProperty(FULL_TEXT_ENABLED),
+ defnb.getProperty(COMPAT_MODE), defnb.getProperty(INDEX_VERSION));
+ }
+
+ private static IndexFormatVersion determineVersionForFreshIndex(PropertyState fulltext,
+ PropertyState compat,
+ PropertyState version){
+ if (compat != null){
+ return versionFrom(compat);
+ }
+
+ IndexFormatVersion defaultToUse = IndexFormatVersion.getDefault();
+ IndexFormatVersion existing = version != null ? versionFrom(version) : null;
+
+ //As per OAK-2290 current might be less than current used version. So
+ //set to current only if it is greater than existing
+
+ //Per setting use default configured
+ IndexFormatVersion result = defaultToUse;
+
+ //If default configured is lesser than existing then prefer existing
+ if (existing != null){
+ result = IndexFormatVersion.max(result,existing);
+ }
+
+ //Check if fulltext is false which indicates its a property index and
+ //hence confirm to V2 or above
+ if (fulltext != null && !fulltext.getValue(Type.BOOLEAN)){
+ return IndexFormatVersion.max(result,IndexFormatVersion.V2);
+ }
+
+ return result;
+ }
+
+ private static IndexFormatVersion versionFrom(PropertyState ps){
+ return IndexFormatVersion.getVersion(Ints.checkedCast(ps.getValue(Type.LONG)));
+ }
+
private static boolean hasIndexingRules(NodeState defn) {
return defn.getChildNode(LuceneIndexConstants.INDEX_RULES).exists();
}
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexFormatVersion.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexFormatVersion.java?rev=1642113&r1=1642112&r2=1642113&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexFormatVersion.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexFormatVersion.java Thu Nov 27 11:37:04 2014
@@ -59,8 +59,13 @@ public enum IndexFormatVersion {
}
}
- public static IndexFormatVersion getCurrent(){
- return V2;
+ public static IndexFormatVersion getDefault(){
+ //TODO FIXME Should be V2 or above once OAK-2290 is fixed
+ return V1;
+ }
+
+ public static IndexFormatVersion max(IndexFormatVersion o1, IndexFormatVersion o2){
+ return o1.version > o2.version ? o1 : o2;
}
}
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java?rev=1642113&r1=1642112&r2=1642113&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java Thu Nov 27 11:37:04 2014
@@ -153,8 +153,8 @@ public class LuceneIndexEditorContext {
public void enableReindexMode(){
reindex = true;
- definitionBuilder.setProperty(IndexDefinition.INDEX_VERSION,
- IndexFormatVersion.getCurrent().getVersion());
+ IndexFormatVersion version = IndexDefinition.determineVersionForFreshIndex(definitionBuilder);
+ definitionBuilder.setProperty(IndexDefinition.INDEX_VERSION, version.getVersion());
}
public long incIndexedNodes() {
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java?rev=1642113&r1=1642112&r2=1642113&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java Thu Nov 27 11:37:04 2014
@@ -363,7 +363,7 @@ public class IndexDefinitionTest {
"lucene", of(TYPENAME_STRING));
IndexDefinition defn = new IndexDefinition(root, defnb.getNodeState());
- assertEquals(IndexFormatVersion.getCurrent(), defn.getVersion());
+ assertEquals(IndexFormatVersion.getDefault(), defn.getVersion());
}
@Test
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java?rev=1642113&r1=1642112&r2=1642113&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java Thu Nov 27 11:37:04 2014
@@ -80,8 +80,9 @@ public class LuceneIndexEditorTest {
@Test
public void testLuceneWithFullText() throws Exception {
NodeBuilder index = builder.child(INDEX_DEFINITIONS_NAME);
- newLuceneIndexDefinition(index, "lucene",
+ NodeBuilder idxnb = newLuceneIndexDefinition(index, "lucene",
of(TYPENAME_STRING));
+ setCompatVersionToV2(idxnb);
NodeState before = builder.getNodeState();
builder.child("test").setProperty("foo", "fox is jumping");
@@ -277,7 +278,7 @@ public class LuceneIndexEditorTest {
builder.child(INDEX_DEFINITIONS_NAME).child("lucene").setProperty(IndexConstants.REINDEX_PROPERTY_NAME, true);
after = builder.getNodeState();
indexed = HOOK.processCommit(before, after, CommitInfo.EMPTY);
- assertEquals(IndexFormatVersion.getCurrent(), new IndexDefinition(root,
+ assertEquals(IndexFormatVersion.getDefault(), new IndexDefinition(root,
indexed.getChildNode(INDEX_DEFINITIONS_NAME).getChildNode("lucene")).getVersion());
}
@@ -387,4 +388,8 @@ public class LuceneIndexEditorTest {
static long dateToTime(String dt) throws java.text.ParseException {
return FieldFactory.dateToLong(ISO8601.format(createCal(dt)));
}
+
+ private static void setCompatVersionToV2(NodeBuilder idxNb) {
+ idxNb.setProperty(LuceneIndexConstants.COMPAT_MODE, IndexFormatVersion.V2.getVersion());
+ }
}