This is an automated email from the ASF dual-hosted git repository. upthewaterspout pushed a commit to branch feature/redis-performance-testing in repository https://gitbox.apache.org/repos/asf/geode.git
commit 879a5447a090519258254accd1ff4a4edb8cd0d3 Author: Jens Deppe <[email protected]> AuthorDate: Tue Mar 16 07:37:10 2021 -0700 Add redis-region-size function. Make redis region visible again --- geode-core/build.gradle | 1 + .../geode/redis/internal/GeodeRedisServer.java | 2 + .../geode/redis/internal/RegionProvider.java | 4 +- .../redis/internal/cluster/RedisRegionSizer.java | 56 ++++++++++++++++++++++ 4 files changed, 61 insertions(+), 2 deletions(-) diff --git a/geode-core/build.gradle b/geode-core/build.gradle index 4f762ee..dc8749a 100755 --- a/geode-core/build.gradle +++ b/geode-core/build.gradle @@ -112,6 +112,7 @@ jar { inputs.property("moduleName", moduleName) manifest { attributes('Automatic-Module-Name': moduleName) + attributes('Premain-Class': 'org.apache.geode.internal.size.InstrumentationSingleObjectSizer') } } diff --git a/geode-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisServer.java b/geode-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisServer.java index 4699e1c..038e934 100644 --- a/geode-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisServer.java +++ b/geode-redis/src/main/java/org/apache/geode/redis/internal/GeodeRedisServer.java @@ -28,6 +28,7 @@ import org.apache.geode.internal.statistics.StatisticsClockFactory; import org.apache.geode.logging.internal.executors.LoggingExecutors; import org.apache.geode.logging.internal.log4j.api.LogService; import org.apache.geode.redis.internal.cluster.BucketRetrievalFunction; +import org.apache.geode.redis.internal.cluster.RedisRegionSizer; import org.apache.geode.redis.internal.cluster.ShowSecondaryBucketsFunction; import org.apache.geode.redis.internal.executor.CommandFunction; import org.apache.geode.redis.internal.executor.StripedExecutor; @@ -107,6 +108,7 @@ public class GeodeRedisServer { BucketRetrievalFunction.register(bindAddress, nettyRedisServer.getPort()); ShowSecondaryBucketsFunction.register(); + RedisRegionSizer.register(); } @VisibleForTesting diff --git a/geode-redis/src/main/java/org/apache/geode/redis/internal/RegionProvider.java b/geode-redis/src/main/java/org/apache/geode/redis/internal/RegionProvider.java index 97509d8..87383dd 100644 --- a/geode-redis/src/main/java/org/apache/geode/redis/internal/RegionProvider.java +++ b/geode-redis/src/main/java/org/apache/geode/redis/internal/RegionProvider.java @@ -27,7 +27,7 @@ public class RegionProvider { /** * The name of the region that holds data stored in redis. */ - public static final String REDIS_DATA_REGION = "__REDIS_DATA"; + public static final String REDIS_DATA_REGION = "REDIS_DATA"; public static final String REDIS_CONFIG_REGION = "__REDIS_CONFIG"; public static final int REDIS_REGION_BUCKETS = Integer.getInteger("redis.region.buckets", 128); public static final int REDIS_SLOTS = Integer.getInteger("redis.slots", 16384); @@ -40,7 +40,7 @@ public class RegionProvider { InternalRegionFactory<RedisKey, RedisData> redisDataRegionFactory = cache.createInternalRegionFactory(RegionShortcut.PARTITION_REDUNDANT); - redisDataRegionFactory.setInternalRegion(true).setIsUsedForMetaRegion(true); + // redisDataRegionFactory.setInternalRegion(true).setIsUsedForMetaRegion(true); PartitionAttributesFactory<RedisKey, RedisData> attributesFactory = new PartitionAttributesFactory<>(); diff --git a/geode-redis/src/main/java/org/apache/geode/redis/internal/cluster/RedisRegionSizer.java b/geode-redis/src/main/java/org/apache/geode/redis/internal/cluster/RedisRegionSizer.java new file mode 100644 index 0000000..927077d --- /dev/null +++ b/geode-redis/src/main/java/org/apache/geode/redis/internal/cluster/RedisRegionSizer.java @@ -0,0 +1,56 @@ +/* + * 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.redis.internal.cluster; + +import org.apache.geode.cache.Region; +import org.apache.geode.cache.execute.Function; +import org.apache.geode.cache.execute.FunctionContext; +import org.apache.geode.cache.execute.FunctionException; +import org.apache.geode.cache.execute.FunctionService; +import org.apache.geode.internal.size.ObjectGraphSizer; +import org.apache.geode.redis.internal.RegionProvider; +import org.apache.geode.redis.internal.data.RedisData; +import org.apache.geode.redis.internal.data.RedisKey; + +public class RedisRegionSizer implements Function<Void> { + + private static final String REDIS_REGION_SIZER_ID = "redis-region-size"; + + public static void register() { + FunctionService.registerFunction(new RedisRegionSizer()); + } + + @Override + public void execute(FunctionContext<Void> context) { + Region<RedisKey, RedisData> region = + context.getCache().getRegion(RegionProvider.REDIS_DATA_REGION); + + long size; + try { + size = ObjectGraphSizer.size(region); + } catch (IllegalAccessException e) { + throw new FunctionException(e); + } + + context.getResultSender().lastResult(size); + } + + @Override + public String getId() { + return REDIS_REGION_SIZER_ID; + } + +}
