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;
+  }
+
+}