|
@@ -65,6 +65,7 @@ import org.apache.hadoop.fs.FileSystem;
|
|
|
import org.apache.hadoop.fs.Path;
|
|
|
import org.apache.hadoop.fs.RemoteIterator;
|
|
|
import org.apache.hadoop.fs.StorageType;
|
|
|
+import org.apache.hadoop.fs.contract.ContractTestUtils;
|
|
|
import org.apache.hadoop.fs.permission.AclEntry;
|
|
|
import org.apache.hadoop.fs.permission.AclEntryScope;
|
|
|
import org.apache.hadoop.fs.permission.AclEntryType;
|
|
@@ -85,6 +86,7 @@ import org.apache.hadoop.hdfs.protocol.HdfsConstants;
|
|
|
import org.apache.hadoop.hdfs.protocol.LocatedBlock;
|
|
|
import org.apache.hadoop.hdfs.protocol.LocatedBlocks;
|
|
|
import org.apache.hadoop.hdfs.protocol.SnapshottableDirectoryStatus;
|
|
|
+import org.apache.hadoop.hdfs.server.namenode.ErasureCodingPolicyManager;
|
|
|
import org.apache.hadoop.hdfs.server.namenode.NameNode;
|
|
|
import org.apache.hadoop.hdfs.server.namenode.snapshot.SnapshotTestHelper;
|
|
|
import org.apache.hadoop.hdfs.server.namenode.web.resources.NamenodeWebHdfsMethods;
|
|
@@ -513,6 +515,64 @@ public class TestWebHDFS {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Test (timeout = 60000)
|
|
|
+ public void testWebHdfsErasureCodingFiles() throws Exception {
|
|
|
+ MiniDFSCluster cluster = null;
|
|
|
+ final Configuration conf = WebHdfsTestUtil.createConf();
|
|
|
+ conf.set(DFSConfigKeys.DFS_NAMENODE_EC_POLICIES_ENABLED_KEY,
|
|
|
+ ErasureCodingPolicyManager.getPolicyByID(
|
|
|
+ HdfsConstants.XOR_2_1_POLICY_ID).getName());
|
|
|
+ try {
|
|
|
+ cluster = new MiniDFSCluster.Builder(conf).numDataNodes(3).build();
|
|
|
+ cluster.waitActive();
|
|
|
+ final DistributedFileSystem dfs = cluster.getFileSystem();
|
|
|
+ final WebHdfsFileSystem webHdfs = WebHdfsTestUtil
|
|
|
+ .getWebHdfsFileSystem(conf, WebHdfsConstants.WEBHDFS_SCHEME);
|
|
|
+
|
|
|
+ final Path ecDir = new Path("/ec");
|
|
|
+ dfs.mkdirs(ecDir);
|
|
|
+ dfs.setErasureCodingPolicy(ecDir,
|
|
|
+ ErasureCodingPolicyManager.getPolicyByID(
|
|
|
+ HdfsConstants.XOR_2_1_POLICY_ID).getName());
|
|
|
+ final Path ecFile = new Path(ecDir, "ec-file.log");
|
|
|
+ DFSTestUtil.createFile(dfs, ecFile, 1024 * 10, (short) 1, 0xFEED);
|
|
|
+
|
|
|
+ final Path normalDir = new Path("/dir");
|
|
|
+ dfs.mkdirs(normalDir);
|
|
|
+ final Path normalFile = new Path(normalDir, "file.log");
|
|
|
+ DFSTestUtil.createFile(dfs, normalFile, 1024 * 10, (short) 1, 0xFEED);
|
|
|
+
|
|
|
+ FileStatus expectedECDirStatus = dfs.getFileStatus(ecDir);
|
|
|
+ FileStatus actualECDirStatus = webHdfs.getFileStatus(ecDir);
|
|
|
+ Assert.assertEquals(expectedECDirStatus.isErasureCoded(),
|
|
|
+ actualECDirStatus.isErasureCoded());
|
|
|
+ ContractTestUtils.assertErasureCoded(dfs, ecDir);
|
|
|
+
|
|
|
+ FileStatus expectedECFileStatus = dfs.getFileStatus(ecFile);
|
|
|
+ FileStatus actualECFileStatus = webHdfs.getFileStatus(ecFile);
|
|
|
+ Assert.assertEquals(expectedECFileStatus.isErasureCoded(),
|
|
|
+ actualECFileStatus.isErasureCoded());
|
|
|
+ ContractTestUtils.assertErasureCoded(dfs, ecFile);
|
|
|
+
|
|
|
+ FileStatus expectedNormalDirStatus = dfs.getFileStatus(normalDir);
|
|
|
+ FileStatus actualNormalDirStatus = webHdfs.getFileStatus(normalDir);
|
|
|
+ Assert.assertEquals(expectedNormalDirStatus.isErasureCoded(),
|
|
|
+ actualNormalDirStatus.isErasureCoded());
|
|
|
+ ContractTestUtils.assertNotErasureCoded(dfs, normalDir);
|
|
|
+
|
|
|
+ FileStatus expectedNormalFileStatus = dfs.getFileStatus(normalFile);
|
|
|
+ FileStatus actualNormalFileStatus = webHdfs.getFileStatus(normalDir);
|
|
|
+ Assert.assertEquals(expectedNormalFileStatus.isErasureCoded(),
|
|
|
+ actualNormalFileStatus.isErasureCoded());
|
|
|
+ ContractTestUtils.assertNotErasureCoded(dfs, normalFile);
|
|
|
+
|
|
|
+ } finally {
|
|
|
+ if (cluster != null) {
|
|
|
+ cluster.shutdown();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Test snapshot creation through WebHdfs
|
|
|
*/
|