You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@bookkeeper.apache.org by GitBox <gi...@apache.org> on 2018/12/17 13:18:52 UTC

[GitHub] sijie closed pull request #1872: [stats][doc] Add @StatsDoc annotation for ledger cache stats

sijie closed pull request #1872: [stats][doc] Add @StatsDoc annotation for ledger cache stats
URL: https://github.com/apache/bookkeeper/pull/1872
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/IndexInMemPageMgr.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/IndexInMemPageMgr.java
index b236294324..1e7d432ae8 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/IndexInMemPageMgr.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/IndexInMemPageMgr.java
@@ -21,8 +21,6 @@
 package org.apache.bookkeeper.bookie;
 
 import static java.lang.Long.max;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.INDEX_INMEM_ILLEGAL_STATE_DELETE;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.INDEX_INMEM_ILLEGAL_STATE_RESET;
 import static org.apache.bookkeeper.bookie.BookKeeperServerStats.LEDGER_CACHE_HIT;
 import static org.apache.bookkeeper.bookie.BookKeeperServerStats.LEDGER_CACHE_MISS;
 import static org.apache.bookkeeper.bookie.BookKeeperServerStats.LEDGER_CACHE_READ_PAGE;
@@ -43,6 +41,7 @@
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
+import org.apache.bookkeeper.bookie.stats.IndexInMemPageMgrStats;
 import org.apache.bookkeeper.conf.ServerConfiguration;
 import org.apache.bookkeeper.stats.Counter;
 import org.apache.bookkeeper.stats.Gauge;
@@ -64,16 +63,14 @@
         final ConcurrentLinkedQueue<LedgerEntryPage> listOfFreePages;
 
         // Stats
-        final Counter illegalStateResetCounter;
-        final Counter illegalStateDeleteCounter;
+        private final IndexInMemPageMgrStats inMemPageMgrStats;
 
         public InMemPageCollection(StatsLogger statsLogger) {
             pages = new ConcurrentHashMap<>();
             lruCleanPageMap =
                     Collections.synchronizedMap(new LinkedHashMap<EntryKey, LedgerEntryPage>(16, 0.75f, true));
             listOfFreePages = new ConcurrentLinkedQueue<LedgerEntryPage>();
-            illegalStateResetCounter = statsLogger.getCounter(INDEX_INMEM_ILLEGAL_STATE_RESET);
-            illegalStateDeleteCounter = statsLogger.getCounter(INDEX_INMEM_ILLEGAL_STATE_DELETE);
+            inMemPageMgrStats = new IndexInMemPageMgrStats(statsLogger);
         }
 
         /**
@@ -294,7 +291,7 @@ LedgerEntryPage grabCleanPage(long ledgerId, long firstEntry) {
 
         public void addToListOfFreePages(LedgerEntryPage lep) {
             if ((null == lep) || lep.inUse()) {
-                illegalStateResetCounter.inc();
+                inMemPageMgrStats.getIllegalStateResetCounter().inc();
             }
             if (null != lep) {
                 listOfFreePages.add(lep);
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/IndexPersistenceMgr.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/IndexPersistenceMgr.java
index a622feacca..8d8f5cfa39 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/IndexPersistenceMgr.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/IndexPersistenceMgr.java
@@ -20,11 +20,6 @@
  */
 package org.apache.bookkeeper.bookie;
 
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.LEDGER_CACHE_NUM_EVICTED_LEDGERS;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.PENDING_GET_FILE_INFO;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.READ_FILE_INFO_CACHE_SIZE;
-import static org.apache.bookkeeper.bookie.BookKeeperServerStats.WRITE_FILE_INFO_CACHE_SIZE;
-
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
@@ -43,10 +38,9 @@
 import java.util.concurrent.TimeUnit;
 import org.apache.bookkeeper.bookie.FileInfoBackingCache.CachedFileInfo;
 import org.apache.bookkeeper.bookie.LedgerDirsManager.NoWritableLedgerDirException;
+import org.apache.bookkeeper.bookie.stats.IndexPersistenceMgrStats;
 import org.apache.bookkeeper.common.util.Watcher;
 import org.apache.bookkeeper.conf.ServerConfiguration;
-import org.apache.bookkeeper.stats.Counter;
-import org.apache.bookkeeper.stats.Gauge;
 import org.apache.bookkeeper.stats.StatsLogger;
 import org.apache.bookkeeper.util.SnapshotMap;
 import org.slf4j.Logger;
