This is an automated email from the ASF dual-hosted git repository. boglesby pushed a commit to branch feature/GEODE-5534 in repository https://gitbox.apache.org/repos/asf/geode.git
commit 9c73847e73e5a0fe007c248c10629c648c70ffa6 Author: Barry Oglesby <[email protected]> AuthorDate: Tue Aug 7 10:09:03 2018 -0700 GEODE-5534: Forced index key to be a string when a compressed region contains PDX values --- .../index/AbstractIndexMaintenanceIntegrationTest.java | 16 ++++++++++++++++ .../geode/cache/query/internal/index/AbstractIndex.java | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/query/internal/index/AbstractIndexMaintenanceIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/query/internal/index/AbstractIndexMaintenanceIntegrationTest.java index ec1dd7d..9917dd1 100644 --- a/geode-core/src/integrationTest/java/org/apache/geode/cache/query/internal/index/AbstractIndexMaintenanceIntegrationTest.java +++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/query/internal/index/AbstractIndexMaintenanceIntegrationTest.java @@ -29,6 +29,7 @@ import org.apache.geode.cache.query.IndexNameConflictException; import org.apache.geode.cache.query.QueryService; import org.apache.geode.cache.query.RegionNotFoundException; import org.apache.geode.cache.query.data.PortfolioPdx; +import org.apache.geode.compression.SnappyCompressor; import org.apache.geode.internal.cache.LocalRegion; import org.apache.geode.internal.cache.RegionEntry; import org.apache.geode.pdx.internal.PdxString; @@ -82,6 +83,21 @@ public abstract class AbstractIndexMaintenanceIntegrationTest { } @Test + public void setPdxStringFlagWithAPdxStringOnACompressedRegionShouldBeFalse() throws Exception { + CacheUtils.startCache(); + Cache cache = CacheUtils.getCache(); + cache.createRegionFactory(RegionShortcut.REPLICATE).setCompressor(new SnappyCompressor()) + .create("portfolios"); + QueryService qs = cache.getQueryService(); + AbstractIndex statusIndex = + createIndex(qs, "statusIndex", "value.status", "/portfolios.entrySet()"); + + statusIndex.setPdxStringFlag(new PdxString("PdxString Key")); + assertTrue(statusIndex.isIndexedPdxKeysFlagSet); + assertFalse(statusIndex.isIndexOnPdxKeys()); + } + + @Test public void whenRemovingRegionEntryFromIndexIfEntryDestroyedIsThrownCorrectlyRemoveFromIndexAndNotThrowException() throws Exception { CacheUtils.startCache(); diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/AbstractIndex.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/AbstractIndex.java index 94ac8a8..82e5d80 100644 --- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/AbstractIndex.java +++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/AbstractIndex.java @@ -66,6 +66,7 @@ import org.apache.geode.internal.Assert; import org.apache.geode.internal.cache.BucketRegion; import org.apache.geode.internal.cache.CachedDeserializable; import org.apache.geode.internal.cache.InternalCache; +import org.apache.geode.internal.cache.InternalRegion; import org.apache.geode.internal.cache.LocalRegion; import org.apache.geode.internal.cache.PartitionedRegion; import org.apache.geode.internal.cache.RegionEntry; @@ -2013,7 +2014,7 @@ public abstract class AbstractIndex implements IndexProtocol { return; } if (!this.isIndexedPdxKeys) { - if (key instanceof PdxString) { + if (key instanceof PdxString && ((InternalRegion) this.region).getCompressor() == null) { this.isIndexedPdxKeys = true; } }
