From b1d3b518c2404154957ef78cdd8f514112a215d2 Mon Sep 17 00:00:00 2001 From: Eli Collins Date: Fri, 18 May 2012 04:22:30 +0000 Subject: [PATCH] HADOOP-8408. MR doesn't work with a non-default ViewFS mount table and security enabled. Contributed by Aaron T. Myers git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1339971 13f79535-47bb-0310-9956-ffa450edef68 --- .../hadoop-common/CHANGES.txt | 3 + .../hadoop/fs/viewfs/ViewFileSystem.java | 5 ++ ...tViewFileSystemDelegationTokenSupport.java | 73 +++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemDelegationTokenSupport.java diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index bb38f601d5c..07d7f52133d 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -40,6 +40,9 @@ Release 2.0.1-alpha - UNRELEASED HADOOP-8287. etc/hadoop is missing hadoop-env.sh (eli) + HADOOP-8408. MR doesn't work with a non-default ViewFS mount table + and security enabled. (atm via eli) + Release 2.0.0-alpha - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java index 20932ee278c..bd27886d2af 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java @@ -233,6 +233,11 @@ public class ViewFileSystem extends FileSystem { fsState.resolve(getUriPath(f), true); return res.isInternalDir() ? null : res.targetFileSystem.getHomeDirectory(); } + + @Override + public String getCanonicalServiceName() { + return getUri().getHost(); + } @Override public URI getUri() { diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemDelegationTokenSupport.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemDelegationTokenSupport.java new file mode 100644 index 00000000000..57c79116d99 --- /dev/null +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemDelegationTokenSupport.java @@ -0,0 +1,73 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.fs.viewfs; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.FsConstants; +import org.junit.Test; + +/** + * Test ViewFileSystem's support for having delegation tokens fetched and cached + * for the file system. + */ +public class TestViewFileSystemDelegationTokenSupport { + + private static final String MOUNT_TABLE_NAME = "vfs-cluster"; + + /** + * Ensure that a canonical service name can be determined for ViewFileSystem + * instances configured with a non-default mount table name. + * + * Regression test for HADOOP-8408. + */ + @Test + public void testGetCanonicalServiceNameWithNonDefaultMountTable() + throws URISyntaxException, IOException { + + Configuration conf = new Configuration(); + ConfigUtil.addLink(conf, MOUNT_TABLE_NAME, "/user", new URI("file:///")); + + FileSystem viewFs = FileSystem.get(new URI(FsConstants.VIEWFS_SCHEME + + "://" + MOUNT_TABLE_NAME), conf); + + String serviceName = viewFs.getCanonicalServiceName(); + assertNotNull(serviceName); + assertEquals(MOUNT_TABLE_NAME, serviceName); + } + + @Test + public void testGetCanonicalServiceNameWithDefaultMountTable() + throws URISyntaxException, IOException { + + Configuration conf = new Configuration(); + ConfigUtil.addLink(conf, "/user", new URI("file:///")); + + FileSystem viewFs = FileSystem.get(FsConstants.VIEWFS_URI, conf); + + String serviceName = viewFs.getCanonicalServiceName(); + assertNull(serviceName); + } + +}