Java 类org.apache.hadoop.hdfs.server.namenode.NameNodeResourceChecker.CheckedVolume 实例源码

项目:hadoop    文件:TestNameNodeResourceChecker.java   
/**
 * Test that the NN is considered to be out of resources only once all
 * redundant configured volumes are low on resources, or when any required
 * volume is low on resources. 
 */
@Test
public void testLowResourceVolumePolicy() throws IOException, URISyntaxException {
  Configuration conf = new Configuration();
  File nameDir1 = new File(BASE_DIR, "name-dir1");
  File nameDir2 = new File(BASE_DIR, "name-dir2");
  nameDir1.mkdirs();
  nameDir2.mkdirs();

  conf.set(DFSConfigKeys.DFS_NAMENODE_EDITS_DIR_KEY,
      nameDir1.getAbsolutePath() + "," + nameDir2.getAbsolutePath());
  conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKED_VOLUMES_MINIMUM_KEY, 2);

  NameNodeResourceChecker nnrc = new NameNodeResourceChecker(conf);

  // For the purpose of this test, we need to force the name dirs to appear to
  // be on different volumes.
  Map<String, CheckedVolume> volumes = new HashMap<String, CheckedVolume>();
  CheckedVolume volume1 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume2 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume3 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume4 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume5 = Mockito.mock(CheckedVolume.class);
  Mockito.when(volume1.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume2.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume5.isResourceAvailable()).thenReturn(true);

  // Make volumes 4 and 5 required.
  Mockito.when(volume4.isRequired()).thenReturn(true);
  Mockito.when(volume5.isRequired()).thenReturn(true);

  volumes.put("volume1", volume1);
  volumes.put("volume2", volume2);
  volumes.put("volume3", volume3);
  volumes.put("volume4", volume4);
  volumes.put("volume5", volume5);
  nnrc.setVolumes(volumes);

  // Initially all dirs have space.
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 1/3 redundant dir is low on space.
  Mockito.when(volume1.isResourceAvailable()).thenReturn(false);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 2/3 redundant dirs are low on space.
  Mockito.when(volume2.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Lower the minimum number of redundant volumes that must be available.
  nnrc.setMinimumReduntdantVolumes(1);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // Just one required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Just the other required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());
}
项目:aliyun-oss-hadoop-fs    文件:TestNameNodeResourceChecker.java   
/**
 * Test that the NN is considered to be out of resources only once all
 * redundant configured volumes are low on resources, or when any required
 * volume is low on resources. 
 */
@Test
public void testLowResourceVolumePolicy() throws IOException, URISyntaxException {
  Configuration conf = new Configuration();
  File nameDir1 = new File(BASE_DIR, "name-dir1");
  File nameDir2 = new File(BASE_DIR, "name-dir2");
  nameDir1.mkdirs();
  nameDir2.mkdirs();

  conf.set(DFSConfigKeys.DFS_NAMENODE_EDITS_DIR_KEY,
      nameDir1.getAbsolutePath() + "," + nameDir2.getAbsolutePath());
  conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKED_VOLUMES_MINIMUM_KEY, 2);

  NameNodeResourceChecker nnrc = new NameNodeResourceChecker(conf);

  // For the purpose of this test, we need to force the name dirs to appear to
  // be on different volumes.
  Map<String, CheckedVolume> volumes = new HashMap<String, CheckedVolume>();
  CheckedVolume volume1 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume2 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume3 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume4 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume5 = Mockito.mock(CheckedVolume.class);
  Mockito.when(volume1.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume2.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume5.isResourceAvailable()).thenReturn(true);

  // Make volumes 4 and 5 required.
  Mockito.when(volume4.isRequired()).thenReturn(true);
  Mockito.when(volume5.isRequired()).thenReturn(true);

  volumes.put("volume1", volume1);
  volumes.put("volume2", volume2);
  volumes.put("volume3", volume3);
  volumes.put("volume4", volume4);
  volumes.put("volume5", volume5);
  nnrc.setVolumes(volumes);

  // Initially all dirs have space.
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 1/3 redundant dir is low on space.
  Mockito.when(volume1.isResourceAvailable()).thenReturn(false);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 2/3 redundant dirs are low on space.
  Mockito.when(volume2.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Lower the minimum number of redundant volumes that must be available.
  nnrc.setMinimumReduntdantVolumes(1);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // Just one required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Just the other required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());
}
项目:big-c    文件:TestNameNodeResourceChecker.java   
/**
 * Test that the NN is considered to be out of resources only once all
 * redundant configured volumes are low on resources, or when any required
 * volume is low on resources. 
 */
