You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by sh...@apache.org on 2021/03/06 22:28:07 UTC
[hadoop] branch branch-2.10 updated: HDFS-15808. Add metrics for
FSNamesystem read/write lock hold long time. (#2668) Contributed by
tomscut.
This is an automated email from the ASF dual-hosted git repository.
shv pushed a commit to branch branch-2.10
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-2.10 by this push:
new 68cccba HDFS-15808. Add metrics for FSNamesystem read/write lock hold long time. (#2668) Contributed by tomscut.
68cccba is described below
commit 68cccba8939cdf01923dc523d450df915f9931a4
Author: tomscut <li...@bigo.sg>
AuthorDate: Mon Mar 1 16:35:12 2021 -0800
HDFS-15808. Add metrics for FSNamesystem read/write lock hold long time. (#2668) Contributed by tomscut.
(cherry picked from commit 9cb51bf106802c78b1400fba9f1d1c7e772dd5e7)
---
.../hadoop/hdfs/server/namenode/FSNamesystem.java | 14 +++++++++
.../hdfs/server/namenode/FSNamesystemLock.java | 34 ++++++++++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
index 7394c60..9c6e1c8 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
@@ -4161,6 +4161,20 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
return fsLock.getQueueLength();
}
+ @Metric(value = {"ReadLockLongHoldCount", "The number of time " +
+ "the read lock has been held for longer than the threshold"},
+ type = Metric.Type.COUNTER)
+ public long getNumOfReadLockLongHold() {
+ return fsLock.getNumOfReadLockLongHold();
+ }
+
+ @Metric(value = {"WriteLockLongHoldCount", "The number of time " +
+ "the write lock has been held for longer than the threshold"},
+ type = Metric.Type.COUNTER)
+ public long getNumOfWriteLockLongHold() {
+ return fsLock.getNumOfWriteLockLongHold();
+ }
+
int getNumberOfDatanodes(DatanodeReportType type) {
readLock();
try {
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystemLock.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystemLock.java
index 384bdee..e575ea8 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystemLock.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystemLock.java
@@ -101,6 +101,16 @@ class FSNamesystemLock {
private final AtomicLong timeStampOfLastReadLockReportMs = new AtomicLong(0);
/** Longest time (ms) a read lock was held since the last report. */
private final AtomicLong longestReadLockHeldIntervalMs = new AtomicLong(0);
+ /**
+ * The number of time the read lock
+ * has been held longer than the threshold.
+ */
+ private final AtomicLong numReadLockLongHold = new AtomicLong(0);
+ /**
+ * The number of time the write lock
+ * has been held for longer than the threshold.
+ */
+ private final AtomicLong numWriteLockLongHold = new AtomicLong(0);
@VisibleForTesting
static final String OP_NAME_OTHER = "OTHER";
@@ -168,6 +178,7 @@ class FSNamesystemLock {
final long readLockIntervalMs =
TimeUnit.NANOSECONDS.toMillis(readLockIntervalNanos);
if (needReport && readLockIntervalMs >= this.readLockReportingThresholdMs) {
+ numReadLockLongHold.incrementAndGet();
long localLongestReadLock;
do {
localLongestReadLock = longestReadLockHeldIntervalMs.get();
@@ -224,6 +235,7 @@ class FSNamesystemLock {
LogAction logAction = LogThrottlingHelper.DO_NOT_LOG;
if (needReport &&
writeLockIntervalMs >= this.writeLockReportingThresholdMs) {
+ numWriteLockLongHold.incrementAndGet();
logAction = writeLockReportLogger
.record("write", currentTimeMs, writeLockIntervalMs);
}
@@ -264,6 +276,28 @@ class FSNamesystemLock {
}
/**
+ * Returns the number of time the read lock
+ * has been held longer than the threshold.
+ *
+ * @return long - Number of time the read lock
+ * has been held longer than the threshold
+ */
+ public long getNumOfReadLockLongHold() {
+ return numReadLockLongHold.get();
+ }
+
+ /**
+ * Returns the number of time the write lock
+ * has been held longer than the threshold.
+ *
+ * @return long - Number of time the write lock
+ * has been held longer than the threshold.
+ */
+ public long getNumOfWriteLockLongHold() {
+ return numWriteLockLongHold.get();
+ }
+
+ /**
* Returns the QueueLength of waiting threads.
*
* A larger number indicates greater lock contention.
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org