You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by up...@apache.org on 2021/03/16 18:55:09 UTC
[geode] 36/36: Add redis-region-size function. Make redis region
visible again
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 <jd...@vmware.com>
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;
+ }
+
+}