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 zh...@apache.org on 2015/01/29 19:06:04 UTC
[21/34] hadoop git commit: HDFS-7677. DistributedFileSystem#truncate
should resolve symlinks. (yliu)
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/dad98fb5
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/dad98fb5
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/dad98fb5
Branch: refs/heads/HDFS-EC
Commit: dad98fb5332cc8290711bcd0bd16d4f896e5264c
Parents: c690f6a
Author: yliu <yl...@apache.org>
Authored: Tue Jan 27 23:50:11 2015 +0800
Committer: Zhe Zhang <zh...@apache.org>
Committed: Thu Jan 29 10:05:25 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/dad98fb5/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 beea13b..1f036b8 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -801,6 +801,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/dad98fb5/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 710ab18..6d5684e 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
@@ -636,7 +636,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/dad98fb5/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,