|
@@ -20,7 +20,9 @@ package org.apache.hadoop.hdfs;
|
|
|
import static org.junit.Assert.assertEquals;
|
|
|
import static org.junit.Assert.assertTrue;
|
|
|
|
|
|
+import java.io.ByteArrayOutputStream;
|
|
|
import java.io.IOException;
|
|
|
+import java.io.PrintStream;
|
|
|
|
|
|
import org.apache.hadoop.conf.Configuration;
|
|
|
import org.apache.hadoop.fs.BlockLocation;
|
|
@@ -28,6 +30,7 @@ import org.apache.hadoop.fs.FileStatus;
|
|
|
import org.apache.hadoop.fs.FileSystem;
|
|
|
import org.apache.hadoop.fs.FsShell;
|
|
|
import org.apache.hadoop.fs.Path;
|
|
|
+import org.apache.hadoop.hdfs.protocol.ClientProtocol;
|
|
|
import org.apache.hadoop.hdfs.server.datanode.SimulatedFSDataset;
|
|
|
import org.junit.Test;
|
|
|
|
|
@@ -102,4 +105,45 @@ public class TestSetrepIncreasing {
|
|
|
cluster.shutdown();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testSetRepOnECFile() throws Exception {
|
|
|
+ ClientProtocol client;
|
|
|
+ Configuration conf = new HdfsConfiguration();
|
|
|
+ conf.set(DFSConfigKeys.DFS_NAMENODE_EC_POLICIES_ENABLED_KEY,
|
|
|
+ StripedFileTestUtil.getDefaultECPolicy().getName());
|
|
|
+ MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).numDataNodes(1)
|
|
|
+ .build();
|
|
|
+ cluster.waitActive();
|
|
|
+ client = NameNodeProxies.createProxy(conf,
|
|
|
+ cluster.getFileSystem(0).getUri(), ClientProtocol.class).getProxy();
|
|
|
+ client.setErasureCodingPolicy("/",
|
|
|
+ StripedFileTestUtil.getDefaultECPolicy().getName());
|
|
|
+
|
|
|
+ FileSystem dfs = cluster.getFileSystem();
|
|
|
+ try {
|
|
|
+ Path d = new Path("/tmp");
|
|
|
+ dfs.mkdirs(d);
|
|
|
+ Path f = new Path(d, "foo");
|
|
|
+ dfs.createNewFile(f);
|
|
|
+ FileStatus file = dfs.getFileStatus(f);
|
|
|
+ assertTrue(file.isErasureCoded());
|
|
|
+
|
|
|
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
|
+ System.setOut(new PrintStream(out));
|
|
|
+ String[] args = {"-setrep", "2", "" + f};
|
|
|
+ FsShell shell = new FsShell();
|
|
|
+ shell.setConf(conf);
|
|
|
+ assertEquals(0, shell.run(args));
|
|
|
+ assertTrue(
|
|
|
+ out.toString().contains("Did not set replication for: /tmp/foo"));
|
|
|
+
|
|
|
+ // verify the replication factor of the EC file
|
|
|
+ file = dfs.getFileStatus(f);
|
|
|
+ assertEquals(1, file.getReplication());
|
|
|
+ } finally {
|
|
|
+ dfs.close();
|
|
|
+ cluster.shutdown();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|