You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bo...@apache.org on 2017/05/31 23:26:49 UTC
geode git commit: GEODE-2947: Error message is now specific to lucene
indexes
Repository: geode
Updated Branches:
refs/heads/develop d1ec508ee -> 5f4a7a905
GEODE-2947: Error message is now specific to lucene indexes
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/5f4a7a90
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/5f4a7a90
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/5f4a7a90
Branch: refs/heads/develop
Commit: 5f4a7a905013dfa8f76f7419ea71aacae3614077
Parents: d1ec508
Author: Barry Oglesby <bo...@pivotal.io>
Authored: Thu May 25 17:13:35 2017 -0700
Committer: Barry Oglesby <bo...@pivotal.io>
Committed: Wed May 31 16:22:32 2017 -0700
----------------------------------------------------------------------
.../geode/internal/cache/GemFireCacheImpl.java | 5 ++++
.../geode/internal/cache/InternalCache.java | 2 ++
.../geode/internal/cache/LocalRegion.java | 8 ++++++
.../geode/internal/cache/PartitionedRegion.java | 1 +
.../geode/internal/cache/RegionService.java | 30 ++++++++++++++++++++
.../internal/cache/xmlcache/CacheCreation.java | 5 ++++
.../geode/internal/i18n/LocalizedStrings.java | 3 ++
.../lucene/internal/InternalLuceneService.java | 4 +--
.../lucene/internal/LuceneServiceImpl.java | 22 ++++++++++++++
.../lucene/LuceneIndexDestroyDUnitTest.java | 18 ++++++++++--
10 files changed, 93 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/5f4a7a90/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index c813a80..5e35224 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -3670,6 +3670,11 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
return clazz.cast(this.services.get(clazz));
}
+ @Override
+ public Collection<CacheService> getServices() {
+ return Collections.unmodifiableCollection(this.services.values());
+ }
+
/**
* Creates the single instance of the Transaction Manager for this cache. Returns the existing one
* upon request.
http://git-wip-us.apache.org/repos/asf/geode/blob/5f4a7a90/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCache.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCache.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCache.java
index 5533ed1..d9a34e1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCache.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCache.java
@@ -84,6 +84,8 @@ public interface InternalCache extends Cache, Extensible<Cache>, CacheTime {
<T extends CacheService> T getService(Class<T> clazz);
+ Collection<CacheService> getServices();
+
SystemTimer getCCPTimer();
void cleanupForClient(CacheClientNotifier ccn, ClientProxyMembershipID client);
http://git-wip-us.apache.org/repos/asf/geode/blob/5f4a7a90/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 f581856..e1fe6c7 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
@@ -1139,6 +1139,14 @@ public class LocalRegion extends AbstractRegion implements LoaderHelperFactory,
basicDestroyRegion(event, true);
}
+ protected void invokeBeforeRegionDestroyInServices() {
+ for (CacheService service : this.cache.getServices()) {
+ if (service instanceof RegionService) {
+ ((RegionService) service).beforeRegionDestroyed(this);
+ }
+ }
+ }
+
public InternalDataView getDataView() {
final TXStateInterface tx = getTXState();
if (tx == null) {
http://git-wip-us.apache.org/repos/asf/geode/blob/5f4a7a90/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
index 02d04b3..288f4a9 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
@@ -7057,6 +7057,7 @@ public class PartitionedRegion extends LocalRegion
@Override
public void destroyRegion(Object aCallbackArgument)
throws CacheWriterException, TimeoutException {
+ invokeBeforeRegionDestroyInServices();
checkForColocatedChildren();
getDataView().checkSupportsRegionDestroy();
checkForLimitedOrNoAccess();
http://git-wip-us.apache.org/repos/asf/geode/blob/5f4a7a90/geode-core/src/main/java/org/apache/geode/internal/cache/RegionService.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionService.java b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionService.java
new file mode 100644
index 0000000..3d6488d
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionService.java
@@ -0,0 +1,30 @@
+/*
+ * 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.internal.cache;
+
+import org.apache.geode.cache.Region;
+
+/**
+ * Interface for a service that is linked to a region.
+ */
+public interface RegionService extends CacheService {
+
+ /**
+ * Called before a region is destroyed.
+ *
+ * @param region The region being destroyed
+ */
+ public void beforeRegionDestroyed(Region region);
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/5f4a7a90/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
index 7f623c7..f99f9db 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
@@ -1959,6 +1959,11 @@ public class CacheCreation implements InternalCache {
}
@Override
+ public Collection<CacheService> getServices() {
+ throw new UnsupportedOperationException(LocalizedStrings.SHOULDNT_INVOKE.toLocalizedString());
+ }
+
+ @Override
public SystemTimer getCCPTimer() {
throw new UnsupportedOperationException(LocalizedStrings.SHOULDNT_INVOKE.toLocalizedString());
}
http://git-wip-us.apache.org/repos/asf/geode/blob/5f4a7a90/geode-core/src/main/java/org/apache/geode/internal/i18n/LocalizedStrings.java
----------------------------------------------------------------------
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 f19c4e7..67867fb 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
@@ -7695,6 +7695,9 @@ public class LocalizedStrings {
public static final StringId StringQueryProvider_PARSING_QUERY_0_FAILED_DUE_TO_1 =
new StringId(6659, "Parsing query {0} failed due to: {1}");
+ public static final StringId LuceneServiceImpl_REGION_0_CANNOT_BE_DESTROYED = new StringId(6660,
+ "Region {0} cannot be destroyed because it defines Lucene index(es) [{1}]. Destroy all Lucene indexes before destroying the region.");
+
/** Testing strings, messageId 90000-99999 **/
/**
http://git-wip-us.apache.org/repos/asf/geode/blob/5f4a7a90/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/InternalLuceneService.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/InternalLuceneService.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/InternalLuceneService.java
index 9e1e244..3c27d80 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/InternalLuceneService.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/InternalLuceneService.java
@@ -17,9 +17,9 @@ package org.apache.geode.cache.lucene.internal;
import org.apache.geode.cache.Cache;
import org.apache.geode.cache.lucene.LuceneService;
-import org.apache.geode.internal.cache.CacheService;
+import org.apache.geode.internal.cache.RegionService;
import org.apache.geode.internal.cache.extension.Extension;
-public interface InternalLuceneService extends LuceneService, Extension<Cache>, CacheService {
+public interface InternalLuceneService extends LuceneService, Extension<Cache>, RegionService {
}
http://git-wip-us.apache.org/repos/asf/geode/blob/5f4a7a90/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
----------------------------------------------------------------------
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 23b6925..c263884 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
@@ -19,6 +19,7 @@ import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import org.apache.geode.cache.lucene.LuceneIndexExistsException;
import org.apache.geode.cache.lucene.internal.distributed.LuceneQueryFunction;
@@ -115,6 +116,17 @@ public class LuceneServiceImpl implements InternalLuceneService {
return InternalLuceneService.class;
}
+ @Override
+ public void beforeRegionDestroyed(Region region) {
+ List<LuceneIndex> indexes = getIndexes(region.getFullPath());
+ if (!indexes.isEmpty()) {
+ String indexNames = indexes.stream().map(i -> i.getName()).collect(Collectors.joining(","));
+ throw new IllegalStateException(
+ LocalizedStrings.LuceneServiceImpl_REGION_0_CANNOT_BE_DESTROYED
+ .toLocalizedString(region.getFullPath(), indexNames));
+ }
+ }
+
public static String getUniqueIndexName(String indexName, String regionPath) {
if (!regionPath.startsWith("/")) {
regionPath = "/" + regionPath;
@@ -252,6 +264,16 @@ public class LuceneServiceImpl implements InternalLuceneService {
return indexMap.values();
}
+ public List<LuceneIndex> getIndexes(String regionPath) {
+ List<LuceneIndex> indexes = new ArrayList();
+ for (LuceneIndex index : getAllIndexes()) {
+ if (index.getRegionPath().equals(regionPath)) {
+ indexes.add(index);
+ }
+ }
+ return Collections.unmodifiableList(indexes);
+ }
+
@Override
public void destroyIndex(String indexName, String regionPath) {
destroyIndex(indexName, regionPath, true);
http://git-wip-us.apache.org/repos/asf/geode/blob/5f4a7a90/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexDestroyDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexDestroyDUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexDestroyDUnitTest.java
index b34d998..a93a4e7 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexDestroyDUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexDestroyDUnitTest.java
@@ -24,6 +24,7 @@ import org.apache.geode.cache.lucene.test.TestObject;
import org.apache.geode.cache.snapshot.RegionSnapshotService;
import org.apache.geode.cache.snapshot.SnapshotOptions;
import org.apache.geode.internal.cache.LocalRegion;
+import org.apache.geode.internal.i18n.LocalizedStrings;
import org.apache.geode.test.dunit.AsyncInvocation;
import org.apache.geode.test.dunit.Host;
import org.apache.geode.test.dunit.IgnoredException;
@@ -92,7 +93,7 @@ public class LuceneIndexDestroyDUnitTest extends LuceneDUnitTest {
// Attempt to destroy data region (should fail)
if (destroyDataRegion) {
- dataStore1.invoke(() -> destroyDataRegion(false));
+ dataStore1.invoke(() -> destroyDataRegion(false, INDEX_NAME));
}
// Destroy index (only needs to be done on one member)
@@ -121,7 +122,7 @@ public class LuceneIndexDestroyDUnitTest extends LuceneDUnitTest {
// Attempt to destroy data region (should fail)
if (destroyDataRegion) {
- dataStore1.invoke(() -> destroyDataRegion(false));
+ dataStore1.invoke(() -> destroyDataRegion(false, INDEX1_NAME, INDEX2_NAME));
}
// Destroy indexes (only needs to be done on one member)
@@ -602,7 +603,7 @@ public class LuceneIndexDestroyDUnitTest extends LuceneDUnitTest {
assertEquals(expectedResultsSize, results.size());
}
- private void destroyDataRegion(boolean shouldSucceed) {
+ private void destroyDataRegion(boolean shouldSucceed, String... indexNames) {
Region region = getCache().getRegion(REGION_NAME);
assertNotNull(region);
try {
@@ -613,6 +614,17 @@ public class LuceneIndexDestroyDUnitTest extends LuceneDUnitTest {
} catch (IllegalStateException e) {
if (shouldSucceed) {
fail(e);
+ } else {
+ // Verify the correct exception is thrown
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < indexNames.length; i++) {
+ builder.append(indexNames[i]);
+ if (i + 1 != indexNames.length) {
+ builder.append(',');
+ }
+ }
+ assertEquals(LocalizedStrings.LuceneServiceImpl_REGION_0_CANNOT_BE_DESTROYED
+ .toLocalizedString(region.getFullPath(), builder.toString()), e.getLocalizedMessage());
}
}
}