FsVolumeList { long getCapacity() { long capacity = 0L; for (FsVolumeImpl v : volumes) { try (FsVolumeReference ref = v.obtainReference()) { capacity += v.getCapacity(); } catch (IOException e) { } } return capacity; } FsVolumeList(List<VolumeFailureInfo> initialVolumeFailureInfos,
      BlockScanner blockScanner,
      VolumeChoosingPolicy<FsVolumeImpl> blockChooser); @Override String toString();  }
@Test public void testGetCachedVolumeCapacity() throws IOException { conf.setBoolean(DFSConfigKeys.DFS_DATANODE_FIXED_VOLUME_SIZE_KEY, DFSConfigKeys.DFS_DATANODE_FIXED_VOLUME_SIZE_DEFAULT); long capacity = 4000L; DF usage = mock(DF.class); when(usage.getCapacity()).thenReturn(capacity); FsVolumeImpl volumeChanged = new FsVolumeImplBuilder() .setConf(conf) .setDataset(dataset) .setStorageID("storage-id") .setStorageDirectory(new StorageDirectory(StorageLocation.parse( "[RAM_DISK]volume-changed"))) .setUsage(usage) .build(); int callTimes = 5; for(int i = 0; i < callTimes; i++) { assertEquals(capacity, volumeChanged.getCapacity()); } verify(usage, times(callTimes)).getCapacity(); conf.setBoolean(DFSConfigKeys.DFS_DATANODE_FIXED_VOLUME_SIZE_KEY, true); FsVolumeImpl volumeFixed = new FsVolumeImplBuilder() .setConf(conf) .setDataset(dataset) .setStorageID("storage-id") .setStorageDirectory(new StorageDirectory(StorageLocation.parse( "[RAM_DISK]volume-fixed"))) .setUsage(usage) .build(); for(int i = 0; i < callTimes; i++) { assertEquals(capacity, volumeFixed.getCapacity()); } verify(usage, times(callTimes+1)).getCapacity(); conf.setBoolean(DFSConfigKeys.DFS_DATANODE_FIXED_VOLUME_SIZE_KEY, DFSConfigKeys.DFS_DATANODE_FIXED_VOLUME_SIZE_DEFAULT); }