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

网格计算

开发平台:

Java

  1. package org.apache.hadoop.filecache;
  2. import java.io.IOException;
  3. import java.net.URI;
  4. import java.util.Random;
  5. import org.apache.hadoop.conf.Configuration;
  6. import org.apache.hadoop.fs.FSDataOutputStream;
  7. import org.apache.hadoop.fs.FileStatus;
  8. import org.apache.hadoop.fs.FileSystem;
  9. import org.apache.hadoop.fs.Path;
  10. import junit.framework.TestCase;
  11. public class TestDistributedCache extends TestCase {
  12.   
  13.   static final URI LOCAL_FS = URI.create("file:///");
  14.   private static String TEST_CACHE_BASE_DIR =
  15.     new Path(System.getProperty("test.build.data","/tmp/cachebasedir"))
  16.     .toString().replace(' ', '+');
  17.   private static String TEST_ROOT_DIR =
  18.     System.getProperty("test.build.data", "/tmp/distributedcache");
  19.   private static final int TEST_FILE_SIZE = 4 * 1024; // 4K
  20.   private static final int LOCAL_CACHE_LIMIT = 5 * 1024; //5K
  21.   private Configuration conf;
  22.   private Path firstCacheFile;
  23.   private Path secondCacheFile;
  24.   private FileSystem localfs;
  25.   
  26.   /**
  27.    * @see TestCase#setUp()
  28.    */
  29.   @Override
  30.   protected void setUp() throws IOException {
  31.     conf = new Configuration();
  32.     conf.setLong("local.cache.size", LOCAL_CACHE_LIMIT);
  33.     localfs = FileSystem.get(LOCAL_FS, conf);
  34.     firstCacheFile = new Path(TEST_ROOT_DIR+"/firstcachefile");
  35.     secondCacheFile = new Path(TEST_ROOT_DIR+"/secondcachefile");
  36.     createTempFile(localfs, firstCacheFile);
  37.     createTempFile(localfs, secondCacheFile);
  38.   }
  39.   
  40.   /** test delete cache */
  41.   public void testDeleteCache() throws Exception {
  42.     DistributedCache.getLocalCache(firstCacheFile.toUri(), conf, new Path(TEST_CACHE_BASE_DIR), 
  43.         false, System.currentTimeMillis(), new Path(TEST_ROOT_DIR));
  44.     DistributedCache.releaseCache(firstCacheFile.toUri(), conf);
  45.     //in above code,localized a file of size 4K and then release the cache which will cause the cache 
  46.     //be deleted when the limit goes out. The below code localize another cache which's designed to 
  47.     //sweep away the first cache.
  48.     DistributedCache.getLocalCache(secondCacheFile.toUri(), conf, new Path(TEST_CACHE_BASE_DIR), 
  49.         false, System.currentTimeMillis(), new Path(TEST_ROOT_DIR));
  50.     FileStatus[] dirStatuses = localfs.listStatus(new Path(TEST_CACHE_BASE_DIR));
  51.     assertTrue("DistributedCache failed deleting old cache when the cache store is full.",
  52.         dirStatuses.length > 1);
  53.   }
  54.   private void createTempFile(FileSystem fs, Path p) throws IOException {
  55.     FSDataOutputStream out = fs.create(p);
  56.     byte[] toWrite = new byte[TEST_FILE_SIZE];
  57.     new Random().nextBytes(toWrite);
  58.     out.write(toWrite);
  59.     out.close();
  60.     FileSystem.LOG.info("created: " + p + ", size=" + TEST_FILE_SIZE);
  61.   }
  62.   
  63.   /**
  64.    * @see TestCase#tearDown()
  65.    */
  66.   @Override
  67.   protected void tearDown() throws IOException {
  68.     localfs.delete(firstCacheFile, true);
  69.     localfs.delete(secondCacheFile, true);
  70.     localfs.close();
  71.   }
  72. }