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 sz...@apache.org on 2012/11/21 20:33:47 UTC
svn commit: r1412244 - in
/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs: ./
src/main/java/ src/main/java/org/apache/hadoop/hdfs/server/namenode/
src/test/java/org/apache/hadoop/fs/
Author: szetszwo
Date: Wed Nov 21 19:33:46 2012
New Revision: 1412244
URL: http://svn.apache.org/viewvc?rev=1412244&view=rev
Log:
svn merge -c 1412237 from trunk for HDFS-4216. Do not ignore QuotaExceededException when adding symlinks.
Modified:
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/ (props changed)
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/ (props changed)
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestFcHdfsSymlink.java
Propchange: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs:r1412237
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1412244&r1=1412243&r2=1412244&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Wed Nov 21 19:33:46 2012
@@ -260,6 +260,8 @@ Release 2.0.3-alpha - Unreleased
HDFS-4179. BackupNode: allow reads, fix checkpointing, safeMode. (shv)
+ HDFS-4216. Do not ignore QuotaExceededException when adding symlinks.
+ (szetszwo)
Release 2.0.2-alpha - 2012-09-07
Propchange: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java:r1412237
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java?rev=1412244&r1=1412243&r2=1412244&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java Wed Nov 21 19:33:46 2012
@@ -2110,7 +2110,7 @@ public class FSDirectory implements Clos
INodeSymlink addSymlink(String path, String target,
PermissionStatus dirPerms, boolean createParent)
throws UnresolvedLinkException, FileAlreadyExistsException,
- QuotaExceededException, IOException {
+ QuotaExceededException {
waitForReady();
final long modTime = now();
@@ -2124,7 +2124,7 @@ public class FSDirectory implements Clos
INodeSymlink newNode = null;
writeLock();
try {
- newNode = unprotectedSymlink(path, target, modTime, modTime,
+ newNode = unprotectedAddSymlink(path, target, modTime, modTime,
new PermissionStatus(userName, null, FsPermission.getDefault()));
} finally {
writeUnlock();
@@ -2144,23 +2144,12 @@ public class FSDirectory implements Clos
/**
* Add the specified path into the namespace. Invoked from edit log processing.
*/
- INodeSymlink unprotectedSymlink(String path, String target, long modTime,
+ INodeSymlink unprotectedAddSymlink(String path, String target, long mtime,
long atime, PermissionStatus perm)
- throws UnresolvedLinkException {
+ throws UnresolvedLinkException, QuotaExceededException {
assert hasWriteLock();
- INodeSymlink newNode = new INodeSymlink(target, modTime, atime, perm);
- try {
- newNode = addNode(path, newNode, UNKNOWN_DISK_SPACE);
- } catch (UnresolvedLinkException e) {
- /* All UnresolvedLinkExceptions should have been resolved by now, but we
- * should re-throw them in case that changes so they are not swallowed
- * by catching IOException below.
- */
- throw e;
- } catch (IOException e) {
- return null;
- }
- return newNode;
+ final INodeSymlink symlink = new INodeSymlink(target, mtime, atime, perm);
+ return addNode(path, symlink, UNKNOWN_DISK_SPACE);
}
/**
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java?rev=1412244&r1=1412243&r2=1412244&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java Wed Nov 21 19:33:46 2012
@@ -428,7 +428,7 @@ public class FSEditLogLoader {
}
case OP_SYMLINK: {
SymlinkOp symlinkOp = (SymlinkOp)op;
- fsDir.unprotectedSymlink(symlinkOp.path, symlinkOp.value,
+ fsDir.unprotectedAddSymlink(symlinkOp.path, symlinkOp.value,
symlinkOp.mtime, symlinkOp.atime,
symlinkOp.permissionStatus);
break;
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestFcHdfsSymlink.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestFcHdfsSymlink.java?rev=1412244&r1=1412243&r2=1412244&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestFcHdfsSymlink.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/fs/TestFcHdfsSymlink.java Wed Nov 21 19:33:46 2012
@@ -28,9 +28,11 @@ import org.apache.commons.logging.impl.L
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.hdfs.DFSConfigKeys;
+import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.HdfsConfiguration;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
+import org.apache.hadoop.hdfs.protocol.QuotaExceededException;
import org.apache.hadoop.hdfs.server.namenode.NameNode;
import org.apache.hadoop.hdfs.web.WebHdfsFileSystem;
import org.apache.hadoop.hdfs.web.WebHdfsTestUtil;
@@ -51,6 +53,7 @@ public class TestFcHdfsSymlink extends F
private static MiniDFSCluster cluster;
private static WebHdfsFileSystem webhdfs;
+ private static DistributedFileSystem dfs;
@Override
@@ -89,6 +92,7 @@ public class TestFcHdfsSymlink extends F
cluster = new MiniDFSCluster.Builder(conf).build();
fc = FileContext.getFileContext(cluster.getURI(0));
webhdfs = WebHdfsTestUtil.getWebHdfsFileSystem(conf);
+ dfs = cluster.getFileSystem();
}
@AfterClass
@@ -317,4 +321,27 @@ public class TestFcHdfsSymlink extends F
assertEquals(2, fc.getFileStatus(link).getReplication());
assertEquals(2, fc.getFileStatus(file).getReplication());
}
+
+ @Test
+ /** Test craeteSymlink(..) with quota. */
+ public void testQuota() throws IOException {
+ final Path dir = new Path(testBaseDir1());
+ dfs.setQuota(dir, 3, HdfsConstants.QUOTA_DONT_SET);
+
+ final Path file = new Path(dir, "file");
+ createAndWriteFile(file);
+
+ //creating the first link should succeed
+ final Path link1 = new Path(dir, "link1");
+ fc.createSymlink(file, link1, false);
+
+ try {
+ //creating the second link should fail with QuotaExceededException.
+ final Path link2 = new Path(dir, "link2");
+ fc.createSymlink(file, link2, false);
+ fail("Created symlink despite quota violation");
+ } catch(QuotaExceededException qee) {
+ //expected
+ }
+ }
}