HADOOP-10020. Disable symlinks temporarily (branch-2.1-beta only change). Contributed by Sanjay Radia.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2.1-beta@1529712 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt
index 8993c0c..beaabdb 100644
--- a/hadoop-common-project/hadoop-common/CHANGES.txt
+++ b/hadoop-common-project/hadoop-common/CHANGES.txt
@@ -19,6 +19,9 @@
INCOMPATIBLE CHANGES
+ HADOOP-10020. Disable symlinks temporarily (branch-2.1-beta only change)
+ (sanjay via suresh)
+
NEW FEATURES
HDFS-4817. Make HDFS advisory caching configurable on a per-file basis.
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java
index 2794403..3361f36 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java
@@ -1339,11 +1339,15 @@
* <code>target</code> or <code>link</code> is not supported
* @throws IOException If an I/O error occurred
*/
+ @SuppressWarnings("deprecation")
public void createSymlink(final Path target, final Path link,
final boolean createParent) throws AccessControlException,
FileAlreadyExistsException, FileNotFoundException,
ParentNotDirectoryException, UnsupportedFileSystemException,
IOException {
+ if (!FileSystem.isSymlinksEnabled()) {
+ throw new UnsupportedOperationException("Symlinks not supported");
+ }
final Path nonRelLink = fixRelativePart(link);
new FSLinkResolver<Void>() {
@Override
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
index 2eeaf87..06bfacd 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
@@ -2807,4 +2807,24 @@
": " + pair.getValue());
}
}
+
+ // Symlinks are temporarily disabled - see Hadoop-10020
+ private static boolean symlinkEnabled = false;
+ private static Configuration conf = null;
+
+ @Deprecated
+ @VisibleForTesting
+ public static boolean isSymlinksEnabled() {
+ if (conf == null) {
+ Configuration conf = new Configuration();
+ symlinkEnabled = conf.getBoolean("test.SymlinkEnabledForTesting", false);
+ }
+ return symlinkEnabled;
+ }
+
+ @Deprecated
+ @VisibleForTesting
+ public static void enableSymlinks() {
+ symlinkEnabled = true;
+ }
}
diff --git a/hadoop-common-project/hadoop-common/src/test/resources/core-site.xml b/hadoop-common-project/hadoop-common/src/test/resources/core-site.xml
index 6053363..06f022f 100644
--- a/hadoop-common-project/hadoop-common/src/test/resources/core-site.xml
+++ b/hadoop-common-project/hadoop-common/src/test/resources/core-site.xml
@@ -78,4 +78,9 @@
<name>nfs3.mountd.port</name>
<value>4272</value>
</property>
+
+<property>
+ <name>test.SymlinkEnabledForTesting</name>
+ <value>true</value>
+</property>
</configuration>
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 5b692ab..bb8d25d2 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
@@ -1118,12 +1118,16 @@
}.resolve(this, absF);
}
+ @SuppressWarnings("deprecation")
@Override
public void createSymlink(final Path target, final Path link,
final boolean createParent) throws AccessControlException,
FileAlreadyExistsException, FileNotFoundException,
ParentNotDirectoryException, UnsupportedFileSystemException,
IOException {
+ if (!FileSystem.isSymlinksEnabled()) {
+ throw new UnsupportedOperationException("Symlinks not supported");
+ }
statistics.incrementWriteOps(1);
final Path absF = fixRelativePart(link);
new FileSystemLinkResolver<Void>() {
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java
index 3ffe65a..0904e72 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java
@@ -32,6 +32,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.hdfs.protocol.Block;
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
import org.apache.hadoop.hdfs.protocol.HdfsFileStatus;
@@ -501,6 +502,9 @@
break;
}
case OP_SYMLINK: {
+ if (!FileSystem.isSymlinksEnabled()) {
+ throw new IOException("Symlinks not supported - please remove symlink before upgrading to this version of HDFS");
+ }
SymlinkOp symlinkOp = (SymlinkOp)op;
inodeId = getAndUpdateLastInodeId(symlinkOp.inodeId, logVersion,
lastInodeId);
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormat.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormat.java
index 74f5219..48753c4 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormat.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormat.java
@@ -40,6 +40,7 @@
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathIsNotDirectoryException;
import org.apache.hadoop.fs.UnresolvedLinkException;
@@ -627,6 +628,7 @@
* @param counter Counter to increment for namenode startup progress
* @return an inode
*/
+ @SuppressWarnings("deprecation")
INode loadINode(final byte[] localName, boolean isSnapshotINode,
DataInput in, Counter counter) throws IOException {
final int imgVersion = getLayoutVersion();
@@ -724,6 +726,9 @@
: dir;
} else if (numBlocks == -2) {
//symlink
+ if (!FileSystem.isSymlinksEnabled()) {
+ throw new IOException("Symlinks not supported - please remove symlink before upgrading to this version of HDFS");
+ }
final String symlink = Text.readString(in);
final PermissionStatus permissions = PermissionStatus.read(in);
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
index de21820..856312f 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
@@ -125,6 +125,7 @@
import org.apache.hadoop.fs.CreateFlag;
import org.apache.hadoop.fs.FileAlreadyExistsException;
import org.apache.hadoop.fs.FileStatus;
+import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FsServerDefaults;
import org.apache.hadoop.fs.InvalidPathException;
import org.apache.hadoop.fs.Options;
@@ -1769,9 +1770,13 @@
/**
* Create a symbolic link.
*/
+ @SuppressWarnings("deprecation")
void createSymlink(String target, String link,
PermissionStatus dirPerms, boolean createParent)
throws IOException, UnresolvedLinkException {
+ if (!FileSystem.isSymlinksEnabled()) {
+ throw new UnsupportedOperationException("Symlinks not supported");
+ }
if (!DFSUtil.isValidName(link)) {
throw new InvalidPathException("Invalid link name: " + link);
}
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/hdfs-site.xml b/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/hdfs-site.xml
index cd13532..404f68e 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/hdfs-site.xml
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/hdfs-site.xml
@@ -31,4 +31,8 @@
<value>0</value>
</property>
+ <property>
+ <name>test.SymlinkEnabledForTesting</name>
+ <value>true</value>
+ </property>
</configuration>