@Test
public void testLowResourceVolumePolicy() throws IOException, URISyntaxException {
  Configuration conf = new Configuration();
  File nameDir1 = new File(BASE_DIR, "name-dir1");
  File nameDir2 = new File(BASE_DIR, "name-dir2");
  nameDir1.mkdirs();
  nameDir2.mkdirs();

  conf.set(DFSConfigKeys.DFS_NAMENODE_EDITS_DIR_KEY,
      nameDir1.getAbsolutePath() + "," + nameDir2.getAbsolutePath());
  conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKED_VOLUMES_MINIMUM_KEY, 2);

  NameNodeResourceChecker nnrc = new NameNodeResourceChecker(conf);

  // For the purpose of this test, we need to force the name dirs to appear to
  // be on different volumes.
  Map<String, CheckedVolume> volumes = new HashMap<String, CheckedVolume>();
  CheckedVolume volume1 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume2 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume3 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume4 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume5 = Mockito.mock(CheckedVolume.class);
  Mockito.when(volume1.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume2.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume5.isResourceAvailable()).thenReturn(true);

  // Make volumes 4 and 5 required.
  Mockito.when(volume4.isRequired()).thenReturn(true);
  Mockito.when(volume5.isRequired()).thenReturn(true);

  volumes.put("volume1", volume1);
  volumes.put("volume2", volume2);
  volumes.put("volume3", volume3);
  volumes.put("volume4", volume4);
  volumes.put("volume5", volume5);
  nnrc.setVolumes(volumes);

  // Initially all dirs have space.
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 1/3 redundant dir is low on space.
  Mockito.when(volume1.isResourceAvailable()).thenReturn(false);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 2/3 redundant dirs are low on space.
  Mockito.when(volume2.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Lower the minimum number of redundant volumes that must be available.
  nnrc.setMinimumReduntdantVolumes(1);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // Just one required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Just the other required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());
}
项目:hadoop-2.6.0-cdh5.4.3    文件:TestNameNodeResourceChecker.java   
/**
 * Test that the NN is considered to be out of resources only once all
 * redundant configured volumes are low on resources, or when any required
 * volume is low on resources. 
 */
@Test
public void testLowResourceVolumePolicy() throws IOException, URISyntaxException {
  Configuration conf = new Configuration();
  File nameDir1 = new File(BASE_DIR, "name-dir1");
  File nameDir2 = new File(BASE_DIR, "name-dir2");
  nameDir1.mkdirs();
  nameDir2.mkdirs();

  conf.set(DFSConfigKeys.DFS_NAMENODE_EDITS_DIR_KEY,
      nameDir1.getAbsolutePath() + "," + nameDir2.getAbsolutePath());
  conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKED_VOLUMES_MINIMUM_KEY, 2);

  NameNodeResourceChecker nnrc = new NameNodeResourceChecker(conf);

  // For the purpose of this test, we need to force the name dirs to appear to
  // be on different volumes.
  Map<String, CheckedVolume> volumes = new HashMap<String, CheckedVolume>();
  CheckedVolume volume1 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume2 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume3 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume4 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume5 = Mockito.mock(CheckedVolume.class);
  Mockito.when(volume1.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume2.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume5.isResourceAvailable()).thenReturn(true);

  // Make volumes 4 and 5 required.
  Mockito.when(volume4.isRequired()).thenReturn(true);
  Mockito.when(volume5.isRequired()).thenReturn(true);

  volumes.put("volume1", volume1);
  volumes.put("volume2", volume2);
  volumes.put("volume3", volume3);
  volumes.put("volume4", volume4);
  volumes.put("volume5", volume5);
  nnrc.setVolumes(volumes);

  // Initially all dirs have space.
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 1/3 redundant dir is low on space.
  Mockito.when(volume1.isResourceAvailable()).thenReturn(false);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 2/3 redundant dirs are low on space.
  Mockito.when(volume2.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Lower the minimum number of redundant volumes that must be available.
  nnrc.setMinimumReduntdantVolumes(1);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // Just one required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Just the other required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());
}
项目:hadoop-plus    文件:TestNameNodeResourceChecker.java   
/**
 * Test that the NN is considered to be out of resources only once all
 * redundant configured volumes are low on resources, or when any required
 * volume is low on resources. 
 */
