You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by si...@apache.org on 2018/12/16 08:20:40 UTC

[bookkeeper] branch master updated: [STATS] [DOC] Add @StatsDoc annotation for garbage collector stats

This is an automated email from the ASF dual-hosted git repository.

sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new b2e099b  [STATS] [DOC] Add @StatsDoc annotation for garbage collector stats
b2e099b is described below

commit b2e099bbc7b13f13825fe78ab009ca132cb3a9ba
Author: Sijie Guo <gu...@gmail.com>
AuthorDate: Sun Dec 16 16:20:35 2018 +0800

    [STATS] [DOC] Add @StatsDoc annotation for garbage collector stats
    
    Descriptions of the changes in this PR:
    
    *Motivation*
    
    As part of [BP-36](https://github.com/apache/bookkeeper/issues/1785), this PR is to document gc stats.
    
    *Changes*
    
    - convert gc stats to use StatsDoc for documenting metrics
    
    Master Issue: #1785
    
    
    
    
    Reviewers: Jia Zhai <None>, Enrico Olivelli <eo...@gmail.com>
    
    This closes #1875 from sijie/gc_stats
---
 .../bookkeeper/bookie/GarbageCollectorThread.java  |  81 +++--------
 .../bookie/ScanAndCompareGarbageCollector.java     |  23 +---
 .../bookie/stats/GarbageCollectorStats.java        | 151 +++++++++++++++++++++
 .../org/apache/bookkeeper/meta/GcLedgersTest.java  |  26 +---
 4 files changed, 181 insertions(+), 100 deletions(-)

diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
index ca02651..0065926 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
@@ -21,14 +21,6 @@
 
 package org.apache.bookkeeper.bookie;
 
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.ACTIVE_ENTRY_LOG_COUNT;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.ACTIVE_ENTRY_LOG_SPACE_BYTES;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.MAJOR_COMPACTION_COUNT;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.MINOR_COMPACTION_COUNT;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.RECLAIMED_COMPACTION_SPACE_BYTES;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.RECLAIMED_DELETION_SPACE_BYTES;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.THREAD_RUNTIME;
-
 import com.google.common.annotations.VisibleForTesting;
 import io.netty.util.concurrent.DefaultThreadFactory;
 
@@ -46,11 +38,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import java.util.concurrent.atomic.AtomicLong;
 import org.apache.bookkeeper.bookie.GarbageCollector.GarbageCleaner;
+import org.apache.bookkeeper.bookie.stats.GarbageCollectorStats;
 import org.apache.bookkeeper.conf.ServerConfiguration;
 import org.apache.bookkeeper.meta.LedgerManager;
-import org.apache.bookkeeper.stats.Counter;
-import org.apache.bookkeeper.stats.Gauge;
-import org.apache.bookkeeper.stats.OpStatsLogger;
 import org.apache.bookkeeper.stats.StatsLogger;
 import org.apache.bookkeeper.util.MathUtils;
 import org.apache.bookkeeper.util.SafeRunnable;
@@ -92,12 +82,7 @@ public class GarbageCollectorThread extends SafeRunnable {
     final AbstractLogCompactor compactor;
 
     // Stats loggers for garbage collection operations
-    final StatsLogger statsLogger;
-    private final Counter minorCompactionCounter;
-    private final Counter majorCompactionCounter;
-    private final Counter reclaimedSpaceViaDeletes;
-    private final Counter reclaimedSpaceViaCompaction;
-    private final OpStatsLogger gcThreadRuntime;
+    private final GarbageCollectorStats gcStats;
 
     private volatile long totalEntryLogSize;
     private volatile int numActiveEntryLogs;
@@ -124,7 +109,7 @@ public class GarbageCollectorThread extends SafeRunnable {
     // Boolean to disable minor compaction, when disk is full
     final AtomicBoolean suspendMinorCompaction = new AtomicBoolean(false);
 
-    final GarbageCollector garbageCollector;
+    final ScanAndCompareGarbageCollector garbageCollector;
     final GarbageCleaner garbageCleaner;
 
     final ServerConfiguration conf;
@@ -162,52 +147,28 @@ public class GarbageCollectorThread extends SafeRunnable {
         this.ledgerStorage = ledgerStorage;
         this.gcWaitTime = conf.getGcWaitTime();
 
+        this.numActiveEntryLogs = 0;
+        this.totalEntryLogSize = 0L;
+        this.garbageCollector = new ScanAndCompareGarbageCollector(ledgerManager, ledgerStorage, conf, statsLogger);
+        this.gcStats = new GarbageCollectorStats(
+            statsLogger,
+            () -> numActiveEntryLogs,
+            () -> totalEntryLogSize,
+            () -> garbageCollector.getNumActiveLedgers()
+        );
+
         this.garbageCleaner = ledgerId -> {
             try {
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("delete ledger : " + ledgerId);
                 }
+                gcStats.getDeletedLedgerCounter().inc();
                 ledgerStorage.deleteLedger(ledgerId);
             } catch (IOException e) {
                 LOG.error("Exception when deleting the ledger index file on the Bookie: ", e);
             }
         };
 
-        // Stat state initialization
-        this.statsLogger = statsLogger;
-
-        this.minorCompactionCounter = statsLogger.getCounter(MINOR_COMPACTION_COUNT);
-        this.majorCompactionCounter = statsLogger.getCounter(MAJOR_COMPACTION_COUNT);
-        this.reclaimedSpaceViaCompaction = statsLogger.getCounter(RECLAIMED_COMPACTION_SPACE_BYTES);
-        this.reclaimedSpaceViaDeletes = statsLogger.getCounter(RECLAIMED_DELETION_SPACE_BYTES);
-        this.gcThreadRuntime = statsLogger.getOpStatsLogger(THREAD_RUNTIME);
-        this.numActiveEntryLogs = 0;
-        statsLogger.registerGauge(ACTIVE_ENTRY_LOG_COUNT, new Gauge<Integer>() {
-            @Override
-            public Integer getDefaultValue() {
-                return 0;
-            }
-
-            @Override
-            public Integer getSample() {
-                return numActiveEntryLogs;
-            }
-        });
-        this.totalEntryLogSize = 0L;
-        statsLogger.registerGauge(ACTIVE_ENTRY_LOG_SPACE_BYTES, new Gauge<Long>() {
-            @Override
-            public Long getDefaultValue() {
-                return 0L;
-            }
-
-            @Override
-            public Long getSample() {
-                return totalEntryLogSize;
-            }
-        });
-
-        this.garbageCollector = new ScanAndCompareGarbageCollector(ledgerManager, ledgerStorage, conf, statsLogger);
-
         // compaction parameters
         minorCompactionThreshold = conf.getMinorCompactionThreshold();
         minorCompactionInterval = conf.getMinorCompactionInterval() * SECOND;
@@ -389,7 +350,7 @@ public class GarbageCollectorThread extends SafeRunnable {
             lastMajorCompactionTime = System.currentTimeMillis();
             // and also move minor compaction time
             lastMinorCompactionTime = lastMajorCompactionTime;
-            majorCompactionCounter.inc();
+            gcStats.getMajorCompactionCounter().inc();
             majorCompacting.set(false);
         } else if (enableMinorCompaction && (!suspendMinor)
             && (force || curTime - lastMinorCompactionTime > minorCompactionInterval)) {
@@ -398,7 +359,7 @@ public class GarbageCollectorThread extends SafeRunnable {
             minorCompacting.set(true);
             doCompactEntryLogs(minorCompactionThreshold);
             lastMinorCompactionTime = System.currentTimeMillis();
-            minorCompactionCounter.inc();
+            gcStats.getMinorCompactionCounter().inc();
             minorCompacting.set(false);
         }
 
@@ -408,7 +369,7 @@ public class GarbageCollectorThread extends SafeRunnable {
                     .currentThread().getName());
             }
         }
-        this.gcThreadRuntime.registerSuccessfulEvent(
+        gcStats.getGcThreadRuntime().registerSuccessfulEvent(
                 MathUtils.nowInNano() - threadStart, TimeUnit.NANOSECONDS);
     }
 
@@ -434,7 +395,7 @@ public class GarbageCollectorThread extends SafeRunnable {
                // We can remove this entry log file now.
                LOG.info("Deleting entryLogId " + entryLogId + " as it has no active ledgers!");
                removeEntryLog(entryLogId);
-               this.reclaimedSpaceViaDeletes.add(meta.getTotalSize());
+               gcStats.getReclaimedSpaceViaDeletes().add(meta.getTotalSize());
            }
 
            totalEntryLogSizeAcc.getAndAdd(meta.getRemainingSize());
@@ -492,7 +453,7 @@ public class GarbageCollectorThread extends SafeRunnable {
 
             long priorRemainingSize = meta.getRemainingSize();
             compactEntryLog(meta);
-            this.reclaimedSpaceViaCompaction.add(meta.getTotalSize() - priorRemainingSize);
+            gcStats.getReclaimedSpaceViaCompaction().add(meta.getTotalSize() - priorRemainingSize);
 
             if (!running) { // if gc thread is not running, stop compaction
                 return;
@@ -621,8 +582,8 @@ public class GarbageCollectorThread extends SafeRunnable {
             .minorCompacting(minorCompacting.get())
             .lastMajorCompactionTime(lastMajorCompactionTime)
             .lastMinorCompactionTime(lastMinorCompactionTime)
-            .majorCompactionCounter(majorCompactionCounter.get())
-            .minorCompactionCounter(minorCompactionCounter.get())
+            .majorCompactionCounter(gcStats.getMajorCompactionCounter().get())
+            .minorCompactionCounter(gcStats.getMinorCompactionCounter().get())
             .build();
     }
 }
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java
index 6af5d15..24c5c97 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java
@@ -21,8 +21,6 @@
 
 package org.apache.bookkeeper.bookie;
 
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.ACTIVE_LEDGER_COUNT;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.DELETED_LEDGER_COUNT;
 import static org.apache.bookkeeper.common.concurrent.FutureUtils.result;
 
 import com.google.common.collect.Sets;
@@ -42,8 +40,6 @@ import org.apache.bookkeeper.meta.LedgerManager.LedgerRangeIterator;
 import org.apache.bookkeeper.meta.ZkLedgerUnderreplicationManager;
 import org.apache.bookkeeper.meta.zk.ZKMetadataDriverBase;
 import org.apache.bookkeeper.net.BookieSocketAddress;
-import org.apache.bookkeeper.stats.Counter;
-import org.apache.bookkeeper.stats.Gauge;
 import org.apache.bookkeeper.stats.StatsLogger;
 import org.apache.bookkeeper.util.ZkUtils;
 import org.apache.bookkeeper.zookeeper.ZooKeeperClient;
@@ -69,7 +65,7 @@ import org.slf4j.LoggerFactory;
  *
  * <p>TODO: eliminate the direct usage of zookeeper here {@link https://github.com/apache/bookkeeper/issues/1331}
  */
-public class ScanAndCompareGarbageCollector implements GarbageCollector{
+public class ScanAndCompareGarbageCollector implements GarbageCollector {
 
     static final Logger LOG = LoggerFactory.getLogger(ScanAndCompareGarbageCollector.class);
     static final int MAX_CONCURRENT_ZK_REQUESTS = 1000;
@@ -86,7 +82,6 @@ public class ScanAndCompareGarbageCollector implements GarbageCollector{
     private final String zkLedgersRootPath;
     private final boolean verifyMetadataOnGc;
     private int activeLedgerCounter;
-    private Counter deletedLedgerCounter;
 
     public ScanAndCompareGarbageCollector(LedgerManager ledgerManager, CompactableLedgerStorage ledgerStorage,
             ServerConfiguration conf, StatsLogger statsLogger) throws IOException {
@@ -106,20 +101,11 @@ public class ScanAndCompareGarbageCollector implements GarbageCollector{
 
         verifyMetadataOnGc = conf.getVerifyMetadataOnGC();
 
-        this.deletedLedgerCounter = statsLogger.getCounter(DELETED_LEDGER_COUNT);
-
         this.activeLedgerCounter = 0;
-        statsLogger.registerGauge(ACTIVE_LEDGER_COUNT, new Gauge<Integer>() {
-            @Override
-            public Integer getDefaultValue() {
-                return 0;
-            }
+    }
 
-            @Override
-            public Integer getSample() {
-                return activeLedgerCounter;
-            }
-        });
+    public int getNumActiveLedgers() {
+        return activeLedgerCounter;
     }
 
     @Override
@@ -190,7 +176,6 @@ public class ScanAndCompareGarbageCollector implements GarbageCollector{
                                 continue;
                             }
                         }
-                        deletedLedgerCounter.inc();
                         garbageCleaner.clean(bkLid);
                     }
                 }
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/stats/GarbageCollectorStats.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/stats/GarbageCollectorStats.java
new file mode 100644
index 0000000..1c94756
--- /dev/null
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/stats/GarbageCollectorStats.java
@@ -0,0 +1,151 @@
+/*
+ * 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.bookkeeper.bookie.stats;
+
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.ACTIVE_ENTRY_LOG_COUNT;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.ACTIVE_ENTRY_LOG_SPACE_BYTES;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.ACTIVE_LEDGER_COUNT;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.BOOKIE_SCOPE;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.CATEGORY_SERVER;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.DELETED_LEDGER_COUNT;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.MAJOR_COMPACTION_COUNT;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.MINOR_COMPACTION_COUNT;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.RECLAIMED_COMPACTION_SPACE_BYTES;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.RECLAIMED_DELETION_SPACE_BYTES;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.THREAD_RUNTIME;
+
+import java.util.function.Supplier;
+import lombok.Getter;
+import org.apache.bookkeeper.stats.Counter;
+import org.apache.bookkeeper.stats.Gauge;
+import org.apache.bookkeeper.stats.OpStatsLogger;
+import org.apache.bookkeeper.stats.StatsLogger;
+import org.apache.bookkeeper.stats.annotations.StatsDoc;
+
+/**
+ * A umbrella class for gc stats.
+ */
+@StatsDoc(
+    name = BOOKIE_SCOPE,
+    category = CATEGORY_SERVER,
+    help = "Garbage Collector related stats"
+)
+@Getter
+public class GarbageCollectorStats {
+
+    final StatsLogger statsLogger;
+    @StatsDoc(
+        name = MINOR_COMPACTION_COUNT,
+        help = "Number of minor compactions"
+    )
+    private final Counter minorCompactionCounter;
+    @StatsDoc(
+        name = MAJOR_COMPACTION_COUNT,
+        help = "Number of major compactions"
+    )
+    private final Counter majorCompactionCounter;
+    @StatsDoc(
+        name = RECLAIMED_DELETION_SPACE_BYTES,
+        help = "Number of disk space bytes reclaimed via deleting entry log files"
+    )
+    private final Counter reclaimedSpaceViaDeletes;
+    @StatsDoc(
+        name = RECLAIMED_COMPACTION_SPACE_BYTES,
+        help = "Number of disk space bytes reclaimed via compacting entry log files"
+    )
+    private final Counter reclaimedSpaceViaCompaction;
+    @StatsDoc(
+        name = DELETED_LEDGER_COUNT,
+        help = "Number of ledgers deleted by garbage collection"
+    )
+    private final Counter deletedLedgerCounter;
+    @StatsDoc(
+        name = THREAD_RUNTIME,
+        help = "Operation stats of garbage collections"
+    )
+    private final OpStatsLogger gcThreadRuntime;
+    @StatsDoc(
+        name = ACTIVE_ENTRY_LOG_COUNT,
+        help = "Current number of active entry log files"
+    )
+    private final Gauge<Integer> activeEntryLogCountGauge;
+    @StatsDoc(
+        name = ACTIVE_ENTRY_LOG_SPACE_BYTES,
+        help = "Current number of active entry log space bytes"
+    )
+    private final Gauge<Long> activeEntryLogSpaceBytesGauge;
+    @StatsDoc(
+        name = ACTIVE_LEDGER_COUNT,
+        help = "Current number of active ledgers"
+    )
+    private final Gauge<Integer> activeLedgerCountGauge;
+
+    public GarbageCollectorStats(StatsLogger statsLogger,
+                                 Supplier<Integer> activeEntryLogCountSupplier,
+                                 Supplier<Long> activeEntryLogSpaceBytesSupplier,
+                                 Supplier<Integer> activeLedgerCountSupplier) {
+        this.statsLogger = statsLogger;
+
+        this.minorCompactionCounter = statsLogger.getCounter(MINOR_COMPACTION_COUNT);
+        this.majorCompactionCounter = statsLogger.getCounter(MAJOR_COMPACTION_COUNT);
+        this.reclaimedSpaceViaCompaction = statsLogger.getCounter(RECLAIMED_COMPACTION_SPACE_BYTES);
+        this.reclaimedSpaceViaDeletes = statsLogger.getCounter(RECLAIMED_DELETION_SPACE_BYTES);
+        this.gcThreadRuntime = statsLogger.getOpStatsLogger(THREAD_RUNTIME);
+        this.deletedLedgerCounter = statsLogger.getCounter(DELETED_LEDGER_COUNT);
+
+        this.activeEntryLogCountGauge = new Gauge<Integer>() {
+            @Override
+            public Integer getDefaultValue() {
+                return 0;
+            }
+
+            @Override
+            public Integer getSample() {
+                return activeEntryLogCountSupplier.get();
+            }
+        };
+        statsLogger.registerGauge(ACTIVE_ENTRY_LOG_COUNT, activeEntryLogCountGauge);
+        this.activeEntryLogSpaceBytesGauge = new Gauge<Long>() {
+            @Override
+            public Long getDefaultValue() {
+                return 0L;
+            }
+
+            @Override
+            public Long getSample() {
+                return activeEntryLogSpaceBytesSupplier.get();
+            }
+        };
+        statsLogger.registerGauge(ACTIVE_ENTRY_LOG_SPACE_BYTES, activeEntryLogSpaceBytesGauge);
+        this.activeLedgerCountGauge = new Gauge<Integer>() {
+            @Override
+            public Integer getDefaultValue() {
+                return 0;
+            }
+
+            @Override
+            public Integer getSample() {
+                return activeLedgerCountSupplier.get();
+            }
+        };
+        statsLogger.registerGauge(ACTIVE_LEDGER_COUNT, activeLedgerCountGauge);
+    }
+
+}
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/GcLedgersTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/GcLedgersTest.java
index d273565..828956d 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/GcLedgersTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/GcLedgersTest.java
@@ -21,8 +21,6 @@
 
 package org.apache.bookkeeper.meta;
 
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.ACTIVE_LEDGER_COUNT;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.DELETED_LEDGER_COUNT;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -173,7 +171,7 @@ public class GcLedgersTest extends LedgerManagerTestCase {
         final CountDownLatch endLatch = new CountDownLatch(2);
         final CompactableLedgerStorage mockLedgerStorage = new MockLedgerStorage();
         TestStatsProvider stats = new TestStatsProvider();
-        final GarbageCollector garbageCollector = new ScanAndCompareGarbageCollector(getLedgerManager(),
+        final ScanAndCompareGarbageCollector garbageCollector = new ScanAndCompareGarbageCollector(getLedgerManager(),
                 mockLedgerStorage, baseConf, stats.getStatsLogger("gc"));
         Thread gcThread = new Thread() {
             @Override
@@ -236,11 +234,8 @@ public class GcLedgersTest extends LedgerManagerTestCase {
             assertTrue(activeLedgers.containsKey(ledger));
         }
         assertTrue(
-                "Wrong DELETED_LEDGER_COUNT",
-                stats.getCounter("gc." + DELETED_LEDGER_COUNT).get() == removedLedgers.size());
-        assertTrue(
                 "Wrong ACTIVE_LEDGER_COUNT",
-                stats.getGauge("gc." + ACTIVE_LEDGER_COUNT).getSample().intValue() == createdLedgers.size());
+                garbageCollector.getNumActiveLedgers() == createdLedgers.size());
     }
 
     @Test
@@ -253,7 +248,7 @@ public class GcLedgersTest extends LedgerManagerTestCase {
 
         MockLedgerStorage mockLedgerStorage = new MockLedgerStorage();
         TestStatsProvider stats = new TestStatsProvider();
-        final GarbageCollector garbageCollector = new ScanAndCompareGarbageCollector(getLedgerManager(),
+        final ScanAndCompareGarbageCollector garbageCollector = new ScanAndCompareGarbageCollector(getLedgerManager(),
                 mockLedgerStorage, baseConf, stats.getStatsLogger("gc"));
         GarbageCollector.GarbageCleaner cleaner = new GarbageCollector.GarbageCleaner() {
                 @Override
@@ -272,36 +267,25 @@ public class GcLedgersTest extends LedgerManagerTestCase {
         garbageCollector.gc(cleaner);
         assertNull("Should have cleaned nothing", cleaned.poll());
         assertTrue(
-                "Wrong DELETED_LEDGER_COUNT",
-                stats.getCounter("gc." + DELETED_LEDGER_COUNT).get() == 0);
-        assertTrue(
                 "Wrong ACTIVE_LEDGER_COUNT",
-                stats.getGauge(
-                        "gc." + ACTIVE_LEDGER_COUNT).getSample().intValue() == numLedgers);
+                garbageCollector.getNumActiveLedgers() == numLedgers);
 
         long last = createdLedgers.last();
         removeLedger(last);
         garbageCollector.gc(cleaner);
         assertNotNull("Should have cleaned something", cleaned.peek());
         assertEquals("Should have cleaned last ledger" + last, (long) last, (long) cleaned.poll());
-        assertTrue(
-                "Wrong DELETED_LEDGER_COUNT",
-                stats.getCounter("gc." + DELETED_LEDGER_COUNT).get() == 1);
 
         long first = createdLedgers.first();
         removeLedger(first);
         garbageCollector.gc(cleaner);
         assertNotNull("Should have cleaned something", cleaned.peek());
         assertEquals("Should have cleaned first ledger" + first, (long) first, (long) cleaned.poll());
-        assertTrue(
-                "Wrong DELETED_LEDGER_COUNT",
-                stats.getCounter("gc." + DELETED_LEDGER_COUNT).get() == 2);
 
         garbageCollector.gc(cleaner);
         assertTrue(
                 "Wrong ACTIVE_LEDGER_COUNT",
-                stats.getGauge(
-                        "gc." + ACTIVE_LEDGER_COUNT).getSample().intValue() == (numLedgers - 2));
+                garbageCollector.getNumActiveLedgers() == (numLedgers - 2));
 
     }