@@ -62,6 +62,7 @@ public class TestDistCpWithRawXAttrs {
62
62
private static final Path dir1 = new Path ("/src/dir1" );
63
63
private static final Path subDir1 = new Path (dir1 , "subdir1" );
64
64
private static final Path file1 = new Path ("/src/file1" );
65
+ private static final Path FILE_2 = new Path ("/src/dir1/file2" );
65
66
private static final String rawRootName = "/.reserved/raw" ;
66
67
private static final String rootedDestName = "/dest" ;
67
68
private static final String rootedSrcName = "/src" ;
@@ -73,7 +74,7 @@ public static void init() throws Exception {
73
74
conf = new Configuration ();
74
75
conf .setBoolean (DFSConfigKeys .DFS_NAMENODE_XATTRS_ENABLED_KEY , true );
75
76
conf .setInt (DFSConfigKeys .DFS_LIST_LIMIT , 2 );
76
- cluster = new MiniDFSCluster .Builder (conf ).numDataNodes (1 ).format (true )
77
+ cluster = new MiniDFSCluster .Builder (conf ).numDataNodes (3 ).format (true )
77
78
.build ();
78
79
cluster .waitActive ();
79
80
fs = cluster .getFileSystem ();
@@ -178,7 +179,7 @@ private void doTestPreserveRawXAttrs(String src, String dest,
178
179
}
179
180
180
181
@ Test
181
- public void testPreserveEC () throws Exception {
182
+ public void testPreserveAndNoPreserveEC () throws Exception {
182
183
final String src = "/src" ;
183
184
final String dest = "/dest" ;
184
185
@@ -190,9 +191,11 @@ public void testPreserveEC() throws Exception {
190
191
191
192
fs .delete (new Path ("/dest" ), true );
192
193
fs .mkdirs (subDir1 );
193
- fs .create (file1 ).close ();
194
194
DistributedFileSystem dfs = (DistributedFileSystem ) fs ;
195
195
dfs .enableErasureCodingPolicy ("XOR-2-1-1024k" );
196
+ dfs .setErasureCodingPolicy (dir1 , "XOR-2-1-1024k" );
197
+ fs .create (file1 ).close ();
198
+ fs .create (FILE_2 ).close ();
196
199
int res = ToolRunner .run (conf , new ECAdmin (conf ), args );
197
200
assertEquals ("Unable to set EC policy on " + subDir1 .toString (), res , 0 );
198
201
@@ -203,6 +206,7 @@ public void testPreserveEC() throws Exception {
203
206
FileStatus srcStatus = fs .getFileStatus (new Path (src ));
204
207
FileStatus srcDir1Status = fs .getFileStatus (dir1 );
205
208
FileStatus srcSubDir1Status = fs .getFileStatus (subDir1 );
209
+ FileStatus srcFile2Status = fs .getFileStatus (FILE_2 );
206
210
207
211
FileStatus destStatus = fs .getFileStatus (new Path (dest ));
208
212
FileStatus destDir1Status = fs .getFileStatus (destDir1 );
@@ -214,12 +218,26 @@ public void testPreserveEC() throws Exception {
214
218
destStatus .isErasureCoded ());
215
219
assertTrue ("/src/dir1 is not erasure coded!" ,
216
220
srcDir1Status .isErasureCoded ());
221
+ assertTrue ("/src/dir1/file2 is not erasure coded" ,
222
+ srcFile2Status .isErasureCoded ());
217
223
assertTrue ("/dest/dir1 is not erasure coded!" ,
218
224
destDir1Status .isErasureCoded ());
219
225
assertTrue ("/src/dir1/subdir1 is not erasure coded!" ,
220
226
srcSubDir1Status .isErasureCoded ());
221
227
assertTrue ("/dest/dir1/subdir1 is not erasure coded!" ,
222
228
destSubDir1Status .isErasureCoded ());
229
+
230
+ // test without -p to check if src is EC then target FS default replication
231
+ // is obeyed on the target file.
232
+
233
+ fs .delete (new Path (dest ), true );
234
+ DistCpTestUtils .assertRunDistCp (DistCpConstants .SUCCESS , src , dest , null ,
235
+ conf );
236
+ FileStatus destFileStatus = fs .getFileStatus (new Path (destDir1 , "file2" ));
237
+ assertFalse (destFileStatus .isErasureCoded ());
238
+ assertEquals (fs .getDefaultReplication (new Path (destDir1 , "file2" )),
239
+ destFileStatus .getReplication ());
240
+ dfs .unsetErasureCodingPolicy (dir1 );
223
241
}
224
242
225
243
@ Test
0 commit comments