hadoop-common-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From c..@apache.org
Subject svn commit: r906805 - in /hadoop/common/branches/branch-0.20: CHANGES.txt src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
Date Fri, 05 Feb 2010 04:07:57 GMT
Author: cos
Date: Fri Feb  5 04:07:57 2010
New Revision: 906805

URL: http://svn.apache.org/viewvc?rev=906805&view=rev
Log:
HDFS-919. Add tests for getBlockLocations and totalLoad metrics. Contributed by Ravi Phulari.

Modified:
    hadoop/common/branches/branch-0.20/CHANGES.txt
    hadoop/common/branches/branch-0.20/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java

Modified: hadoop/common/branches/branch-0.20/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20/CHANGES.txt?rev=906805&r1=906804&r2=906805&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20/CHANGES.txt (original)
+++ hadoop/common/branches/branch-0.20/CHANGES.txt Fri Feb  5 04:07:57 2010
@@ -12,6 +12,9 @@
     HDFS-919. Create test to validate the BlocksVerified metric (Gary Murry
     via cos)
 
+    HDFS-907. Add tests for getBlockLocations and totalLoad metrics.
+    (Ravi Phulari via cos)
+
   BUG FIXES
 
     MAPREDUCE-112. Add counters for reduce input, output records to the new API.

Modified: hadoop/common/branches/branch-0.20/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java?rev=906805&r1=906804&r2=906805&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
(original)
+++ hadoop/common/branches/branch-0.20/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
Fri Feb  5 04:07:57 2010
@@ -17,23 +17,30 @@
  */
 package org.apache.hadoop.hdfs.server.namenode.metrics;
 
+import java.io.DataInputStream;
 import java.io.IOException;
 import java.util.Random;
 
 import junit.framework.TestCase;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.hdfs.server.namenode.NameNode;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hdfs.DFSTestUtil;
 import org.apache.hadoop.hdfs.DistributedFileSystem;
 import org.apache.hadoop.hdfs.MiniDFSCluster;
 import org.apache.hadoop.hdfs.protocol.LocatedBlock;
 import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
+import org.mortbay.log.Log;
 
 /**
  * Test for metrics published by the Namenode
  */
 public class TestNameNodeMetrics extends TestCase {
+  // Number of datanodes in the cluster
+  private static final int DATANODE_COUNT = 3; 
+	
   private static final Configuration CONF = new Configuration();
   static {
     CONF.setLong("dfs.block.size", 100);
@@ -47,6 +54,8 @@
   private DistributedFileSystem fs;
   private Random rand = new Random();
   private FSNamesystem namesystem;
+  private NameNodeMetrics nnMetrics;
+  private NameNode nn;
 
   @Override
   protected void setUp() throws Exception {
@@ -55,6 +64,8 @@
     namesystem = cluster.getNameNode().getNamesystem();
     fs = (DistributedFileSystem) cluster.getFileSystem();
     metrics = namesystem.getFSNamesystemMetrics();
+    nn = cluster.getNameNode();
+    nnMetrics = nn.getNameNodeMetrics();
   }
   
   @Override
@@ -75,6 +86,22 @@
     metrics.doUpdates(null);
   }
 
+  private void updateNNMetrics() throws Exception {
+    //Wait for nnmetrics update
+    Thread.sleep(1000);
+    nnMetrics.doUpdates(null);
+  }
+ 
+  private void readFile(FileSystem fileSys,String path) throws IOException {
+    //Just read file so that getNumBlockLocations are incremented
+    Path name = new Path(path);
+    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
@@ -148,4 +175,72 @@
     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);
+  
+    String file1_path = "/tmp/filePath";
+
+    // 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());
+  }
 }



Mime
View raw message