From 84b00dd616f14f8032fe16a2047630d1d7378d40 Mon Sep 17 00:00:00 2001 From: "secfree.teng" Date: Tue, 28 Dec 2021 19:54:33 +0800 Subject: [PATCH 1/6] Add testNodeLocalMetrics --- .../server/datanode/TestDataNodeMetrics.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java index e1501fadce938..84f2d3c76fd1a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java @@ -25,6 +25,7 @@ import static org.junit.Assert.*; import java.io.Closeable; +import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -38,6 +39,8 @@ import net.jcip.annotations.NotThreadSafe; import org.apache.hadoop.fs.StorageType; import org.apache.hadoop.hdfs.MiniDFSNNTopology; +import org.apache.hadoop.net.unix.DomainSocket; +import org.apache.hadoop.net.unix.TemporarySocketDirectory; import org.apache.hadoop.util.Lists; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -654,4 +657,38 @@ public void testNNRpcMetricsWithFederationAndHA() throws IOException { assertCounter("HeartbeatsForns1-nn1NumOps", 1L, rb); assertCounter("HeartbeatsNumOps", 4L, rb); } + + @Test + public void testNodeLocalMetrics() throws Exception { + Configuration conf = new HdfsConfiguration(); + conf.setBoolean(HdfsClientConfigKeys.Read.ShortCircuit.KEY, true); + TemporarySocketDirectory sockDir = new TemporarySocketDirectory(); + DomainSocket.disableBindPathValidation(); + conf.set(DFSConfigKeys.DFS_DOMAIN_SOCKET_PATH_KEY, + new File(sockDir.getDir(), + "TestShortCircuitLocalRead._PORT.sock").getAbsolutePath()); + SimulatedFSDataset.setFactory(conf); + MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).build(); + try { + cluster.waitActive(); + FileSystem fs = cluster.getFileSystem(); + Path testFile = new Path("/testNodeLocalMetrics.txt"); + long file_len = 10; + DFSTestUtil.createFile(fs, testFile, file_len, (short)1, 1L); + DFSTestUtil.readFile(fs, testFile); + List datanodes = cluster.getDataNodes(); + assertEquals(datanodes.size(), 1); + DataNode datanode = datanodes.get(0); + MetricsRecordBuilder rb = getMetrics(datanode.getMetrics().name()); + + // Write related metrics + assertCounter("WritesFromLocalClient", 1L, rb); + // Read related metrics + assertCounter("ReadsFromLocalClient", 1L, rb); + } finally { + if (cluster != null) { + cluster.shutdown(); + } + } + } } From ddc3c21f6528c16a2b6545b277e5fc220b94ac1d Mon Sep 17 00:00:00 2001 From: "secfree.teng" Date: Sat, 1 Jan 2022 23:57:06 +0800 Subject: [PATCH 2/6] HDFS-16406. ReadsFromLocalClient counts short-circuit reads --- .../apache/hadoop/hdfs/server/datanode/DataXceiver.java | 3 +++ .../hadoop/hdfs/server/datanode/TestDataNodeMetrics.java | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java index 46acd5a647aa8..797ec08436d1b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java @@ -415,6 +415,9 @@ public void requestShortCircuitFds(final ExtendedBlock blk, "Not verifying {}", slotId); } success = true; + // update metrics + datanode.metrics.addReadBlockOp(elapsed()); + datanode.metrics.incrReadsFromClient(true, blk.getNumBytes()); } } finally { if ((!success) && (registeredSlotId != null)) { diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java index 84f2d3c76fd1a..a41d21f7c5403 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java @@ -42,6 +42,7 @@ import org.apache.hadoop.net.unix.DomainSocket; import org.apache.hadoop.net.unix.TemporarySocketDirectory; import org.apache.hadoop.util.Lists; +import org.junit.Assume; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.hadoop.conf.Configuration; @@ -660,15 +661,15 @@ public void testNNRpcMetricsWithFederationAndHA() throws IOException { @Test public void testNodeLocalMetrics() throws Exception { + Assume.assumeTrue(null == DomainSocket.getLoadingFailureReason()); Configuration conf = new HdfsConfiguration(); conf.setBoolean(HdfsClientConfigKeys.Read.ShortCircuit.KEY, true); TemporarySocketDirectory sockDir = new TemporarySocketDirectory(); DomainSocket.disableBindPathValidation(); conf.set(DFSConfigKeys.DFS_DOMAIN_SOCKET_PATH_KEY, new File(sockDir.getDir(), - "TestShortCircuitLocalRead._PORT.sock").getAbsolutePath()); - SimulatedFSDataset.setFactory(conf); - MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).build(); + "testNodeLocalMetrics._PORT.sock").getAbsolutePath()); + MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).numDataNodes(1).build(); try { cluster.waitActive(); FileSystem fs = cluster.getFileSystem(); From ee7e0d3a06ee439c2be1fa78b1b9d118c7fb6d40 Mon Sep 17 00:00:00 2001 From: "secfree.teng" Date: Fri, 14 Jan 2022 12:34:14 +0800 Subject: [PATCH 3/6] HDFS-16406. Fix var name --- .../hadoop/hdfs/server/datanode/TestDataNodeMetrics.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java index a41d21f7c5403..e69efafe7d99f 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java @@ -674,8 +674,7 @@ public void testNodeLocalMetrics() throws Exception { cluster.waitActive(); FileSystem fs = cluster.getFileSystem(); Path testFile = new Path("/testNodeLocalMetrics.txt"); - long file_len = 10; - DFSTestUtil.createFile(fs, testFile, file_len, (short)1, 1L); + DFSTestUtil.createFile(fs, testFile, 10L, (short)1, 1L); DFSTestUtil.readFile(fs, testFile); List datanodes = cluster.getDataNodes(); assertEquals(datanodes.size(), 1); From 40f0acef39ed822e93b541cf5cf0f8fbce562fce Mon Sep 17 00:00:00 2001 From: "secfree.teng" Date: Sat, 15 Jan 2022 11:02:47 +0800 Subject: [PATCH 4/6] HDFS-16406. Trigger CI 3 --- .../apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java index e69efafe7d99f..ea3c2343e19ba 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java @@ -678,6 +678,7 @@ public void testNodeLocalMetrics() throws Exception { DFSTestUtil.readFile(fs, testFile); List datanodes = cluster.getDataNodes(); assertEquals(datanodes.size(), 1); + DataNode datanode = datanodes.get(0); MetricsRecordBuilder rb = getMetrics(datanode.getMetrics().name()); From 40109acd47ceebc7f730e4370a21281590676013 Mon Sep 17 00:00:00 2001 From: "secfree.teng" Date: Tue, 25 Jan 2022 21:54:15 +0800 Subject: [PATCH 5/6] HDFS-16406. Trigger CI 4 From 85d116cd5d867fb75a7e99b50c83f7a85bbcfc66 Mon Sep 17 00:00:00 2001 From: "secfree.teng" Date: Fri, 28 Jan 2022 18:25:42 +0800 Subject: [PATCH 6/6] HDFS-16406. Fix assert parameters sequence --- .../apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java index ea3c2343e19ba..f8c89d4abe168 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMetrics.java @@ -677,7 +677,7 @@ public void testNodeLocalMetrics() throws Exception { DFSTestUtil.createFile(fs, testFile, 10L, (short)1, 1L); DFSTestUtil.readFile(fs, testFile); List datanodes = cluster.getDataNodes(); - assertEquals(datanodes.size(), 1); + assertEquals(1, datanodes.size()); DataNode datanode = datanodes.get(0); MetricsRecordBuilder rb = getMetrics(datanode.getMetrics().name());