GEODE-2278: Fix an NPE with inconsistent lucene indexes

If a member without a lucene index is created first, we should throw a
reasonable error rather than an NPE.


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/262e6ee1
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/262e6ee1
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/262e6ee1

Branch: refs/heads/develop
Commit: 262e6ee1c13df60c38ec373247a4b212f40440f7
Parents: 041a82f
Author: Dan Smith <upthewatersp...@apache.org>
Authored: Thu Jan 5 17:44:35 2017 -0800
Committer: Dan Smith <upthewatersp...@apache.org>
Committed: Mon Jan 9 17:28:24 2017 -0800

----------------------------------------------------------------------
 .../org/apache/geode/internal/cache/LocalRegion.java    |  5 +++--
 .../cache/lucene/LuceneIndexCreationDUnitTest.java      | 12 ++++++++++++
 .../geode/cache/lucene/test/LuceneTestUtilities.java    |  2 ++
 3 files changed, 17 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/262e6ee1/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java 
b/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
index 1343395..00401e9 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
@@ -621,8 +621,9 @@ public class LocalRegion extends AbstractRegion implements 
LoaderHelperFactory,
     this.isUsedForParallelGatewaySenderQueue =
         internalRegionArgs.isUsedForParallelGatewaySenderQueue();
     this.serialGatewaySender = internalRegionArgs.getSerialGatewaySender();
-    this.cacheServiceProfiles = internalRegionArgs.getCacheServiceProfiles() 
== null ? null
-        : 
Collections.unmodifiableMap(internalRegionArgs.getCacheServiceProfiles());
+    this.cacheServiceProfiles =
+        internalRegionArgs.getCacheServiceProfiles() == null ? 
Collections.emptyMap()
+            : 
Collections.unmodifiableMap(internalRegionArgs.getCacheServiceProfiles());
 
     if (!isUsedForMetaRegion && !isUsedForPartitionedRegionAdmin
         && !isUsedForPartitionedRegionBucket && 
!isUsedForSerialGatewaySenderQueue

http://git-wip-us.apache.org/repos/asf/geode/blob/262e6ee1/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationDUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationDUnitTest.java
 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationDUnitTest.java
index 7e50636..e58f713 100644
--- 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationDUnitTest.java
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexCreationDUnitTest.java
@@ -194,6 +194,7 @@ public class LuceneIndexCreationDUnitTest extends 
LuceneDUnitTest {
         .invoke(() -> initDataStore(createIndex2, 
CANNOT_CREATE_LUCENE_INDEX_DIFFERENT_INDEXES_1));
   }
 
+
   @Test
   public void verifyDifferentIndexesFails2() {
     SerializableRunnableIF createIndex1 = getFieldsIndexWithOneField();
@@ -209,6 +210,17 @@ public class LuceneIndexCreationDUnitTest extends 
LuceneDUnitTest {
   }
 
   @Test
+  public void verifyMemberWithoutIndexCreatedFirstFails() {
+    SerializableRunnableIF createIndex1 = () -> {
+      /* Do nothing */};
+    dataStore1.invoke(() -> initDataStore(createIndex1));
+
+    SerializableRunnableIF createIndex2 = getFieldsIndexWithOneField();
+    dataStore2
+        .invoke(() -> initDataStore(createIndex2, 
CANNOT_CREATE_LUCENE_INDEX_DIFFERENT_INDEXES_3));
+  }
+
+  @Test
   @Parameters(method = "getIndexes")
   public void verifySameIndexesSucceeds(SerializableRunnableIF createIndex) {
     dataStore1.invoke(() -> initDataStore(createIndex));

http://git-wip-us.apache.org/repos/asf/geode/blob/262e6ee1/geode-lucene/src/test/java/org/apache/geode/cache/lucene/test/LuceneTestUtilities.java
----------------------------------------------------------------------
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 cb28e88..d8816a3 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
@@ -61,6 +61,8 @@ public class LuceneTestUtilities {
       "Cannot create Region /region with [] async event ids because another 
cache has the same region defined with [index#_region] async event ids";
   public static final String CANNOT_CREATE_LUCENE_INDEX_DIFFERENT_INDEXES_2 =
       "Cannot create Region /region with [index#_region, index2#_region] async 
event ids because another cache has the same region defined with 
[index#_region] async event ids";
+  public static final String CANNOT_CREATE_LUCENE_INDEX_DIFFERENT_INDEXES_3 =
+      "Cannot create Region /region with [index#_region] async event ids 
because another cache has the same region defined with [] async event ids";
 
   public static void verifyInternalRegions(LuceneService luceneService, Cache 
cache,
       Consumer<LocalRegion> verify) {

Reply via email to