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/17 13:18:54 UTC
[bookkeeper] branch master updated: [STATS] [DOC] Add @StatsDoc
annotation for ledger cache 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 6fa8fc3 [STATS] [DOC] Add @StatsDoc annotation for ledger cache stats
6fa8fc3 is described below
commit 6fa8fc3825044e05f06f4408cf5eb410a0bee163
Author: Sijie Guo <gu...@gmail.com>
AuthorDate: Mon Dec 17 21:18:49 2018 +0800
[STATS] [DOC] Add @StatsDoc annotation for ledger cache 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 the ledger cache stats.
*Changes*
- convert ledger cache stats to use StatsDoc for documenting metrics
Master Issue: #1785
Reviewers: Enrico Olivelli <eo...@gmail.com>, Jia Zhai <None>
This closes #1872 from sijie/ledgercache_stats
---
.../bookkeeper/bookie/IndexInMemPageMgr.java | 11 +--
.../bookkeeper/bookie/IndexPersistenceMgr.java | 47 ++--------
.../bookie/stats/IndexInMemPageMgrStats.java | 60 ++++++++++++
.../bookie/stats/IndexPersistenceMgrStats.java | 101 +++++++++++++++++++++
4 files changed, 175 insertions(+), 44 deletions(-)
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 b236294..1e7d432 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.ConcurrentLinkedQueue;
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 @@ class IndexInMemPageMgr {
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 @@ class IndexInMemPageMgr {
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 a622fea..8d8f5cf 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.ExecutionException;
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 class IndexPersistenceMgr {
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 class IndexPersistenceMgr {
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 @@ public class IndexPersistenceMgr {
return;
}
if (notification.wasEvicted()) {
- evictedLedgersCounter.inc();
+ persistenceMgrStats.getEvictedLedgersCounter().inc();
}
fileInfo.release();
}
@@ -207,7 +180,7 @@ public class IndexPersistenceMgr {
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 @@ public class IndexPersistenceMgr {
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 0000000..7d2b191
--- /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 0000000..3c06b5b
--- /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);
+ }
+
+
+}