You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by yl...@apache.org on 2015/01/28 01:42:59 UTC
hadoop git commit: HDFS-7677. DistributedFileSystem#truncate should
resolve symlinks. (yliu)
Repository: hadoop
Updated Branches:
refs/heads/branch-2 4718af435 -> d483ba25d
HDFS-7677. DistributedFileSystem#truncate should resolve symlinks. (yliu)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/d483ba25
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/d483ba25
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/d483ba25
Branch: refs/heads/branch-2
Commit: d483ba25d7e90ec140a86c526c7e60cc6015f210
Parents: 4718af4
Author: yliu <yl...@apache.org>
Authored: Tue Jan 27 23:47:52 2015 +0800
Committer: yliu <yl...@apache.org>
Committed: Tue Jan 27 23:47:52 2015 +0800
----------------------------------------------------------------------
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 ++
.../hadoop/hdfs/DistributedFileSystem.java | 14 ++++++++-
.../hdfs/server/namenode/TestFileTruncate.java | 30 ++++++++++++++++++++
3 files changed, 45 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d483ba25/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index 7ebc31e..2c73143 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -514,6 +514,8 @@ Release 2.7.0 - UNRELEASED
HDFS-7566. Remove obsolete entries from hdfs-default.xml (Ray Chiang
via aw)
+ HDFS-7677. DistributedFileSystem#truncate should resolve symlinks. (yliu)
+
Release 2.6.1 - UNRELEASED
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d483ba25/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
index c7f8b7f..97ef2f5 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
@@ -630,7 +630,19 @@ public class DistributedFileSystem extends FileSystem {
@Override
public boolean truncate(Path f, final long newLength) throws IOException {
statistics.incrementWriteOps(1);
- return dfs.truncate(getPathName(f), newLength);
+ Path absF = fixRelativePart(f);
+ return new FileSystemLinkResolver<Boolean>() {
+ @Override
+ public Boolean doCall(final Path p)
+ throws IOException, UnresolvedLinkException {
+ return dfs.truncate(getPathName(p), newLength);
+ }
+ @Override
+ public Boolean next(final FileSystem fs, final Path p)
+ throws IOException {
+ return fs.truncate(p, newLength);
+ }
+ }.resolve(this, absF);
}
@Override
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d483ba25/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFileTruncate.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFileTruncate.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFileTruncate.java
index e8250a2..579e718 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFileTruncate.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFileTruncate.java
@@ -759,6 +759,36 @@ public class TestFileTruncate {
}
}
+ @Test
+ public void testTruncate4Symlink() throws IOException {
+ final int fileLength = 3 * BLOCK_SIZE;
+
+ final Path parent = new Path("/test");
+ fs.mkdirs(parent);
+ final byte[] contents = AppendTestUtil.initBuffer(fileLength);
+ final Path file = new Path(parent, "testTruncate4Symlink");
+ writeContents(contents, fileLength, file);
+
+ final Path link = new Path(parent, "link");
+ fs.createSymlink(file, link, false);
+
+ final int newLength = fileLength/3;
+ boolean isReady = fs.truncate(link, newLength);
+
+ assertTrue("Recovery is not expected.", isReady);
+
+ FileStatus fileStatus = fs.getFileStatus(file);
+ assertThat(fileStatus.getLen(), is((long) newLength));
+
+ ContentSummary cs = fs.getContentSummary(parent);
+ assertEquals("Bad disk space usage",
+ cs.getSpaceConsumed(), newLength * REPLICATION);
+ // validate the file content
+ checkFullFile(file, newLength, contents);
+
+ fs.delete(parent, true);
+ }
+
static void writeContents(byte[] contents, int fileLength, Path p)
throws IOException {
FSDataOutputStream out = fs.create(p, true, BLOCK_SIZE, REPLICATION,