# GG-9961: Added user name propagation support to secondary file system factory.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/22bdbce4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/22bdbce4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/22bdbce4 Branch: refs/heads/ignite-45-ipc-debug Commit: 22bdbce45bb1044b4834625fa445512bb75152d2 Parents: d578683 Author: vozerov-gridgain <voze...@gridgain.com> Authored: Tue Mar 24 14:31:23 2015 +0300 Committer: vozerov-gridgain <voze...@gridgain.com> Committed: Tue Mar 24 14:31:23 2015 +0300 ---------------------------------------------------------------------- .../ignite/internal/processors/igfs/IgfsEx.java | 3 ++ .../visor/node/VisorIgfsConfiguration.java | 11 +++++++ .../fs/IgniteHadoopIgfsSecondaryFileSystem.java | 26 ++++++++++++++-- .../hadoop/fs/v1/IgniteHadoopFileSystem.java | 4 ++- .../hadoop/fs/v2/IgniteHadoopFileSystem.java | 4 ++- .../internal/processors/hadoop/HadoopSetup.java | 8 ++--- .../hadoop/SecondaryFileSystemProvider.java | 31 ++++++++++++++------ ...oopSecondaryFileSystemConfigurationTest.java | 4 +-- 8 files changed, 70 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/22bdbce4/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsEx.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsEx.java index 0c5debd..99f647e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsEx.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsEx.java @@ -48,6 +48,9 @@ public interface IgfsEx extends IgniteFileSystem { /** Property name for URI of file system. */ public static final String SECONDARY_FS_URI = "SECONDARY_FS_URI"; + /** Property name for user name of file system. */ + public static final String SECONDARY_FS_USER_NAME = "SECONDARY_FS_USER_NAME"; + /** * Stops IGFS cleaning all used resources. */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/22bdbce4/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorIgfsConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorIgfsConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorIgfsConfiguration.java index a1e3c52..d0b0124 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorIgfsConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorIgfsConfiguration.java @@ -66,6 +66,9 @@ public class VisorIgfsConfiguration implements Serializable { /** Path for the secondary hadoop file system config. */ private String secondaryHadoopFileSysCfgPath; + /** User name for the secondary hadoop file system config. */ + private String secondaryHadoopFileSysUserName; + /** IGFS instance mode. */ private IgfsMode dfltMode; @@ -140,6 +143,7 @@ public class VisorIgfsConfiguration implements Serializable { cfg.secondaryHadoopFileSysUri = props.get(SECONDARY_FS_URI); cfg.secondaryHadoopFileSysCfgPath = props.get(SECONDARY_FS_CONFIG_PATH); + cfg.secondaryHadoopFileSysUserName = props.get(SECONDARY_FS_USER_NAME); } cfg.dfltMode = igfs.getDefaultMode(); @@ -249,6 +253,13 @@ public class VisorIgfsConfiguration implements Serializable { } /** + * @return User name of the secondary Hadoop file system. + */ + @Nullable public String secondaryHadoopFileSystemUserName() { + return secondaryHadoopFileSysUserName; + } + + /** * @return Path for the secondary hadoop file system config. */ @Nullable public String secondaryHadoopFileSystemConfigPath() { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/22bdbce4/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/IgniteHadoopIgfsSecondaryFileSystem.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/IgniteHadoopIgfsSecondaryFileSystem.java b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/IgniteHadoopIgfsSecondaryFileSystem.java index 6d0c386..13a2173 100644 --- a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/IgniteHadoopIgfsSecondaryFileSystem.java +++ b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/IgniteHadoopIgfsSecondaryFileSystem.java @@ -53,7 +53,7 @@ public class IgniteHadoopIgfsSecondaryFileSystem implements IgfsSecondaryFileSys * @throws IgniteCheckedException In case of error. */ public IgniteHadoopIgfsSecondaryFileSystem(String uri) throws IgniteCheckedException { - this(uri, null); + this(uri, null, null); } /** @@ -64,13 +64,30 @@ public class IgniteHadoopIgfsSecondaryFileSystem implements IgfsSecondaryFileSys * @throws IgniteCheckedException In case of error. */ public IgniteHadoopIgfsSecondaryFileSystem(@Nullable String uri, @Nullable String cfgPath) + throws IgniteCheckedException { + this(uri, cfgPath, null); + } + + /** + * Constructor. + * + * @param uri URI of file system. + * @param cfgPath Additional path to Hadoop configuration. + * @param userName User name. + * @throws IgniteCheckedException In case of error. + */ + public IgniteHadoopIgfsSecondaryFileSystem(@Nullable String uri, @Nullable String cfgPath, + @Nullable String userName) throws IgniteCheckedException { - // Treat empty uri argument as null to improve configuration usability: + // Treat empty uri and userName arguments as nulls to improve configuration usability: if (F.isEmpty(uri)) uri = null; + if (F.isEmpty(userName)) + userName = null; + try { - SecondaryFileSystemProvider secProvider = new SecondaryFileSystemProvider(uri, cfgPath); + SecondaryFileSystemProvider secProvider = new SecondaryFileSystemProvider(uri, cfgPath, userName); fileSys = secProvider.createFileSystem(); @@ -82,6 +99,9 @@ public class IgniteHadoopIgfsSecondaryFileSystem implements IgfsSecondaryFileSys if (cfgPath != null) props.put(SECONDARY_FS_CONFIG_PATH, cfgPath); + if (userName != null) + props.put(SECONDARY_FS_USER_NAME, userName); + props.put(SECONDARY_FS_URI, uri); } catch (IOException e) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/22bdbce4/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java index 6bdcd8e..1f53a06 100644 --- a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java +++ b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v1/IgniteHadoopFileSystem.java @@ -289,9 +289,11 @@ public class IgniteHadoopFileSystem extends FileSystem { String secUri = props.get(SECONDARY_FS_URI); String secConfPath = props.get(SECONDARY_FS_CONFIG_PATH); + String secUserName = props.get(SECONDARY_FS_USER_NAME); try { - SecondaryFileSystemProvider secProvider = new SecondaryFileSystemProvider(secUri, secConfPath); + SecondaryFileSystemProvider secProvider = new SecondaryFileSystemProvider(secUri, secConfPath, + secUserName); secondaryFs = secProvider.createFileSystem(); secondaryUri = secProvider.uri(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/22bdbce4/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java index 5dac047..9cfb79b 100644 --- a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java +++ b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/fs/v2/IgniteHadoopFileSystem.java @@ -284,9 +284,11 @@ public class IgniteHadoopFileSystem extends AbstractFileSystem implements Closea String secUri = props.get(SECONDARY_FS_URI); String secConfPath = props.get(SECONDARY_FS_CONFIG_PATH); + String secUserName = props.get(SECONDARY_FS_USER_NAME); try { - SecondaryFileSystemProvider secProvider = new SecondaryFileSystemProvider(secUri, secConfPath); + SecondaryFileSystemProvider secProvider = new SecondaryFileSystemProvider(secUri, secConfPath, + secUserName); secondaryFs = secProvider.createAbstractFileSystem(); secondaryUri = secProvider.uri(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/22bdbce4/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopSetup.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopSetup.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopSetup.java index c33c1f1..80c22fc 100644 --- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopSetup.java +++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopSetup.java @@ -113,7 +113,7 @@ public class HadoopSetup { if (!hadoopDir.canRead()) exit("Hadoop installation folder can not be read. Please check permissions.", null); - File hadoopCommonDir; + final File hadoopCommonDir; String hadoopCommonHome = System.getenv("HADOOP_COMMON_HOME"); @@ -129,9 +129,9 @@ public class HadoopSetup { } if (!hadoopCommonDir.canRead()) - exit("Failed to read Hadoop common dir in '" + hadoopCommonHome + "'.", null); + exit("Failed to read Hadoop common dir '" + hadoopCommonDir + "'.", null); - File hadoopCommonLibDir = new File(hadoopCommonDir, "lib"); + final File hadoopCommonLibDir = new File(hadoopCommonDir, "lib"); if (!hadoopCommonLibDir.canRead()) exit("Failed to read Hadoop 'lib' folder in '" + hadoopCommonLibDir.getPath() + "'.", null); @@ -139,7 +139,7 @@ public class HadoopSetup { if (U.isWindows()) { checkJavaPathSpaces(); - File hadoopBinDir = new File(hadoopDir, "bin"); + final File hadoopBinDir = new File(hadoopDir, "bin"); if (!hadoopBinDir.canRead()) exit("Failed to read subdirectory 'bin' in HADOOP_HOME.", null); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/22bdbce4/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/SecondaryFileSystemProvider.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/SecondaryFileSystemProvider.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/SecondaryFileSystemProvider.java index c1dceba..27805f8 100644 --- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/SecondaryFileSystemProvider.java +++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/SecondaryFileSystemProvider.java @@ -36,6 +36,9 @@ public class SecondaryFileSystemProvider { /** The secondary filesystem URI, never null. */ private final URI uri; + /** Optional user name to log into secondary filesystem with. */ + private @Nullable final String userName; + /** * Creates new provider with given config parameters. The configuration URL is optional. The filesystem URI must be * specified either explicitly or in the configuration provided. @@ -44,10 +47,13 @@ public class SecondaryFileSystemProvider { * property in the provided configuration. * @param secConfPath the secondary Fs path (file path on the local file system, optional). * See {@link IgniteUtils#resolveIgniteUrl(String)} on how the path resolved. + * @param userName User name. * @throws IOException */ public SecondaryFileSystemProvider(final @Nullable String secUri, - final @Nullable String secConfPath) throws IOException { + final @Nullable String secConfPath, @Nullable String userName) throws IOException { + this.userName = userName; + if (secConfPath != null) { URL url = U.resolveIgniteUrl(secConfPath); @@ -72,10 +78,6 @@ public class SecondaryFileSystemProvider { } } - if (uri == null) - throw new IllegalArgumentException("Failed to get secondary file system URI (it is neither given " + - "explicitly nor specified in the configuration): " + secConfPath); - // Disable caching: String prop = String.format("fs.%s.impl.disable.cache", uri.getScheme()); @@ -87,7 +89,20 @@ public class SecondaryFileSystemProvider { * @throws IOException */ public FileSystem createFileSystem() throws IOException { - FileSystem fileSys = FileSystem.get(uri, cfg); + final FileSystem fileSys; + + if (userName == null) + fileSys = FileSystem.get(uri, cfg); + else { + try { + fileSys = FileSystem.get(uri, cfg, userName); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + + throw new IOException("Failed to create file system due to interrupt.", e); + } + } return fileSys; } @@ -97,9 +112,7 @@ public class SecondaryFileSystemProvider { * @throws IOException */ public AbstractFileSystem createAbstractFileSystem() throws IOException { - AbstractFileSystem secondaryFs = AbstractFileSystem.get(uri, cfg); - - return secondaryFs; + return AbstractFileSystem.get(uri, cfg); } /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/22bdbce4/modules/hadoop/src/test/java/org/apache/ignite/igfs/HadoopSecondaryFileSystemConfigurationTest.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/test/java/org/apache/ignite/igfs/HadoopSecondaryFileSystemConfigurationTest.java b/modules/hadoop/src/test/java/org/apache/ignite/igfs/HadoopSecondaryFileSystemConfigurationTest.java index e6c6faa..e28b5ba 100644 --- a/modules/hadoop/src/test/java/org/apache/ignite/igfs/HadoopSecondaryFileSystemConfigurationTest.java +++ b/modules/hadoop/src/test/java/org/apache/ignite/igfs/HadoopSecondaryFileSystemConfigurationTest.java @@ -31,8 +31,6 @@ import org.apache.ignite.internal.processors.hadoop.igfs.*; import org.apache.ignite.internal.processors.igfs.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; -import org.apache.ignite.spi.communication.*; -import org.apache.ignite.spi.communication.tcp.*; import org.apache.ignite.spi.discovery.tcp.*; import org.apache.ignite.spi.discovery.tcp.ipfinder.*; import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; @@ -164,7 +162,7 @@ public class HadoopSecondaryFileSystemConfigurationTest extends IgfsCommonAbstra primaryConfFullPath = null; SecondaryFileSystemProvider provider = - new SecondaryFileSystemProvider(primaryFsUriStr, primaryConfFullPath); + new SecondaryFileSystemProvider(primaryFsUriStr, primaryConfFullPath, null); primaryFs = provider.createFileSystem();