GEODE-1590: add defragmentationsInProgress stat
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/5cbaa7d1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/5cbaa7d1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/5cbaa7d1 Branch: refs/heads/master Commit: 5cbaa7d193e1d15d78f32afa4cbb455904450e1a Parents: e72831e Author: Darrel Schneider <dschnei...@pivotal.io> Authored: Fri Jul 8 11:18:59 2016 -0700 Committer: Darrel Schneider <dschnei...@pivotal.io> Committed: Mon Jul 18 11:03:35 2016 -0700 ---------------------------------------------------------------------- .../internal/offheap/OffHeapMemoryStats.java | 1 + .../gemfire/internal/offheap/OffHeapStorage.java | 19 ++++++++++++++++++- .../internal/offheap/NullOffHeapMemoryStats.java | 4 ++++ .../offheap/OffHeapStorageJUnitTest.java | 6 +++++- 4 files changed, 28 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5cbaa7d1/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapMemoryStats.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapMemoryStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapMemoryStats.java index 1204814..bd888ca 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapMemoryStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapMemoryStats.java @@ -42,6 +42,7 @@ public interface OffHeapMemoryStats { public long getReads(); public int getObjects(); public int getDefragmentations(); + public int getDefragmentationsInProgress(); public long getFragments(); public int getLargestFragment(); public int getFragmentation(); http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5cbaa7d1/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapStorage.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapStorage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapStorage.java index 47f25b0..bc7fb6a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapStorage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapStorage.java @@ -56,6 +56,7 @@ public class OffHeapStorage implements OffHeapMemoryStats { private static final int largestFragmentId; private static final int defragmentationTimeId; private static final int fragmentationId; + private static final int defragmentationsInProgressId; // NOTE!!!! When adding new stats make sure and update the initialize method on this class // creates and registers the statistics type @@ -64,6 +65,7 @@ public class OffHeapStorage implements OffHeapMemoryStats { final String usedMemoryDesc = "The amount of off-heap memory, in bytes, that is being used to store data."; final String defragmentationDesc = "The total number of times off-heap memory has been defragmented."; + final String defragmentationsInProgressDesc = "Current number of defragment operations currently in progress."; final String defragmentationTimeDesc = "The total time spent defragmenting off-heap memory."; final String fragmentationDesc = "The percentage of off-heap free memory that is fragmented. Updated every time a defragmentation is performed."; final String fragmentsDesc = "The number of fragments of free off-heap memory. Updated every time a defragmentation is done."; @@ -75,6 +77,7 @@ public class OffHeapStorage implements OffHeapMemoryStats { final String usedMemory = "usedMemory"; final String defragmentations = "defragmentations"; + final String defragmentationsInProgress = "defragmentationsInProgress"; final String defragmentationTime = "defragmentationTime"; final String fragmentation = "fragmentation"; final String fragments = "fragments"; @@ -89,7 +92,8 @@ public class OffHeapStorage implements OffHeapMemoryStats { statsTypeDescription, new StatisticDescriptor[] { f.createLongGauge(usedMemory, usedMemoryDesc, "bytes"), - f.createIntCounter(defragmentations, defragmentationDesc, "defragmentations"), + f.createIntCounter(defragmentations, defragmentationDesc, "operations"), + f.createIntGauge(defragmentationsInProgress, defragmentationsInProgressDesc, "operations"), f.createLongCounter(defragmentationTime, defragmentationTimeDesc, "nanoseconds", false), f.createIntGauge(fragmentation, fragmentationDesc, "percentage"), f.createLongGauge(fragments, fragmentsDesc, "fragments"), @@ -103,6 +107,7 @@ public class OffHeapStorage implements OffHeapMemoryStats { usedMemoryId = statsType.nameToId(usedMemory); defragmentationId = statsType.nameToId(defragmentations); + defragmentationsInProgressId = statsType.nameToId(defragmentationsInProgress); defragmentationTimeId = statsType.nameToId(defragmentationTime); fragmentationId = statsType.nameToId(fragmentation); fragmentsId = statsType.nameToId(fragments); @@ -306,13 +311,20 @@ public class OffHeapStorage implements OffHeapMemoryStats { } @Override + public int getDefragmentationsInProgress() { + return this.stats.getInt(defragmentationsInProgressId); + } + + @Override public long startDefragmentation() { + this.stats.incInt(defragmentationsInProgressId, 1); return DistributionStats.getStatTime(); } @Override public void endDefragmentation(long start) { incDefragmentations(); + this.stats.incInt(defragmentationsInProgressId, -1); if (DistributionStats.enableClockStats) { stats.incLong(defragmentationTimeId, DistributionStats.getStatTime()-start); } @@ -350,6 +362,7 @@ public class OffHeapStorage implements OffHeapMemoryStats { setObjects(oldStats.getObjects()); setReads(oldStats.getReads()); setDefragmentations(oldStats.getDefragmentations()); + setDefragmentationsInProgress(oldStats.getDefragmentationsInProgress()); setFragments(oldStats.getFragments()); setLargestFragment(oldStats.getLargestFragment()); setDefragmentationTime(oldStats.getDefragmentationTime()); @@ -365,6 +378,10 @@ public class OffHeapStorage implements OffHeapMemoryStats { private void setDefragmentations(int value) { this.stats.setInt(defragmentationId, value); } + + private void setDefragmentationsInProgress(int value) { + this.stats.setInt(defragmentationsInProgressId, value); + } private void setReads(long value) { this.stats.setLong(readsId, value); http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5cbaa7d1/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOffHeapMemoryStats.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOffHeapMemoryStats.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOffHeapMemoryStats.java index 6a1b2a6..ac104dc 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOffHeapMemoryStats.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOffHeapMemoryStats.java @@ -63,6 +63,10 @@ public class NullOffHeapMemoryStats implements OffHeapMemoryStats { return 0; } @Override + public int getDefragmentationsInProgress() { + return 0; + } + @Override public void setFragments(long value) { } @Override http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5cbaa7d1/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapStorageJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapStorageJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapStorageJUnitTest.java index 90ff3cf..93bef98 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapStorageJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapStorageJUnitTest.java @@ -168,6 +168,7 @@ public class OffHeapStorageJUnitTest { assertEquals(1024 * 1024, stats.getMaxMemory()); assertEquals(0, stats.getUsedMemory()); assertEquals(0, stats.getDefragmentations()); + assertEquals(0, stats.getDefragmentationsInProgress()); assertEquals(0, stats.getDefragmentationTime()); assertEquals(0, stats.getFragmentation()); assertEquals(1, stats.getFragments()); @@ -217,11 +218,13 @@ public class OffHeapStorageJUnitTest { DistributionStats.enableClockStats = true; try { long start = stats.startDefragmentation(); - while (stats.startDefragmentation() == start) { + assertEquals(1, stats.getDefragmentationsInProgress()); + while (DistributionStats.getStatTime() == start) { Thread.yield(); } stats.endDefragmentation(start); assertEquals(1, stats.getDefragmentations()); + assertEquals(0, stats.getDefragmentationsInProgress()); assertTrue(stats.getDefragmentationTime() > 0); } finally { DistributionStats.enableClockStats = originalEnableClockStats; @@ -236,6 +239,7 @@ public class OffHeapStorageJUnitTest { assertEquals(0, stats.getMaxMemory()); assertEquals(0, stats.getUsedMemory()); assertEquals(0, stats.getDefragmentations()); + assertEquals(0, stats.getDefragmentationsInProgress()); assertEquals(0, stats.getDefragmentationTime()); assertEquals(0, stats.getFragmentation()); assertEquals(0, stats.getFragments());