You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by js...@apache.org on 2017/05/11 16:52:36 UTC

geode git commit: GEODE-2883: Fix GFSH gc heap size output

Repository: geode
Updated Branches:
  refs/heads/develop 61f676b01 -> 68935caea


GEODE-2883: Fix GFSH gc heap size output


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/68935cae
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/68935cae
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/68935cae

Branch: refs/heads/develop
Commit: 68935caea1d158375d6bf94c73c8f685eda01211
Parents: 61f676b
Author: Jared Stewart <js...@pivotal.io>
Authored: Mon May 8 10:28:21 2017 -0700
Committer: Jared Stewart <js...@pivotal.io>
Committed: Thu May 11 09:50:51 2017 -0700

----------------------------------------------------------------------
 .../functions/GarbageCollectionFunction.java    |  35 ++----
 .../internal/cli/util/BytesToString.java        |  50 ++++++++
 .../internal/cli/util/BytesToStringTest.java    | 115 +++++++++++++++++++
 3 files changed, 176 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/68935cae/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction.java
index 354d353..46588eb 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction.java
@@ -23,6 +23,7 @@ import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.management.internal.cli.CliUtil;
+import org.apache.geode.management.internal.cli.util.BytesToString;
 
 /**
  * 
@@ -34,37 +35,34 @@ import org.apache.geode.management.internal.cli.CliUtil;
 public class GarbageCollectionFunction implements Function, InternalEntity {
   public static final String ID = GarbageCollectionFunction.class.getName();
 
-
   private static final long serialVersionUID = 1L;
 
   @Override
   public void execute(FunctionContext context) {
-    StringBuilder str1 = new StringBuilder();
+    BytesToString bytesToString = new BytesToString();
+
     Map<String, String> resultMap = null;
     try {
       Cache cache = CacheFactory.getAnyInstance();
       DistributedMember member = cache.getDistributedSystem().getDistributedMember();
-      long freeMemoeryBeforeGC = Runtime.getRuntime().freeMemory();
+      long freeMemoryBeforeGC = Runtime.getRuntime().freeMemory();
       long totalMemoryBeforeGC = Runtime.getRuntime().totalMemory();
       long timeBeforeGC = System.currentTimeMillis();
       Runtime.getRuntime().gc();
 
-      long freeMemoeryAfterGC = Runtime.getRuntime().freeMemory();
+      long freeMemoryAfterGC = Runtime.getRuntime().freeMemory();
       long totalMemoryAfterGC = Runtime.getRuntime().totalMemory();
       long timeAfterGC = System.currentTimeMillis();
 
-      long megaBytes = 131072;
-      resultMap = new HashMap<String, String>();
+      resultMap = new HashMap<>();
       resultMap.put("MemberId", member.getId());
-      resultMap.put("HeapSizeBeforeGC",
-          String.valueOf((totalMemoryBeforeGC - freeMemoeryBeforeGC) / megaBytes));
-      resultMap.put("HeapSizeAfterGC",
-          String.valueOf((totalMemoryAfterGC - freeMemoeryAfterGC) / megaBytes));
+      resultMap.put("HeapSizeBeforeGC", bytesToString.of(totalMemoryBeforeGC - freeMemoryBeforeGC));
+      resultMap.put("HeapSizeAfterGC", bytesToString.of(totalMemoryAfterGC - freeMemoryAfterGC));
       resultMap.put("TimeSpentInGC", String.valueOf(timeAfterGC - timeBeforeGC));
     } catch (Exception ex) {
-      str1.append(
-          "Exception in GC:" + ex.getMessage() + CliUtil.stackTraceAsString((Throwable) ex));
-      context.getResultSender().lastResult(str1.toString());
+      String message = "Exception in GC:" + ex.getMessage() + CliUtil.stackTraceAsString(ex);
+
+      context.getResultSender().lastResult(message);
     }
     context.getResultSender().lastResult(resultMap);
   }
@@ -75,17 +73,6 @@ public class GarbageCollectionFunction implements Function, InternalEntity {
   }
 
   @Override
-  public boolean hasResult() {
-    return true;
-  }
-
-  @Override
-  public boolean optimizeForWrite() {
-    // no need of optimization since read-only.
-    return false;
-  }
-
-  @Override
   public boolean isHA() {
     return false;
   }

http://git-wip-us.apache.org/repos/asf/geode/blob/68935cae/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/BytesToString.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/BytesToString.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/BytesToString.java
new file mode 100644
index 0000000..d0405d4
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/BytesToString.java
@@ -0,0 +1,50 @@
+/*
+ * 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.management.internal.cli.util;
+
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+
+public class BytesToString {
+  private static final double BYTES_PER_KB = 1024;
+  private static final double BYTES_PER_MB = 1024 * BYTES_PER_KB;
+  private static final double BYTES_PER_GB = 1024 * BYTES_PER_MB;
+  private static final double BYTES_PER_TB = 1024 * BYTES_PER_GB;
+
+  /**
+   * Returns a String that concisely displays the given number of bytes, e.g. "1 KB" or "2.49 MB".
+   */
+  public String of(long sizeInBytes) {
+    final NumberFormat numberFormat = new DecimalFormat();
+    numberFormat.setMaximumFractionDigits(2);
+
+    try {
+      if (sizeInBytes < BYTES_PER_KB) {
+        return numberFormat.format(sizeInBytes) + " Byte(s)";
+      } else if (sizeInBytes < BYTES_PER_MB) {
+        return numberFormat.format(sizeInBytes / BYTES_PER_KB) + " KB";
+      } else if (sizeInBytes < BYTES_PER_GB) {
+        return numberFormat.format(sizeInBytes / BYTES_PER_MB) + " MB";
+      } else if (sizeInBytes < BYTES_PER_TB) {
+        return numberFormat.format(sizeInBytes / BYTES_PER_GB) + " GB";
+      } else {
+        return numberFormat.format(sizeInBytes / BYTES_PER_TB) + " TB";
+      }
+    } catch (Exception e) {
+      return sizeInBytes + " Byte(s)";
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/geode/blob/68935cae/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/BytesToStringTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/BytesToStringTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/BytesToStringTest.java
new file mode 100644
index 0000000..addc263
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/BytesToStringTest.java
@@ -0,0 +1,115 @@
+/*
+ * 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.management.internal.cli.util;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.apache.geode.test.junit.categories.UnitTest;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(UnitTest.class)
+public class BytesToStringTest {
+  private static long KB = 1024;
+  private static long MB = 1024 * KB;
+  private static long GB = 1024 * MB;
+  private static long TB = 1024 * GB;
+
+  private BytesToString bytesToString;
+
+  @Before
+  public void before() {
+    bytesToString = new BytesToString();
+  }
+
+  @Test
+  public void testFiveHundredBytes() {
+    String value = bytesToString.of(500);
+    assertThat(value).isEqualTo("500 Byte(s)");
+  }
+
+  @Test
+  public void testOneKb() {
+    String value = bytesToString.of(KB);
+    assertThat(value).isEqualTo("1 KB");
+  }
+
+  @Test
+  public void testThreeKb() {
+    String value = bytesToString.of(3 * KB);
+    assertThat(value).isEqualTo("3 KB");
+  }
+
+  @Test
+  public void testFractionalKB() {
+    String value = bytesToString.of(KB + 500);
+    assertThat(value).isEqualTo("1.49 KB");
+  }
+
+  @Test
+  public void testOneMB() {
+    String value = bytesToString.of(MB);
+    assertThat(value).isEqualTo("1 MB");
+  }
+
+  @Test
+  public void testThreeMB() {
+    String value = bytesToString.of(3 * MB);
+    assertThat(value).isEqualTo("3 MB");
+  }
+
+  @Test
+  public void testFractionalMB() {
+    String value = bytesToString.of(MB + 500 * KB);
+    assertThat(value).isEqualTo("1.49 MB");
+  }
+
+  @Test
+  public void testOneGB() {
+    String value = bytesToString.of(GB);
+    assertThat(value).isEqualTo("1 GB");
+  }
+
+  @Test
+  public void testThreeGB() {
+    String value = bytesToString.of(3 * GB);
+    assertThat(value).isEqualTo("3 GB");
+  }
+
+  @Test
+  public void testFractionalGB() {
+    String value = bytesToString.of(GB + 500 * MB);
+    assertThat(value).isEqualTo("1.49 GB");
+  }
+
+  @Test
+  public void testOneTB() {
+    String value = bytesToString.of(TB);
+    assertThat(value).isEqualTo("1 TB");
+  }
+
+  @Test
+  public void testThreeTB() {
+    String value = bytesToString.of(3 * GB);
+    assertThat(value).isEqualTo("3 GB");
+  }
+
+  @Test
+  public void testFractionalTB() {
+    String value = bytesToString.of(TB + 500 * GB);
+    assertThat(value).isEqualTo("1.49 TB");
+  }
+}