This is an automated email from the ASF dual-hosted git repository.

zhouxj pushed a commit to branch feature/GEODE-3569
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 5d524a7e80d8facbdd35021b35bd1a74259eb4aa
Author: zhouxh <[email protected]>
AuthorDate: Fri Sep 15 15:30:06 2017 -0700

    GEODE-3569: save the serializer class name into LuceneIndexCreationProfile
    and compare between members when creating index
---
 .../geode/internal/i18n/LocalizedStrings.java      |  3 ++
 .../internal/LuceneIndexCreationProfile.java       | 22 +++++++++++++-
 .../lucene/internal/LuceneRegionListener.java      |  2 +-
 .../cache/lucene/internal/LuceneServiceImpl.java   |  4 +--
 .../geode/cache/lucene/DummyLuceneSerializer.java  | 29 ++++++++++++++++++
 .../LuceneIndexCreationProfileJUnitTest.java       | 34 ++++++++++++++++++----
 .../cache/lucene/test/LuceneTestUtilities.java     |  4 +++
 7 files changed, 88 insertions(+), 10 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/i18n/LocalizedStrings.java 
b/geode-core/src/main/java/org/apache/geode/internal/i18n/LocalizedStrings.java
index 3a32db8..777797b 100755
--- 
a/geode-core/src/main/java/org/apache/geode/internal/i18n/LocalizedStrings.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/i18n/LocalizedStrings.java
@@ -7611,6 +7611,9 @@ public class LocalizedStrings {
   public static final StringId 
LuceneService_CANNOT_CREATE_INDEX_0_ON_REGION_1_WITH_ANALYZER_2_ON_FIELD_3_BECAUSE_ANOTHER_MEMBER_DEFINES_THE_SAME_INDEX_WITH_ANALYZER_4_ON_THAT_FIELD
 =
       new StringId(6631,
           "Cannot create Lucene index {0} on region {1} with analyzer {2} on 
field {3} because another member defines the same index with analyzer {4} on 
that field.");
+  public static final StringId 
LuceneService_CANNOT_CREATE_INDEX_0_ON_REGION_1_WITH_SERIALIZER_2_BECAUSE_ANOTHER_MEMBER_DEFINES_THE_SAME_INDEX_WITH_DIFFERENT_SERIALIZER_3
 =
+      new StringId(6632,
+          "Cannot create Lucene index {0} on region {1} with Serializer {2} 
because another member defines the same index with different serializer {3}.");
 
   public static final StringId AbstractDistributionConfig_CLUSTER_SSL_ALIAS_0 
= new StringId(6633,
       "SSL communication uses the this alias when determining the key to use 
from the keystore for SSL. Defaults to \"{0}\".");
diff --git 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationProfile.java
 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationProfile.java
index 28d84e5..c42e2a0 100644
--- 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationProfile.java
+++ 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationProfile.java
@@ -16,6 +16,8 @@ package org.apache.geode.cache.lucene.internal;
 
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
+import org.apache.geode.cache.lucene.LuceneSerializer;
+import 
org.apache.geode.cache.lucene.internal.repository.serializer.HeterogeneousLuceneSerializer;
 import org.apache.geode.internal.cache.CacheServiceProfile;
 import org.apache.geode.internal.i18n.LocalizedStrings;
 import org.apache.lucene.analysis.Analyzer;
@@ -36,18 +38,25 @@ public class LuceneIndexCreationProfile implements 
CacheServiceProfile, DataSeri
 
   private Map<String, String> fieldAnalyzers;
 
+  private String serializerClass;
+
   private String regionPath;
 
   /* Used by DataSerializer */
   public LuceneIndexCreationProfile() {}
 
   public LuceneIndexCreationProfile(String indexName, String regionPath, 
String[] fieldNames,
-      Analyzer analyzer, Map<String, Analyzer> fieldAnalyzers) {
+      Analyzer analyzer, Map<String, Analyzer> fieldAnalyzers, 
LuceneSerializer serializer) {
     this.indexName = indexName;
     this.regionPath = regionPath;
     this.fieldNames = fieldNames;
     this.analyzerClass = analyzer.getClass().getSimpleName();
     initializeFieldAnalyzers(fieldAnalyzers);
+    if (serializer == null) {
+      this.serializerClass = 
HeterogeneousLuceneSerializer.class.getSimpleName();
+    } else {
+      this.serializerClass = serializer.getClass().getSimpleName();
+    }
   }
 
   public String getIndexName() {
@@ -66,6 +75,10 @@ public class LuceneIndexCreationProfile implements 
CacheServiceProfile, DataSeri
     return this.fieldAnalyzers;
   }
 
+  public String getSerializerClass() {
+    return this.serializerClass;
+  }
+
   protected void initializeFieldAnalyzers(Map<String, Analyzer> 
fieldAnalyzers) {
     this.fieldAnalyzers = new HashMap<>();
     for (String field : fieldNames) {
@@ -129,6 +142,13 @@ public class LuceneIndexCreationProfile implements 
CacheServiceProfile, DataSeri
         }
       }
     }
+
+    if (!getSerializerClass().equals(remoteProfile.getSerializerClass())) {
+      return 
LocalizedStrings.LuceneService_CANNOT_CREATE_INDEX_0_ON_REGION_1_WITH_SERIALIZER_2_BECAUSE_ANOTHER_MEMBER_DEFINES_THE_SAME_INDEX_WITH_DIFFERENT_SERIALIZER_3
+          .toString(getIndexName(), regionPath, getSerializerClass(),
+              remoteProfile.getSerializerClass());
+    }
+
     return result;
   }
 
diff --git 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRegionListener.java
 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRegionListener.java
index 8866249..8632fca 100644
--- 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRegionListener.java
+++ 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneRegionListener.java
@@ -103,7 +103,7 @@ public class LuceneRegionListener implements RegionListener 
{
 
       // Add index creation profile
       internalRegionArgs.addCacheServiceProfile(new 
LuceneIndexCreationProfile(this.indexName,
-          this.regionPath, this.fields, this.analyzer, this.fieldAnalyzers));
+          this.regionPath, this.fields, this.analyzer, this.fieldAnalyzers, 
null));
 
       luceneIndex = this.service.beforeDataRegionCreated(this.indexName, 
this.regionPath, attrs,
           this.analyzer, this.fieldAnalyzers, aeqId, serializer, this.fields);
