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 el...@apache.org on 2011/04/20 02:43:04 UTC
svn commit: r1095245 - in /hadoop/hdfs/trunk: CHANGES.txt
src/java/org/apache/hadoop/hdfs/server/namenode/INode.java
src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestCheckpoint.java
Author: eli
Date: Wed Apr 20 00:43:03 2011
New Revision: 1095245
URL: http://svn.apache.org/viewvc?rev=1095245&view=rev
Log:
HDFS-1845. Symlink comes up as directory after namenode restart. Contributed by John George
Modified:
hadoop/hdfs/trunk/CHANGES.txt
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/INode.java
hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestCheckpoint.java
Modified: hadoop/hdfs/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/CHANGES.txt?rev=1095245&r1=1095244&r2=1095245&view=diff
==============================================================================
--- hadoop/hdfs/trunk/CHANGES.txt (original)
+++ hadoop/hdfs/trunk/CHANGES.txt Wed Apr 20 00:43:03 2011
@@ -657,6 +657,9 @@ Release 0.22.0 - Unreleased
HDFS-1806. TestBlockReport.blockReport_08() and _09() are timing-dependent
and likely to fail on fast servers. (Matt Foley via eli)
+ HDFS-1845. Symlink comes up as directory after namenode restart.
+ (John George via eli)
+
Release 0.21.1 - Unreleased
IMPROVEMENTS
Modified: hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/INode.java
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/INode.java?rev=1095245&r1=1095244&r2=1095245&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/INode.java (original)
+++ hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/INode.java Wed Apr 20 00:43:03 2011
@@ -461,7 +461,9 @@ abstract class INode implements Comparab
long nsQuota,
long dsQuota,
long preferredBlockSize) {
- if (blocks == null) {
+ if (symlink.length() != 0) { // check if symbolic link
+ return new INodeSymlink(symlink, modificationTime, atime, permissions);
+ } else if (blocks == null) { //not sym link and blocks null? directory!
if (nsQuota >= 0 || dsQuota >= 0) {
return new INodeDirectoryWithQuota(
permissions, modificationTime, nsQuota, dsQuota);
@@ -469,10 +471,6 @@ abstract class INode implements Comparab
// regular directory
return new INodeDirectory(permissions, modificationTime);
}
- // check if symbolic link
- if (symlink.length() != 0) {
- return new INodeSymlink(symlink, modificationTime, atime, permissions);
- }
// file
return new INodeFile(permissions, blocks, replication,
modificationTime, atime, preferredBlockSize);
Modified: hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestCheckpoint.java
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestCheckpoint.java?rev=1095245&r1=1095244&r2=1095245&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestCheckpoint.java (original)
+++ hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestCheckpoint.java Wed Apr 20 00:43:03 2011
@@ -40,6 +40,7 @@ import org.apache.hadoop.hdfs.tools.DFSA
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
+import org.apache.hadoop.fs.FileContext;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DFSConfigKeys;
@@ -736,11 +737,13 @@ public class TestCheckpoint extends Test
public void testSaveNamespace() throws IOException {
MiniDFSCluster cluster = null;
DistributedFileSystem fs = null;
+ FileContext fc;
try {
Configuration conf = new HdfsConfiguration();
cluster = new MiniDFSCluster.Builder(conf).numDataNodes(numDatanodes).format(false).build();
cluster.waitActive();
fs = (DistributedFileSystem)(cluster.getFileSystem());
+ fc = FileContext.getFileContext(cluster.getURI());
// Saving image without safe mode should fail
DFSAdmin admin = new DFSAdmin(conf);
@@ -756,6 +759,12 @@ public class TestCheckpoint extends Test
Path file = new Path("namespace.dat");
writeFile(fs, file, replication);
checkFile(fs, file, replication);
+
+ // create new link
+ Path symlink = new Path("file.link");
+ fc.createSymlink(file, symlink, false);
+ assertTrue(fc.getFileLinkStatus(symlink).isSymlink());
+
// verify that the edits file is NOT empty
Collection<URI> editsDirs = cluster.getNameEditsDirs();
for(URI uri : editsDirs) {
@@ -784,6 +793,8 @@ public class TestCheckpoint extends Test
cluster.waitActive();
fs = (DistributedFileSystem)(cluster.getFileSystem());
checkFile(fs, file, replication);
+ fc = FileContext.getFileContext(cluster.getURI());
+ assertTrue(fc.getFileLinkStatus(symlink).isSymlink());
} finally {
if(fs != null) fs.close();
if(cluster!= null) cluster.shutdown();