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

网格计算

开发平台:

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 junit.framework.TestCase;
  20. import java.io.*;
  21. import java.util.Random;
  22. import java.net.*;
  23. import org.apache.hadoop.conf.Configuration;
  24. import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
  25. import org.apache.hadoop.hdfs.protocol.FSConstants.DatanodeReportType;
  26. import org.apache.hadoop.fs.FSDataOutputStream;
  27. import org.apache.hadoop.fs.FileSystem;
  28. import org.apache.hadoop.fs.Path;
  29. import org.apache.hadoop.fs.FileStatus;
  30. import java.text.SimpleDateFormat;
  31. import java.util.Date;
  32. /**
  33.  * This class tests the access time on files.
  34.  *
  35.  */
  36. public class TestSetTimes extends TestCase {
  37.   static final long seed = 0xDEADBEEFL;
  38.   static final int blockSize = 8192;
  39.   static final int fileSize = 16384;
  40.   static final int numDatanodes = 1;
  41.   static final SimpleDateFormat dateForm = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  42.   Random myrand = new Random();
  43.   Path hostsFile;
  44.   Path excludeFile;
  45.   private FSDataOutputStream writeFile(FileSystem fileSys, Path name, int repl)
  46.     throws IOException {
  47.     FSDataOutputStream stm = fileSys.create(name, true, 
  48.                                             fileSys.getConf().getInt("io.file.buffer.size", 4096),
  49.                                             (short)repl, (long)blockSize);
  50.     byte[] buffer = new byte[fileSize];
  51.     Random rand = new Random(seed);
  52.     rand.nextBytes(buffer);
  53.     stm.write(buffer);
  54.     return stm;
  55.   }
  56.   
  57.   private void cleanupFile(FileSystem fileSys, Path name) throws IOException {
  58.     assertTrue(fileSys.exists(name));
  59.     fileSys.delete(name, true);
  60.     assertTrue(!fileSys.exists(name));
  61.   }
  62.   private void printDatanodeReport(DatanodeInfo[] info) {
  63.     System.out.println("-------------------------------------------------");
  64.     for (int i = 0; i < info.length; i++) {
  65.       System.out.println(info[i].getDatanodeReport());
  66.       System.out.println();
  67.     }
  68.   }
  69.   /**
  70.    * Tests mod & access time in DFS.
  71.    */
  72.   public void testTimes() throws IOException {
  73.     Configuration conf = new Configuration();
  74.     final int MAX_IDLE_TIME = 2000; // 2s
  75.     conf.setInt("ipc.client.connection.maxidletime", MAX_IDLE_TIME);
  76.     conf.setInt("heartbeat.recheck.interval", 1000);
  77.     conf.setInt("dfs.heartbeat.interval", 1);
  78.     MiniDFSCluster cluster = new MiniDFSCluster(conf, numDatanodes, true, null);
  79.     cluster.waitActive();
  80.     final int nnport = cluster.getNameNodePort();
  81.     InetSocketAddress addr = new InetSocketAddress("localhost", 
  82.                                                    cluster.getNameNodePort());
  83.     DFSClient client = new DFSClient(addr, conf);
  84.     DatanodeInfo[] info = client.datanodeReport(DatanodeReportType.LIVE);
  85.     assertEquals("Number of Datanodes ", numDatanodes, info.length);
  86.     FileSystem fileSys = cluster.getFileSystem();
  87.     int replicas = 1;
  88.     assertTrue(fileSys instanceof DistributedFileSystem);
  89.     try {
  90.       //
  91.       // create file and record atime/mtime
  92.       //
  93.       System.out.println("Creating testdir1 and testdir1/test1.dat.");
  94.       Path dir1 = new Path("testdir1");
  95.       Path file1 = new Path(dir1, "test1.dat");
  96.       FSDataOutputStream stm = writeFile(fileSys, file1, replicas);
  97.       FileStatus stat = fileSys.getFileStatus(file1);
  98.       long atimeBeforeClose = stat.getAccessTime();
  99.       String adate = dateForm.format(new Date(atimeBeforeClose));
  100.       System.out.println("atime on " + file1 + " before close is " + 
  101.                          adate + " (" + atimeBeforeClose + ")");
  102.       assertTrue(atimeBeforeClose != 0);
  103.       stm.close();
  104.       stat = fileSys.getFileStatus(file1);
  105.       long atime1 = stat.getAccessTime();
  106.       long mtime1 = stat.getModificationTime();
  107.       adate = dateForm.format(new Date(atime1));
  108.       String mdate = dateForm.format(new Date(mtime1));
  109.       System.out.println("atime on " + file1 + " is " + adate + 
  110.                          " (" + atime1 + ")");
  111.       System.out.println("mtime on " + file1 + " is " + mdate + 
  112.                          " (" + mtime1 + ")");
  113.       assertTrue(atime1 != 0);
  114.       //
  115.       // record dir times
  116.       //
  117.       stat = fileSys.getFileStatus(dir1);
  118.       long mdir1 = stat.getAccessTime();
  119.       assertTrue(mdir1 == 0);
  120.       // set the access time to be one day in the past
  121.       long atime2 = atime1 - (24L * 3600L * 1000L);
  122.       fileSys.setTimes(file1, -1, atime2);
  123.       // check new access time on file
  124.       stat = fileSys.getFileStatus(file1);
  125.       long atime3 = stat.getAccessTime();
  126.       String adate3 = dateForm.format(new Date(atime3));
  127.       System.out.println("new atime on " + file1 + " is " + 
  128.                          adate3 + " (" + atime3 + ")");
  129.       assertTrue(atime2 == atime3);
  130.       assertTrue(mtime1 == stat.getModificationTime());
  131.       // set the modification time to be 1 hour in the past
  132.       long mtime2 = mtime1 - (3600L * 1000L);
  133.       fileSys.setTimes(file1, mtime2, -1);
  134.       // check new modification time on file
  135.       stat = fileSys.getFileStatus(file1);
  136.       long mtime3 = stat.getModificationTime();
  137.       String mdate3 = dateForm.format(new Date(mtime3));
  138.       System.out.println("new mtime on " + file1 + " is " + 
  139.                          mdate3 + " (" + mtime3 + ")");
  140.       assertTrue(atime2 == stat.getAccessTime());
  141.       assertTrue(mtime2 == mtime3);
  142.       // shutdown cluster and restart
  143.       cluster.shutdown();
  144.       try {Thread.sleep(2*MAX_IDLE_TIME);} catch (InterruptedException e) {}
  145.       cluster = new MiniDFSCluster(nnport, conf, 1, false, true,
  146.                                    null, null, null);
  147.       cluster.waitActive();
  148.       fileSys = cluster.getFileSystem();
  149.       // verify that access times and modification times persist after a
  150.       // cluster restart.
  151.       System.out.println("Verifying times after cluster restart");
  152.       stat = fileSys.getFileStatus(file1);
  153.       assertTrue(atime2 == stat.getAccessTime());
  154.       assertTrue(mtime3 == stat.getModificationTime());
  155.     
  156.       cleanupFile(fileSys, file1);
  157.       cleanupFile(fileSys, dir1);
  158.     } catch (IOException e) {
  159.       info = client.datanodeReport(DatanodeReportType.ALL);
  160.       printDatanodeReport(info);
  161.       throw e;
  162.     } finally {
  163.       fileSys.close();
  164.       cluster.shutdown();
  165.     }
  166.   }
  167.   public static void main(String[] args) throws Exception {
  168.     new TestSetTimes().testTimes();
  169.   }
  170. }