diff --git 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
index 60e196c..6af9a07 100644
--- 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
+++ 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
@@ -206,8 +206,8 @@ public class LuceneServiceImpl implements 
InternalLuceneService {
       regionPath = "/" + regionPath;
     }
 
-    registerDefinedIndex(indexName, regionPath,
-        new LuceneIndexCreationProfile(indexName, regionPath, fields, 
analyzer, fieldAnalyzers));
+    registerDefinedIndex(indexName, regionPath, new 
LuceneIndexCreationProfile(indexName,
+        regionPath, fields, analyzer, fieldAnalyzers, serializer));
 
     Region region = cache.getRegion(regionPath);
     if (region != null) {
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/DummyLuceneSerializer.java
 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/DummyLuceneSerializer.java
new file mode 100644
index 0000000..2a31768
--- /dev/null
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/DummyLuceneSerializer.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+package org.apache.geode.cache.lucene;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.apache.lucene.document.Document;
+
+public class DummyLuceneSerializer implements LuceneSerializer {
+
+  @Override
+  public Collection<Document> toDocuments(Object value) {
+    return Collections.emptyList();
+  }
+
+}
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationProfileJUnitTest.java
 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationProfileJUnitTest.java
index b378ca5..926d74b 100644
--- 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationProfileJUnitTest.java
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneIndexCreationProfileJUnitTest.java
@@ -15,6 +15,9 @@
 package org.apache.geode.cache.lucene.internal;
 
 import org.apache.geode.CopyHelper;
+import org.apache.geode.cache.lucene.DummyLuceneSerializer;
+import org.apache.geode.cache.lucene.LuceneSerializer;
+import 
org.apache.geode.cache.lucene.internal.repository.serializer.HeterogeneousLuceneSerializer;
 import org.apache.geode.cache.lucene.test.LuceneTestUtilities;
 import org.apache.geode.test.junit.categories.UnitTest;
 import junitparams.JUnitParamsRunner;
@@ -80,19 +83,38 @@ public class LuceneIndexCreationProfileJUnitTest {
         new Object[] {getNullField2AnalyzerLuceneIndexCreationProfile(),
             getNullField1AnalyzerLuceneIndexCreationProfile(),
             CANNOT_CREATE_LUCENE_INDEX_DIFFERENT_ANALYZERS_1},
+        new Object[] {getDefaultSerializerCreationProfile(), 
getDummySerializerCreationProfile(),
+            CANNOT_CREATE_LUCENE_INDEX_DIFFERENT_SERIALIZER},
+        new Object[] {getDefaultSerializerCreationProfile(),
+            getHeterogeneousLuceneSerializerCreationProfile(), null},
         new Object[] {getNullField1AnalyzerLuceneIndexCreationProfile(),
             getNullField2AnalyzerLuceneIndexCreationProfile(),
             
LuceneTestUtilities.CANNOT_CREATE_LUCENE_INDEX_DIFFERENT_ANALYZERS_2});
   }
 
