TestDatanodeReport.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements.  See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership.  The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License.  You may obtain a copy of the License at
  9. *
  10. *     http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. package org.apache.hadoop.hdfs;
  19. import java.net.InetSocketAddress;
  20. import java.util.ArrayList;
  21. import junit.framework.TestCase;
  22. import org.apache.hadoop.conf.Configuration;
  23. import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
  24. import org.apache.hadoop.hdfs.protocol.FSConstants.DatanodeReportType;
  25. import org.apache.hadoop.hdfs.server.datanode.DataNode;
  26. /**
  27.  * This test ensures the all types of data node report work correctly.
  28.  */
  29. public class TestDatanodeReport extends TestCase {
  30.   final static private Configuration conf = new Configuration();
  31.   final static private int NUM_OF_DATANODES = 4;
  32.     
  33.   /**
  34.    * This test attempts to different types of datanode report.
  35.    */
  36.   public void testDatanodeReport() throws Exception {
  37.     conf.setInt(
  38.         "heartbeat.recheck.interval", 500); // 0.5s
  39.     MiniDFSCluster cluster = 
  40.       new MiniDFSCluster(conf, NUM_OF_DATANODES, true, null);
  41.     try {
  42.       //wait until the cluster is up
  43.       cluster.waitActive();
  44.       InetSocketAddress addr = new InetSocketAddress("localhost",
  45.           cluster.getNameNodePort());
  46.       DFSClient client = new DFSClient(addr, conf);
  47.       assertEquals(client.datanodeReport(DatanodeReportType.ALL).length,
  48.                    NUM_OF_DATANODES);
  49.       assertEquals(client.datanodeReport(DatanodeReportType.LIVE).length,
  50.                    NUM_OF_DATANODES);
  51.       assertEquals(client.datanodeReport(DatanodeReportType.DEAD).length, 0);
  52.       // bring down one datanode
  53.       ArrayList<DataNode> datanodes = cluster.getDataNodes();
  54.       datanodes.remove(datanodes.size()-1).shutdown();
  55.       DatanodeInfo[] nodeInfo = client.datanodeReport(DatanodeReportType.DEAD);
  56.       while (nodeInfo.length != 1) {
  57.         try {
  58.           Thread.sleep(500);
  59.         } catch (Exception e) {
  60.         }
  61.         nodeInfo = client.datanodeReport(DatanodeReportType.DEAD);
  62.       }
  63.       assertEquals(client.datanodeReport(DatanodeReportType.LIVE).length,
  64.                    NUM_OF_DATANODES-1);
  65.       assertEquals(client.datanodeReport(DatanodeReportType.ALL).length,
  66.                    NUM_OF_DATANODES);
  67.     }finally {
  68.       cluster.shutdown();
  69.     }
  70.   }
  71.  
  72.   public static void main(String[] args) throws Exception {
  73.     new TestDatanodeReport().testDatanodeReport();
  74.   }
  75.   
  76. }