You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by zh...@apache.org on 2017/09/15 22:33:03 UTC

[geode] branch feature/GEODE-3569 created (now 5d524a7)

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

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


      at 5d524a7  GEODE-3569: save the serializer class name into LuceneIndexCreationProfile and compare between members when creating index

This branch includes the following new commits:

     new 5d524a7  GEODE-3569: save the serializer class name into LuceneIndexCreationProfile and compare between members when creating index

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].

[geode] 01/01: GEODE-3569: save the serializer class name into LuceneIndexCreationProfile and compare between members when creating index

Posted by zh...@apache.org.
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 <gz...@pivotal.io>
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
"commits@geode.apache.org" <co...@geode.apache.org>.