HADOOP-14434. Use MoveFileEx to allow renaming a file when the destination exists. Contributed by Lukas Majercak

This commit is contained in:
Chris Douglas 2017-05-17 17:21:03 -07:00
parent eb7791b474
commit ef9e536a71
2 changed files with 5 additions and 3 deletions

View File

@ -1204,7 +1204,7 @@ done:
if (!src) goto done; // exception was thrown if (!src) goto done; // exception was thrown
dst = (LPCWSTR) (*env)->GetStringChars(env, jdst, NULL); dst = (LPCWSTR) (*env)->GetStringChars(env, jdst, NULL);
if (!dst) goto done; // exception was thrown if (!dst) goto done; // exception was thrown
if (!MoveFile(src, dst)) { if (!MoveFileEx(src, dst, MOVEFILE_REPLACE_EXISTING)) {
throw_ioe(env, GetLastError()); throw_ioe(env, GetLastError());
} }

View File

@ -510,7 +510,7 @@ public void testRenameTo() throws Exception {
Assert.assertEquals(Errno.ENOENT, e.getErrno()); Assert.assertEquals(Errno.ENOENT, e.getErrno());
} }
} }
// Test renaming a file to itself. It should succeed and do nothing. // Test renaming a file to itself. It should succeed and do nothing.
File sourceFile = new File(TEST_DIR, "source"); File sourceFile = new File(TEST_DIR, "source");
Assert.assertTrue(sourceFile.createNewFile()); Assert.assertTrue(sourceFile.createNewFile());
@ -536,7 +536,9 @@ public void testRenameTo() throws Exception {
} }
} }
FileUtils.deleteQuietly(TEST_DIR); // Test renaming to an existing file
assertTrue(targetFile.exists());
NativeIO.renameTo(sourceFile, targetFile);
} }
@Test(timeout=10000) @Test(timeout=10000)