@Test
public void testLowResourceVolumePolicy() throws IOException, URISyntaxException {
  Configuration conf = new Configuration();
  File nameDir1 = new File(System.getProperty("test.build.data"), "name-dir1");
  File nameDir2 = new File(System.getProperty("test.build.data"), "name-dir2");
  nameDir1.mkdirs();
  nameDir2.mkdirs();

  conf.set(DFSConfigKeys.DFS_NAMENODE_EDITS_DIR_KEY,
      nameDir1.getAbsolutePath() + "," + nameDir2.getAbsolutePath());
  conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKED_VOLUMES_MINIMUM_KEY, 2);

  NameNodeResourceChecker nnrc = new NameNodeResourceChecker(conf);

  // For the purpose of this test, we need to force the name dirs to appear to
  // be on different volumes.
  Map<String, CheckedVolume> volumes = new HashMap<String, CheckedVolume>();
  CheckedVolume volume1 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume2 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume3 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume4 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume5 = Mockito.mock(CheckedVolume.class);
  Mockito.when(volume1.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume2.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume5.isResourceAvailable()).thenReturn(true);

  // Make volumes 4 and 5 required.
  Mockito.when(volume4.isRequired()).thenReturn(true);
  Mockito.when(volume5.isRequired()).thenReturn(true);

  volumes.put("volume1", volume1);
  volumes.put("volume2", volume2);
  volumes.put("volume3", volume3);
  volumes.put("volume4", volume4);
  volumes.put("volume5", volume5);
  nnrc.setVolumes(volumes);

  // Initially all dirs have space.
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 1/3 redundant dir is low on space.
  Mockito.when(volume1.isResourceAvailable()).thenReturn(false);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 2/3 redundant dirs are low on space.
  Mockito.when(volume2.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Lower the minimum number of redundant volumes that must be available.
  nnrc.setMinimumReduntdantVolumes(1);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // Just one required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Just the other required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());
}
项目:FlexMap    文件:TestNameNodeResourceChecker.java   
/**
 * Test that the NN is considered to be out of resources only once all
 * redundant configured volumes are low on resources, or when any required
 * volume is low on resources. 
 */