@@ -89,9 +83,7 @@ public static final String getLedgerName(long ledgerId) {
     final SnapshotMap<Long, Boolean> activeLedgers;
     final LedgerDirsManager ledgerDirsManager;
 
-    // Stats
-    private final Counter evictedLedgersCounter;
-    private final Counter pendingGetFileInfoCounter;
+    private final IndexPersistenceMgrStats persistenceMgrStats;
 
     public IndexPersistenceMgr(int pageSize,
                                int entriesPerPage,
@@ -127,30 +119,11 @@ public IndexPersistenceMgr(int pageSize,
             fileInfoEvictionListener);
 
         // Expose Stats
-        evictedLedgersCounter = statsLogger.getCounter(LEDGER_CACHE_NUM_EVICTED_LEDGERS);
-        pendingGetFileInfoCounter = statsLogger.getCounter(PENDING_GET_FILE_INFO);
-        statsLogger.registerGauge(WRITE_FILE_INFO_CACHE_SIZE, new Gauge<Number>() {
-            @Override
-            public Number getDefaultValue() {
-                return 0;
-            }
-
-            @Override
-            public Number getSample() {
-                return writeFileInfoCache.size();
-            }
-        });
-        statsLogger.registerGauge(READ_FILE_INFO_CACHE_SIZE, new Gauge<Number>() {
-            @Override
-            public Number getDefaultValue() {
-                return 0;
-            }
-
-            @Override
-            public Number getSample() {
-                return readFileInfoCache.size();
-            }
-        });
+        persistenceMgrStats = new IndexPersistenceMgrStats(
+            statsLogger,
+            () -> writeFileInfoCache.size(),
+            () -> readFileInfoCache.size()
+        );
     }
 
     private static Cache<Long, CachedFileInfo> buildCache(int concurrencyLevel,
@@ -192,7 +165,7 @@ private void handleLedgerEviction(RemovalNotification<Long, CachedFileInfo> noti
             return;
         }
         if (notification.wasEvicted()) {
-            evictedLedgersCounter.inc();
+            persistenceMgrStats.getEvictedLedgersCounter().inc();
         }
         fileInfo.release();
     }
@@ -207,7 +180,7 @@ private void handleLedgerEviction(RemovalNotification<Long, CachedFileInfo> noti
     CachedFileInfo getFileInfo(final Long ledger, final byte masterKey[]) throws IOException {
         try {
             CachedFileInfo fi;
-            pendingGetFileInfoCounter.inc();
+            persistenceMgrStats.getPendingGetFileInfoCounter().inc();
             Callable<CachedFileInfo> loader = () -> {
                 CachedFileInfo fileInfo = fileInfoBackingCache.loadFileInfo(ledger, masterKey);
                 activeLedgers.put(ledger, true);
@@ -243,7 +216,7 @@ CachedFileInfo getFileInfo(final Long ledger, final byte masterKey[]) throws IOE
                 throw new LedgerCache.NoIndexForLedger("Failed to load file info for ledger " + ledger, ee);
             }
         } finally {
-            pendingGetFileInfoCounter.dec();
+            persistenceMgrStats.getPendingGetFileInfoCounter().dec();
         }
     }
 
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/stats/IndexInMemPageMgrStats.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/stats/IndexInMemPageMgrStats.java
new file mode 100644
index 0000000000..7d2b1914a9
--- /dev/null
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/stats/IndexInMemPageMgrStats.java
@@ -0,0 +1,60 @@
+/*
+ * 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.BOOKIE_SCOPE;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.CATEGORY_SERVER;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.INDEX_INMEM_ILLEGAL_STATE_DELETE;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.INDEX_INMEM_ILLEGAL_STATE_RESET;
+
+import lombok.Getter;
+import org.apache.bookkeeper.stats.Counter;
+import org.apache.bookkeeper.stats.StatsLogger;
+import org.apache.bookkeeper.stats.annotations.StatsDoc;
+
+/**
+ * A umbrella class for {@link org.apache.bookkeeper.bookie.IndexInMemPageMgr} stats.
+ */
+@StatsDoc(
+    name = BOOKIE_SCOPE,
+    category = CATEGORY_SERVER,
+    help = "Index InMemPage Manager related stats"
+)
+@Getter
+public class IndexInMemPageMgrStats {
+
+    // Stats
+    @StatsDoc(
+        name = INDEX_INMEM_ILLEGAL_STATE_RESET,
+        help = "The number of index pages detected as in illegal state when resetting"
+    )
+    private final Counter illegalStateResetCounter;
+    @StatsDoc(
+        name = INDEX_INMEM_ILLEGAL_STATE_DELETE,
+        help = "The number of index pages detected as in illegal state when deleting"
+    )
+    private final Counter illegalStateDeleteCounter;
+
+    public IndexInMemPageMgrStats(StatsLogger statsLogger) {
+        illegalStateResetCounter = statsLogger.getCounter(INDEX_INMEM_ILLEGAL_STATE_RESET);
+        illegalStateDeleteCounter = statsLogger.getCounter(INDEX_INMEM_ILLEGAL_STATE_DELETE);
+    }
+
+}
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/stats/IndexPersistenceMgrStats.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/stats/IndexPersistenceMgrStats.java
new file mode 100644
index 0000000000..3c06b5bc10
--- /dev/null
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/stats/IndexPersistenceMgrStats.java
@@ -0,0 +1,101 @@
+/*
+ * 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.BOOKIE_SCOPE;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.CATEGORY_SERVER;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.LEDGER_CACHE_NUM_EVICTED_LEDGERS;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.PENDING_GET_FILE_INFO;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.READ_FILE_INFO_CACHE_SIZE;
+import static org.apache.bookkeeper.bookie.BookKeeperServerStats.WRITE_FILE_INFO_CACHE_SIZE;
+
+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.StatsLogger;
+import org.apache.bookkeeper.stats.annotations.StatsDoc;
+
+/**
+ * A umbrella class for {@link org.apache.bookkeeper.bookie.IndexPersistenceMgr} stats.
+ */
+@StatsDoc(
+    name = BOOKIE_SCOPE,
+    category = CATEGORY_SERVER,
+    help = "Index Persistence Manager related stats"
+)
+@Getter
+public class IndexPersistenceMgrStats {
+
+    // Stats
+    @StatsDoc(
+        name = LEDGER_CACHE_NUM_EVICTED_LEDGERS,
+        help = "Number of ledgers evicted from ledger caches"
+    )
+    private final Counter evictedLedgersCounter;
+    @StatsDoc(
+        name = PENDING_GET_FILE_INFO,
+        help = "Number of pending get-file-info requests"
+    )
+    private final Counter pendingGetFileInfoCounter;
+    @StatsDoc(
+        name = WRITE_FILE_INFO_CACHE_SIZE,
+        help = "Current write file info cache size"
+    )
+    private final Gauge<Number> writeFileInfoCacheSizeGauge;
+    @StatsDoc(
+        name = READ_FILE_INFO_CACHE_SIZE,
+        help = "Current read file info cache size"
+    )
+    private final Gauge<Number> readFileInfoCacheSizeGauge;
+
+    public IndexPersistenceMgrStats(StatsLogger statsLogger,
+                                    Supplier<Number> writeFileInfoCacheSizeSupplier,
+                                    Supplier<Number> readFileInfoCacheSizeSupplier) {
+        evictedLedgersCounter = statsLogger.getCounter(LEDGER_CACHE_NUM_EVICTED_LEDGERS);
+        pendingGetFileInfoCounter = statsLogger.getCounter(PENDING_GET_FILE_INFO);
+        writeFileInfoCacheSizeGauge = new Gauge<Number>() {
+            @Override
+            public Number getDefaultValue() {
+                return 0;
+            }
+
+            @Override
+            public Number getSample() {
+                return writeFileInfoCacheSizeSupplier.get();
+            }
+        };
+        statsLogger.registerGauge(WRITE_FILE_INFO_CACHE_SIZE, writeFileInfoCacheSizeGauge);
+        readFileInfoCacheSizeGauge = new Gauge<Number>() {
+            @Override
+            public Number getDefaultValue() {
+                return 0;
+            }
+
+            @Override
+            public Number getSample() {
+                return readFileInfoCacheSizeSupplier.get();
+            }
+        };
+        statsLogger.registerGauge(READ_FILE_INFO_CACHE_SIZE, readFileInfoCacheSizeGauge);
+    }
+
+
+}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services