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 om...@apache.org on 2011/03/04 04:45:49 UTC
svn commit: r1077146 -
/hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
Author: omalley
Date: Fri Mar 4 03:45:48 2011
New Revision: 1077146
URL: http://svn.apache.org/viewvc?rev=1077146&view=rev
Log:
commit 9209f5cbc3ea059ba057f564e0c14b126ce0d870
Author: Ravi Phulari <rp...@yahoo-inc.com>
Date: Thu Feb 4 18:47:54 2010 -0800
HDFS:907 from https://issues.apache.org/jira/secure/attachment/12434919/HDFS907s.patch
+++ b/YAHOO-CHANGES.txt
+
+ HDFS-907. Add tests for getBlockLocations and totalLoad metrics. (rphulari)
Modified:
hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
Modified: hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java?rev=1077146&r1=1077145&r2=1077146&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java (original)
+++ hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java Fri Mar 4 03:45:48 2011
@@ -19,6 +19,7 @@ package org.apache.hadoop.hdfs.server.na
import java.io.IOException;
import java.util.Random;
+import java.io.DataInputStream;
import junit.framework.TestCase;
@@ -29,6 +30,9 @@ import org.apache.hadoop.hdfs.Distribute
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.hdfs.protocol.LocatedBlock;
import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.hdfs.server.namenode.NameNode;
+import org.mortbay.log.Log;
/**
* Test for metrics published by the Namenode
@@ -53,6 +57,8 @@ public class TestNameNodeMetrics extends
private DistributedFileSystem fs;
private Random rand = new Random();
private FSNamesystem namesystem;
+ private NameNodeMetrics nnMetrics;
+ private NameNode nn;
private static Path getTestPath(String fileName) {
return new Path(TEST_ROOT_DIR_PATH, fileName);
@@ -65,6 +71,8 @@ public class TestNameNodeMetrics extends
namesystem = cluster.getNameNode().getNamesystem();
fs = (DistributedFileSystem) cluster.getFileSystem();
metrics = namesystem.getFSNamesystemMetrics();
+ nn = cluster.getNameNode();
+ nnMetrics = nn.getNameNodeMetrics();
}
@Override
@@ -84,6 +92,20 @@ public class TestNameNodeMetrics extends
metrics.doUpdates(null);
}
+ private void updateNNMetrics() throws Exception {
+ //Wait for nnmetrics update
+ Thread.sleep(1000);
+ nnMetrics.doUpdates(null);
+ }
+
+ private void readFile(FileSystem fileSys,Path name) throws IOException {
+ //Just read file so that getNumBlockLocations are incremented
+ DataInputStream stm = fileSys.open(name);
+ byte [] buffer = new byte[4];
+ int bytesRead = stm.read(buffer,0,4);
+ stm.close();
+ }
+
/** Test metrics associated with addition of a file */
public void testFileAdd() throws Exception {
// Add files with 100 blocks
@@ -165,4 +187,72 @@ public class TestNameNodeMetrics extends
updateMetrics();
assertEquals(0, metrics.underReplicatedBlocks.get());
}
+
+ /**
+ * Test numGetBlockLocations metric
+ *
+ * Test initiates and performs file operations (create,read,close,open file )
+ * which results in metrics changes. These metrics changes are updated and
+ * tested for correctness.
+ *
+ * create file operation does not increment numGetBlockLocation
+ * one read file operation increments numGetBlockLocation by 1
+ *
+ * @throws IOException in case of an error
+ */
+ public void testGetBlockLocationMetric() throws Exception{
+ final String METHOD_NAME = "TestGetBlockLocationMetric";
+ Log.info("Running test "+METHOD_NAME);
+
+ Path file1_Path = new Path(TEST_ROOT_DIR_PATH, "file1.dat");
+
+ // When cluster starts first time there are no file (read,create,open)
+ // operations so metric numGetBlockLocations should be 0.
+ // Verify that numGetBlockLocations for current interval
+ // and previous interval are 0
+ assertEquals("numGetBlockLocations for previous interval is incorrect",
+ 0,nnMetrics.numGetBlockLocations.getPreviousIntervalValue());
+ assertEquals("numGetBlockLocations for current interval is incorrect",
+ 0,nnMetrics.numGetBlockLocations.getCurrentIntervalValue());
+
+ //Perform create file operation
+ createFile(file1_Path,100,(short)2);
+ // Update NameNode metrics
+ updateNNMetrics();
+
+ //Create file does not change numGetBlockLocations metric
+ //expect numGetBlockLocations = 0 for previous and current interval
+ assertEquals("numGetBlockLocations for previous interval is incorrect",
+ 0,nnMetrics.numGetBlockLocations.getPreviousIntervalValue());
+ // Verify numGetBlockLocations for current interval is 0
+ assertEquals("numGetBlockLocations for current interval is incorrect",
+ 0,nnMetrics.numGetBlockLocations.getCurrentIntervalValue());
+
+ // Open and read file operation increments numGetBlockLocations
+ // Perform read file operation on earlier created file
+ readFile(fs, file1_Path);
+ // Update NameNode metrics
+ updateNNMetrics();
+ // Verify read file operation has incremented numGetBlockLocations by 1
+ assertEquals("numGetBlockLocations for previous interval is incorrect",
+ 1,nnMetrics.numGetBlockLocations.getPreviousIntervalValue());
+ // Verify numGetBlockLocations for current interval is 0
+ assertEquals("numGetBlockLocations for current interval is incorrect",
+ 0,nnMetrics.numGetBlockLocations.getCurrentIntervalValue());
+
+ // opening and reading file twice will increment numGetBlockLocations by 2
+ readFile(fs, file1_Path);
+ readFile(fs, file1_Path);
+ updateNNMetrics();
+ assertEquals("numGetBlockLocations for previous interval is incorrect",
+ 2,nnMetrics.numGetBlockLocations.getPreviousIntervalValue());
+ // Verify numGetBlockLocations for current interval is 0
+ assertEquals("numGetBlockLocations for current interval is incorrect",
+ 0,nnMetrics.numGetBlockLocations.getCurrentIntervalValue());
+
+ // Verify total load metrics, total load = Data Node started.
+ updateMetrics();
+ assertEquals("Metrics TotalLoad is incorrect"
+ ,DATANODE_COUNT,metrics.totalLoad.get());
+ }
}