@Test
public void testLowResourceVolumePolicy() throws IOException, URISyntaxException {
  Configuration conf = new Configuration();
  File nameDir1 = new File(BASE_DIR, "name-dir1");
  File nameDir2 = new File(BASE_DIR, "name-dir2");
  nameDir1.mkdirs();
  nameDir2.mkdirs();

  conf.set(DFSConfigKeys.DFS_NAMENODE_EDITS_DIR_KEY,
      nameDir1.getAbsolutePath() + "," + nameDir2.getAbsolutePath());
  conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKED_VOLUMES_MINIMUM_KEY, 2);

  NameNodeResourceChecker nnrc = new NameNodeResourceChecker(conf);

  // For the purpose of this test, we need to force the name dirs to appear to
  // be on different volumes.
  Map<String, CheckedVolume> volumes = new HashMap<String, CheckedVolume>();
  CheckedVolume volume1 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume2 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume3 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume4 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume5 = Mockito.mock(CheckedVolume.class);
  Mockito.when(volume1.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume2.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume5.isResourceAvailable()).thenReturn(true);

  // Make volumes 4 and 5 required.
  Mockito.when(volume4.isRequired()).thenReturn(true);
  Mockito.when(volume5.isRequired()).thenReturn(true);

  volumes.put("volume1", volume1);
  volumes.put("volume2", volume2);
  volumes.put("volume3", volume3);
  volumes.put("volume4", volume4);
  volumes.put("volume5", volume5);
  nnrc.setVolumes(volumes);

  // Initially all dirs have space.
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 1/3 redundant dir is low on space.
  Mockito.when(volume1.isResourceAvailable()).thenReturn(false);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 2/3 redundant dirs are low on space.
  Mockito.when(volume2.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Lower the minimum number of redundant volumes that must be available.
  nnrc.setMinimumReduntdantVolumes(1);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // Just one required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Just the other required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());
}
项目:hadoop-TCP    文件:TestNameNodeResourceChecker.java   
/**
 * Test that the NN is considered to be out of resources only once all
 * redundant configured volumes are low on resources, or when any required
 * volume is low on resources. 
 */
@Test
public void testLowResourceVolumePolicy() throws IOException, URISyntaxException {
  Configuration conf = new Configuration();
  File nameDir1 = new File(System.getProperty("test.build.data"), "name-dir1");
  File nameDir2 = new File(System.getProperty("test.build.data"), "name-dir2");
  nameDir1.mkdirs();
  nameDir2.mkdirs();

  conf.set(DFSConfigKeys.DFS_NAMENODE_EDITS_DIR_KEY,
      nameDir1.getAbsolutePath() + "," + nameDir2.getAbsolutePath());
  conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKED_VOLUMES_MINIMUM_KEY, 2);

  NameNodeResourceChecker nnrc = new NameNodeResourceChecker(conf);

  // For the purpose of this test, we need to force the name dirs to appear to
  // be on different volumes.
  Map<String, CheckedVolume> volumes = new HashMap<String, CheckedVolume>();
  CheckedVolume volume1 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume2 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume3 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume4 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume5 = Mockito.mock(CheckedVolume.class);
  Mockito.when(volume1.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume2.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume5.isResourceAvailable()).thenReturn(true);

  // Make volumes 4 and 5 required.
  Mockito.when(volume4.isRequired()).thenReturn(true);
  Mockito.when(volume5.isRequired()).thenReturn(true);

  volumes.put("volume1", volume1);
  volumes.put("volume2", volume2);
  volumes.put("volume3", volume3);
  volumes.put("volume4", volume4);
  volumes.put("volume5", volume5);
  nnrc.setVolumes(volumes);

  // Initially all dirs have space.
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 1/3 redundant dir is low on space.
  Mockito.when(volume1.isResourceAvailable()).thenReturn(false);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 2/3 redundant dirs are low on space.
  Mockito.when(volume2.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Lower the minimum number of redundant volumes that must be available.
  nnrc.setMinimumReduntdantVolumes(1);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // Just one required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Just the other required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());
}
项目:hardfs    文件:TestNameNodeResourceChecker.java   
/**
 * Test that the NN is considered to be out of resources only once all
 * redundant configured volumes are low on resources, or when any required
 * volume is low on resources. 
 */