+  private LuceneIndexCreationProfile getDefaultSerializerCreationProfile() {
+    return new LuceneIndexCreationProfile(INDEX_NAME, REGION_NAME, new 
String[] {"field1"},
+        new StandardAnalyzer(), null, null);
+  }
+
+  private LuceneIndexCreationProfile getDummySerializerCreationProfile() {
+    return new LuceneIndexCreationProfile(INDEX_NAME, REGION_NAME, new 
String[] {"field1"},
+        new StandardAnalyzer(), null, new DummyLuceneSerializer());
+  }
+
+  private LuceneIndexCreationProfile 
getHeterogeneousLuceneSerializerCreationProfile() {
+    return new LuceneIndexCreationProfile(INDEX_NAME, REGION_NAME, new 
String[] {"field1"},
+        new StandardAnalyzer(), null, new HeterogeneousLuceneSerializer(new 
String[] {"field1"}));
+  }
+
   private LuceneIndexCreationProfile getOneFieldLuceneIndexCreationProfile() {
     return new LuceneIndexCreationProfile(INDEX_NAME, REGION_NAME, new 
String[] {"field1"},
-        new StandardAnalyzer(), null);
+        new StandardAnalyzer(), null, null);
   }
 
   private LuceneIndexCreationProfile getTwoFieldLuceneIndexCreationProfile() {
     return new LuceneIndexCreationProfile(INDEX_NAME, REGION_NAME,
-        new String[] {"field1", "field2"}, new StandardAnalyzer(), null);
+        new String[] {"field1", "field2"}, new StandardAnalyzer(), null, null);
   }
 
   private LuceneIndexCreationProfile 
getOneAnalyzerLuceneIndexCreationProfile(Analyzer analyzer) {
@@ -100,7 +122,7 @@ public class LuceneIndexCreationProfileJUnitTest {
     fieldAnalyzers.put("field1", analyzer);
     return new LuceneIndexCreationProfile(INDEX_NAME, REGION_NAME,
         new String[] {"field1", "field2"}, 
getPerFieldAnalyzerWrapper(fieldAnalyzers),
-        fieldAnalyzers);
+        fieldAnalyzers, null);
   }
 
   private LuceneIndexCreationProfile 
getTwoAnalyzersLuceneIndexCreationProfile() {
@@ -109,7 +131,7 @@ public class LuceneIndexCreationProfileJUnitTest {
     fieldAnalyzers.put("field2", new KeywordAnalyzer());
     return new LuceneIndexCreationProfile(INDEX_NAME, REGION_NAME,
         new String[] {"field1", "field2"}, 
getPerFieldAnalyzerWrapper(fieldAnalyzers),
-        fieldAnalyzers);
+        fieldAnalyzers, null);
   }
 
   private LuceneIndexCreationProfile 
getNullField1AnalyzerLuceneIndexCreationProfile() {
@@ -118,7 +140,7 @@ public class LuceneIndexCreationProfileJUnitTest {
     fieldAnalyzers.put("field2", new KeywordAnalyzer());
     return new LuceneIndexCreationProfile(INDEX_NAME, REGION_NAME,
         new String[] {"field1", "field2"}, 
getPerFieldAnalyzerWrapper(fieldAnalyzers),
-        fieldAnalyzers);
+        fieldAnalyzers, null);
   }
 
   private LuceneIndexCreationProfile 
getNullField2AnalyzerLuceneIndexCreationProfile() {
@@ -127,7 +149,7 @@ public class LuceneIndexCreationProfileJUnitTest {
     fieldAnalyzers.put("field2", null);
     return new LuceneIndexCreationProfile(INDEX_NAME, REGION_NAME,
         new String[] {"field1", "field2"}, 
getPerFieldAnalyzerWrapper(fieldAnalyzers),
-        fieldAnalyzers);
+        fieldAnalyzers, null);
   }
 
   private Analyzer getPerFieldAnalyzerWrapper(Map<String, Analyzer> 
fieldAnalyzers) {
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/test/LuceneTestUtilities.java
 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/test/LuceneTestUtilities.java
index 17f4dea..3d9e9a6 100644
--- 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/test/LuceneTestUtilities.java
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/test/LuceneTestUtilities.java
@@ -79,6 +79,10 @@ public class LuceneTestUtilities {
       "Cannot create Lucene index index2 on region /region because it is not 
defined in another member.";
   public static final String CANNOT_CREATE_LUCENE_INDEX_DIFFERENT_INDEXES_3 =
       "Cannot create Lucene index index on region /region because it is not 
defined in another member.";
+  public static final String CANNOT_CREATE_LUCENE_INDEX_DIFFERENT_SERIALIZER =
+      "Cannot create Lucene index index on region /region with Serializer 
DummyLuceneSerializer because another member defines the same index with 
different serializer HeterogeneousLuceneSerializer.";
+  public static final String SERIALIZER_MATCHED =
+      "Serializer matched when creating Lucene index index on region /region.";
 
   public static String Quarter1 = "Q1";
   public static String Quarter2 = "Q2";

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to