You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by jl...@apache.org on 2013/06/22 03:05:39 UTC
svn commit: r1495652 - in
/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs:
CHANGES.txt
src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeFsck.java
src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsck.java
Author: jlowe
Date: Sat Jun 22 01:05:39 2013
New Revision: 1495652
URL: http://svn.apache.org/r1495652
Log:
HDFS-4205. fsck fails with symlinks. Contributed by Jason Lowe
Modified:
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeFsck.java
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsck.java
Modified: hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1495652&r1=1495651&r2=1495652&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Sat Jun 22 01:05:39 2013
@@ -27,6 +27,8 @@ Release 0.23.9 - UNRELEASED
HDFS-4765. Permission check of symlink deletion incorrectly throws
UnresolvedLinkException. (Andrew Wang via jlowe)
+ HDFS-4205. fsck fails with symlinks (jlowe)
+
Release 0.23.8 - 2013-06-05
INCOMPATIBLE CHANGES
Modified: hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeFsck.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeFsck.java?rev=1495652&r1=1495651&r2=1495652&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeFsck.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NamenodeFsck.java Sat Jun 22 01:05:39 2013
@@ -266,6 +266,13 @@ public class NamenodeFsck {
} while (thisListing.hasMore());
return;
}
+ if (file.isSymlink()) {
+ if (showFiles) {
+ out.println(path + " <symlink>");
+ }
+ res.totalSymlinks++;
+ return;
+ }
long fileLen = file.getLen();
// Get block locations without updating the file access time
// and without block access tokens
@@ -622,6 +629,7 @@ public class NamenodeFsck {
long totalFiles = 0L;
long totalOpenFiles = 0L;
long totalDirs = 0L;
+ long totalSymlinks = 0L;
long totalSize = 0L;
long totalOpenFilesSize = 0L;
long totalReplicas = 0L;
@@ -664,6 +672,7 @@ public class NamenodeFsck {
}
res.append("\n Total dirs:\t").append(totalDirs).append(
"\n Total files:\t").append(totalFiles);
+ res.append("\n Total symlinks:\t\t").append(totalSymlinks);
if (totalOpenFiles != 0) {
res.append(" (Files currently being written: ").append(totalOpenFiles)
.append(")");
Modified: hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsck.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsck.java?rev=1495652&r1=1495651&r2=1495652&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsck.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFsck.java Sat Jun 22 01:05:39 2013
@@ -42,6 +42,7 @@ import java.util.regex.Pattern;
import org.apache.commons.logging.impl.Log4JLogger;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.fs.FileContext;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsPermission;
@@ -633,4 +634,44 @@ public class TestFsck {
}
}
}
+
+ /** Test fsck with symlinks in the filesystem */
+ @Test
+ public void testFsckSymlink() throws Exception {
+ final DFSTestUtil util = new DFSTestUtil(getClass().getSimpleName(),
+ 1, 3, 8*1024);
+ final Configuration conf = new HdfsConfiguration();
+ conf.setLong(DFSConfigKeys.DFS_BLOCKREPORT_INTERVAL_MSEC_KEY, 10000L);
+
+ MiniDFSCluster cluster = null;
+ FileSystem fs = null;
+ try {
+ final long precision = 1L;
+ conf.setLong(DFSConfigKeys.DFS_NAMENODE_ACCESSTIME_PRECISION_KEY, precision);
+ conf.setLong(DFSConfigKeys.DFS_BLOCKREPORT_INTERVAL_MSEC_KEY, 10000L);
+ cluster = new MiniDFSCluster.Builder(conf).numDataNodes(4).build();
+ fs = cluster.getFileSystem();
+ final String fileName = "/srcdat";
+ util.createFiles(fs, fileName);
+ final FileContext fc = FileContext.getFileContext(
+ cluster.getConfiguration(0));
+ final Path file = new Path(fileName);
+ final Path symlink = new Path("/srcdat-symlink");
+ fc.createSymlink(file, symlink, false);
+ util.waitReplication(fs, fileName, (short)3);
+ long aTime = fc.getFileStatus(symlink).getAccessTime();
+ Thread.sleep(precision);
+ setupAuditLogs();
+ String outStr = runFsck(conf, 0, true, "/");
+ verifyAuditLogs();
+ assertEquals(aTime, fc.getFileStatus(symlink).getAccessTime());
+ assertTrue(outStr.contains(NamenodeFsck.HEALTHY_STATUS));
+ assertTrue(outStr.contains("Total symlinks:\t\t1\n"));
+ System.out.println(outStr);
+ util.cleanup(fs, fileName);
+ } finally {
+ if (fs != null) {try{fs.close();} catch(Exception e){}}
+ if (cluster != null) { cluster.shutdown(); }
+ }
+ }
}