@Test
public void testLowResourceVolumePolicy() throws IOException, URISyntaxException {
  Configuration conf = new Configuration();
  File nameDir1 = new File(System.getProperty("test.build.data"), "name-dir1");
  File nameDir2 = new File(System.getProperty("test.build.data"), "name-dir2");
  nameDir1.mkdirs();
  nameDir2.mkdirs();

  conf.set(DFSConfigKeys.DFS_NAMENODE_EDITS_DIR_KEY,
      nameDir1.getAbsolutePath() + "," + nameDir2.getAbsolutePath());
  conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKED_VOLUMES_MINIMUM_KEY, 2);

  NameNodeResourceChecker nnrc = new NameNodeResourceChecker(conf);

  // For the purpose of this test, we need to force the name dirs to appear to
  // be on different volumes.
  Map<String, CheckedVolume> volumes = new HashMap<String, CheckedVolume>();
  CheckedVolume volume1 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume2 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume3 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume4 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume5 = Mockito.mock(CheckedVolume.class);
  Mockito.when(volume1.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume2.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume5.isResourceAvailable()).thenReturn(true);

  // Make volumes 4 and 5 required.
  Mockito.when(volume4.isRequired()).thenReturn(true);
  Mockito.when(volume5.isRequired()).thenReturn(true);

  volumes.put("volume1", volume1);
  volumes.put("volume2", volume2);
  volumes.put("volume3", volume3);
  volumes.put("volume4", volume4);
  volumes.put("volume5", volume5);
  nnrc.setVolumes(volumes);

  // Initially all dirs have space.
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 1/3 redundant dir is low on space.
  Mockito.when(volume1.isResourceAvailable()).thenReturn(false);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 2/3 redundant dirs are low on space.
  Mockito.when(volume2.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Lower the minimum number of redundant volumes that must be available.
  nnrc.setMinimumReduntdantVolumes(1);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // Just one required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Just the other required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());
}
项目:hadoop-on-lustre2    文件:TestNameNodeResourceChecker.java   
/**
 * Test that the NN is considered to be out of resources only once all
 * redundant configured volumes are low on resources, or when any required
 * volume is low on resources. 
 */
@Test
public void testLowResourceVolumePolicy() throws IOException, URISyntaxException {
  Configuration conf = new Configuration();
  File nameDir1 = new File(BASE_DIR, "name-dir1");
  File nameDir2 = new File(BASE_DIR, "name-dir2");
  nameDir1.mkdirs();
  nameDir2.mkdirs();

  conf.set(DFSConfigKeys.DFS_NAMENODE_EDITS_DIR_KEY,
      nameDir1.getAbsolutePath() + "," + nameDir2.getAbsolutePath());
  conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKED_VOLUMES_MINIMUM_KEY, 2);

  NameNodeResourceChecker nnrc = new NameNodeResourceChecker(conf);

  // For the purpose of this test, we need to force the name dirs to appear to
  // be on different volumes.
  Map<String, CheckedVolume> volumes = new HashMap<String, CheckedVolume>();
  CheckedVolume volume1 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume2 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume3 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume4 = Mockito.mock(CheckedVolume.class);
  CheckedVolume volume5 = Mockito.mock(CheckedVolume.class);
  Mockito.when(volume1.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume2.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume5.isResourceAvailable()).thenReturn(true);

  // Make volumes 4 and 5 required.
  Mockito.when(volume4.isRequired()).thenReturn(true);
  Mockito.when(volume5.isRequired()).thenReturn(true);

  volumes.put("volume1", volume1);
  volumes.put("volume2", volume2);
  volumes.put("volume3", volume3);
  volumes.put("volume4", volume4);
  volumes.put("volume5", volume5);
  nnrc.setVolumes(volumes);

  // Initially all dirs have space.
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 1/3 redundant dir is low on space.
  Mockito.when(volume1.isResourceAvailable()).thenReturn(false);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // 2/3 redundant dirs are low on space.
  Mockito.when(volume2.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Lower the minimum number of redundant volumes that must be available.
  nnrc.setMinimumReduntdantVolumes(1);
  assertTrue(nnrc.hasAvailableDiskSpace());

  // Just one required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());

  // Just the other required dir is low on space.
  Mockito.when(volume3.isResourceAvailable()).thenReturn(true);
  Mockito.when(volume4.isResourceAvailable()).thenReturn(false);
  assertFalse(nnrc.hasAvailableDiskSpace());
}