Repository: ignite Updated Branches: refs/heads/ignite-3916 b74894579 -> 551528005
IGNITE-3916: Moved name mapper to common module. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/55152800 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/55152800 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/55152800 Branch: refs/heads/ignite-3916 Commit: 55152800537c57096a667627feaaea342266589b Parents: b748945 Author: vozerov-gridgain <voze...@gridgain.com> Authored: Fri Sep 16 15:43:37 2016 +0300 Committer: vozerov-gridgain <voze...@gridgain.com> Committed: Fri Sep 16 15:43:37 2016 +0300 ---------------------------------------------------------------------- modules/hadoop-impl/pom.xml | 13 +- .../ignite/hadoop/util/BasicUserNameMapper.java | 112 --------------- .../hadoop/util/ChainedUserNameMapper.java | 94 ------------- .../hadoop/util/KerberosUserNameMapper.java | 137 ------------------- .../ignite/hadoop/util/UserNameMapper.java | 37 ----- .../apache/ignite/hadoop/util/package-info.java | 22 --- .../org/apache/ignite/hadoop/package-info.java | 22 +++ .../ignite/hadoop/util/BasicUserNameMapper.java | 112 +++++++++++++++ .../hadoop/util/ChainedUserNameMapper.java | 94 +++++++++++++ .../hadoop/util/KerberosUserNameMapper.java | 137 +++++++++++++++++++ .../ignite/hadoop/util/UserNameMapper.java | 35 +++++ .../apache/ignite/hadoop/util/package-info.java | 22 +++ 12 files changed, 428 insertions(+), 409 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop-impl/pom.xml ---------------------------------------------------------------------- diff --git a/modules/hadoop-impl/pom.xml b/modules/hadoop-impl/pom.xml index 5b25cda..c728483 100644 --- a/modules/hadoop-impl/pom.xml +++ b/modules/hadoop-impl/pom.xml @@ -48,6 +48,12 @@ </dependency> <dependency> + <groupId>org.apache.ignite</groupId> + <artifactId>ignite-log4j</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm-all</artifactId> <version>4.2</version> @@ -122,13 +128,6 @@ <type>test-jar</type> <scope>test</scope> </dependency> - - <dependency> - <groupId>org.apache.ignite</groupId> - <artifactId>ignite-hadoop</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> </dependencies> <build> http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/BasicUserNameMapper.java ---------------------------------------------------------------------- diff --git a/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/BasicUserNameMapper.java b/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/BasicUserNameMapper.java deleted file mode 100644 index c34808a..0000000 --- a/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/BasicUserNameMapper.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * 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.ignite.hadoop.util; - -import org.apache.ignite.internal.util.typedef.internal.S; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; - -/** - * Name mapper which maps one user name to another based on predefined dictionary. If name is not found in the - * dictionary, or dictionary is not defined, either passed user name or some default value could be returned. - */ -public class BasicUserNameMapper implements UserNameMapper { - /** */ - private static final long serialVersionUID = 0L; - - /** Mappings. */ - private Map<String, String> mappings; - - /** Whether to use default user name. */ - private boolean useDfltUsrName;; - - /** Default user name. */ - private String dfltUsrName; - - /** {@inheritDoc} */ - @Nullable @Override public String map(String name) { - String res = mappings != null ? mappings.get(name) : null; - - return res != null ? res : useDfltUsrName ? dfltUsrName : name; - } - - /** - * Get mappings. - * - * @return Mappings. - */ - @Nullable public Map<String, String> getMappings() { - return mappings; - } - - /** - * Set mappings. - * - * @param mappings Mappings. - */ - public void setMappings(@Nullable Map<String, String> mappings) { - this.mappings = mappings; - } - - /** - * Get whether to use default user name when there is no mapping for current user name. - * - * @return Whether to use default user name. - */ - public boolean isUseDefaultUserName() { - return useDfltUsrName; - } - - /** - * Set whether to use default user name when there is no mapping for current user name. - * - * @param useDfltUsrName Whether to use default user name. - */ - public void setUseDefaultUserName(boolean useDfltUsrName) { - this.useDfltUsrName = useDfltUsrName; - } - - /** - * Get default user name (optional). - * <p> - * This user name will be used if provided mappings doesn't contain mapping for the given user name and - * {#isUseDefaultUserName} is set to {@code true}. - * <p> - * Defaults to {@code null}. - * - * @return Default user name. - */ - @Nullable public String getDefaultUserName() { - return dfltUsrName; - } - - /** - * Set default user name (optional). See {@link #getDefaultUserName()} for more information. - * - * @param dfltUsrName Default user name. - */ - public void setDefaultUserName(@Nullable String dfltUsrName) { - this.dfltUsrName = dfltUsrName; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return S.toString(BasicUserNameMapper.class, this); - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/ChainedUserNameMapper.java ---------------------------------------------------------------------- diff --git a/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/ChainedUserNameMapper.java b/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/ChainedUserNameMapper.java deleted file mode 100644 index 7635e25..0000000 --- a/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/ChainedUserNameMapper.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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.ignite.hadoop.util; - -import org.apache.ignite.IgniteException; -import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.lifecycle.LifecycleAware; -import org.jetbrains.annotations.Nullable; - -import java.util.Arrays; - -/** - * Chained user name mapper. Delegate name conversion to child mappers. - */ -public class ChainedUserNameMapper implements UserNameMapper, LifecycleAware { - /** */ - private static final long serialVersionUID = 0L; - - /** Child mappers. */ - private UserNameMapper[] mappers; - - /** {@inheritDoc} */ - @Nullable @Override public String map(String name) { - for (UserNameMapper mapper : mappers) - name = mapper.map(name); - - return name; - } - - /** {@inheritDoc} */ - @Override public void start() throws IgniteException { - if (mappers == null) - throw new IgniteException("Mappers cannot be null."); - - for (int i = 0; i < mappers.length; i++) { - if (mappers[i] == null) - throw new IgniteException("Mapper cannot be null [index=" + i + ']'); - } - - for (UserNameMapper mapper : mappers) { - if (mapper instanceof LifecycleAware) - ((LifecycleAware)mapper).start(); - } - } - - /** {@inheritDoc} */ - @Override public void stop() throws IgniteException { - assert mappers != null; - - for (UserNameMapper mapper : mappers) { - if (mapper instanceof LifecycleAware) - ((LifecycleAware)mapper).stop(); - } - } - - /** - * Get child mappers. - * - * @return Child mappers. - */ - public UserNameMapper[] getMappers() { - return mappers; - } - - /** - * Set child mappers. - * - * @param mappers Child mappers. - */ - public void setMappers(UserNameMapper... mappers) { - this.mappers = mappers; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return S.toString(ChainedUserNameMapper.class, this, - "mappers", mappers != null ? Arrays.toString(mappers) : null); - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/KerberosUserNameMapper.java ---------------------------------------------------------------------- diff --git a/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/KerberosUserNameMapper.java b/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/KerberosUserNameMapper.java deleted file mode 100644 index 433fb82..0000000 --- a/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/KerberosUserNameMapper.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * 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.ignite.hadoop.util; - -import org.apache.ignite.IgniteException; -import org.apache.ignite.internal.processors.igfs.IgfsUtils; -import org.apache.ignite.internal.util.typedef.F; -import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.lifecycle.LifecycleAware; -import org.jetbrains.annotations.Nullable; - -/** - * Kerberos user name mapper. Use it when you need to map simple user name to Kerberos principal. - * E.g. from {@code johndoe} to {@code john...@your.realm.com} or {@code johndoe/ad...@your.realm.com}. - */ -public class KerberosUserNameMapper implements UserNameMapper, LifecycleAware { - /** */ - private static final long serialVersionUID = 0L; - - /** Instance. */ - private String instance; - - /** Realm. */ - private String realm; - - /** State. */ - private volatile State state; - - /** {@inheritDoc} */ - @Nullable @Override public String map(String name) { - assert state != null; - - name = IgfsUtils.fixUserName(name); - - switch (state) { - case NAME: - return name; - - case NAME_REALM: - return name + '@' + realm; - - case NAME_INSTANCE: - return name + '/' + instance; - - default: - assert state == State.NAME_INSTANCE_REALM; - - return name + '/' + instance + '@' + realm; - } - } - - /** {@inheritDoc} */ - @Override public void start() throws IgniteException { - if (!F.isEmpty(instance)) - state = F.isEmpty(realm) ? State.NAME_INSTANCE : State.NAME_INSTANCE_REALM; - else - state = F.isEmpty(realm) ? State.NAME : State.NAME_REALM; - } - - /** {@inheritDoc} */ - @Override public void stop() throws IgniteException { - // No-op. - } - - /** - * Get Kerberos instance (optional). - * - * @return Instance. - */ - @Nullable public String getInstance() { - return instance; - } - - /** - * Set Kerberos instance (optional). - * - * @param instance Kerberos instance. - */ - public void setInstance(@Nullable String instance) { - this.instance = instance; - } - - /** - * Get Kerberos realm (optional). - * - * @return Kerberos realm. - */ - @Nullable public String getRealm() { - return realm; - } - - /** - * Set Kerberos realm (optional). - * - * @param realm Kerberos realm. - */ - public void setRealm(@Nullable String realm) { - this.realm = realm; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return S.toString(KerberosUserNameMapper.class, this); - } - - /** - * State enumeration. - */ - private enum State { - /** Name only. */ - NAME, - - /** Name and realm. */ - NAME_REALM, - - /** Name and host. */ - NAME_INSTANCE, - - /** Name, host and realm. */ - NAME_INSTANCE_REALM, - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/UserNameMapper.java ---------------------------------------------------------------------- diff --git a/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/UserNameMapper.java b/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/UserNameMapper.java deleted file mode 100644 index 26dc4b2..0000000 --- a/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/UserNameMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.ignite.hadoop.util; - -import org.apache.ignite.hadoop.fs.HadoopFileSystemFactory; -import org.jetbrains.annotations.Nullable; - -import java.io.Serializable; - -/** - * Hadoop file system name mapper. Used by {@link HadoopFileSystemFactory} implementation to pass proper user names - * to the underlying Hadoop file system. - */ -public interface UserNameMapper extends Serializable { - /** - * Map user name. - * - * @param name User name. - * @return Mapped user name. - */ - @Nullable public String map(String name); -} http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/package-info.java ---------------------------------------------------------------------- diff --git a/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/package-info.java b/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/package-info.java deleted file mode 100644 index d84c0ba..0000000 --- a/modules/hadoop-impl/src/main/java/org/apache/ignite/hadoop/util/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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 description. --> - * Ignite Hadoop Accelerator utility classes. - */ -package org.apache.ignite.hadoop.util; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop/src/main/java/org/apache/ignite/hadoop/package-info.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/package-info.java b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/package-info.java new file mode 100644 index 0000000..8a5ae34 --- /dev/null +++ b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/package-info.java @@ -0,0 +1,22 @@ +/* + * 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 description. --> + * Ignite Hadoop Accelerator API. + */ +package org.apache.ignite.hadoop; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/BasicUserNameMapper.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/BasicUserNameMapper.java b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/BasicUserNameMapper.java new file mode 100644 index 0000000..c34808a --- /dev/null +++ b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/BasicUserNameMapper.java @@ -0,0 +1,112 @@ +/* + * 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.ignite.hadoop.util; + +import org.apache.ignite.internal.util.typedef.internal.S; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; + +/** + * Name mapper which maps one user name to another based on predefined dictionary. If name is not found in the + * dictionary, or dictionary is not defined, either passed user name or some default value could be returned. + */ +public class BasicUserNameMapper implements UserNameMapper { + /** */ + private static final long serialVersionUID = 0L; + + /** Mappings. */ + private Map<String, String> mappings; + + /** Whether to use default user name. */ + private boolean useDfltUsrName;; + + /** Default user name. */ + private String dfltUsrName; + + /** {@inheritDoc} */ + @Nullable @Override public String map(String name) { + String res = mappings != null ? mappings.get(name) : null; + + return res != null ? res : useDfltUsrName ? dfltUsrName : name; + } + + /** + * Get mappings. + * + * @return Mappings. + */ + @Nullable public Map<String, String> getMappings() { + return mappings; + } + + /** + * Set mappings. + * + * @param mappings Mappings. + */ + public void setMappings(@Nullable Map<String, String> mappings) { + this.mappings = mappings; + } + + /** + * Get whether to use default user name when there is no mapping for current user name. + * + * @return Whether to use default user name. + */ + public boolean isUseDefaultUserName() { + return useDfltUsrName; + } + + /** + * Set whether to use default user name when there is no mapping for current user name. + * + * @param useDfltUsrName Whether to use default user name. + */ + public void setUseDefaultUserName(boolean useDfltUsrName) { + this.useDfltUsrName = useDfltUsrName; + } + + /** + * Get default user name (optional). + * <p> + * This user name will be used if provided mappings doesn't contain mapping for the given user name and + * {#isUseDefaultUserName} is set to {@code true}. + * <p> + * Defaults to {@code null}. + * + * @return Default user name. + */ + @Nullable public String getDefaultUserName() { + return dfltUsrName; + } + + /** + * Set default user name (optional). See {@link #getDefaultUserName()} for more information. + * + * @param dfltUsrName Default user name. + */ + public void setDefaultUserName(@Nullable String dfltUsrName) { + this.dfltUsrName = dfltUsrName; + } + + /** {@inheritDoc} */ + @Override public String toString() { + return S.toString(BasicUserNameMapper.class, this); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/ChainedUserNameMapper.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/ChainedUserNameMapper.java b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/ChainedUserNameMapper.java new file mode 100644 index 0000000..7635e25 --- /dev/null +++ b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/ChainedUserNameMapper.java @@ -0,0 +1,94 @@ +/* + * 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.ignite.hadoop.util; + +import org.apache.ignite.IgniteException; +import org.apache.ignite.internal.util.typedef.internal.S; +import org.apache.ignite.lifecycle.LifecycleAware; +import org.jetbrains.annotations.Nullable; + +import java.util.Arrays; + +/** + * Chained user name mapper. Delegate name conversion to child mappers. + */ +public class ChainedUserNameMapper implements UserNameMapper, LifecycleAware { + /** */ + private static final long serialVersionUID = 0L; + + /** Child mappers. */ + private UserNameMapper[] mappers; + + /** {@inheritDoc} */ + @Nullable @Override public String map(String name) { + for (UserNameMapper mapper : mappers) + name = mapper.map(name); + + return name; + } + + /** {@inheritDoc} */ + @Override public void start() throws IgniteException { + if (mappers == null) + throw new IgniteException("Mappers cannot be null."); + + for (int i = 0; i < mappers.length; i++) { + if (mappers[i] == null) + throw new IgniteException("Mapper cannot be null [index=" + i + ']'); + } + + for (UserNameMapper mapper : mappers) { + if (mapper instanceof LifecycleAware) + ((LifecycleAware)mapper).start(); + } + } + + /** {@inheritDoc} */ + @Override public void stop() throws IgniteException { + assert mappers != null; + + for (UserNameMapper mapper : mappers) { + if (mapper instanceof LifecycleAware) + ((LifecycleAware)mapper).stop(); + } + } + + /** + * Get child mappers. + * + * @return Child mappers. + */ + public UserNameMapper[] getMappers() { + return mappers; + } + + /** + * Set child mappers. + * + * @param mappers Child mappers. + */ + public void setMappers(UserNameMapper... mappers) { + this.mappers = mappers; + } + + /** {@inheritDoc} */ + @Override public String toString() { + return S.toString(ChainedUserNameMapper.class, this, + "mappers", mappers != null ? Arrays.toString(mappers) : null); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/KerberosUserNameMapper.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/KerberosUserNameMapper.java b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/KerberosUserNameMapper.java new file mode 100644 index 0000000..433fb82 --- /dev/null +++ b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/KerberosUserNameMapper.java @@ -0,0 +1,137 @@ +/* + * 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.ignite.hadoop.util; + +import org.apache.ignite.IgniteException; +import org.apache.ignite.internal.processors.igfs.IgfsUtils; +import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.internal.util.typedef.internal.S; +import org.apache.ignite.lifecycle.LifecycleAware; +import org.jetbrains.annotations.Nullable; + +/** + * Kerberos user name mapper. Use it when you need to map simple user name to Kerberos principal. + * E.g. from {@code johndoe} to {@code john...@your.realm.com} or {@code johndoe/ad...@your.realm.com}. + */ +public class KerberosUserNameMapper implements UserNameMapper, LifecycleAware { + /** */ + private static final long serialVersionUID = 0L; + + /** Instance. */ + private String instance; + + /** Realm. */ + private String realm; + + /** State. */ + private volatile State state; + + /** {@inheritDoc} */ + @Nullable @Override public String map(String name) { + assert state != null; + + name = IgfsUtils.fixUserName(name); + + switch (state) { + case NAME: + return name; + + case NAME_REALM: + return name + '@' + realm; + + case NAME_INSTANCE: + return name + '/' + instance; + + default: + assert state == State.NAME_INSTANCE_REALM; + + return name + '/' + instance + '@' + realm; + } + } + + /** {@inheritDoc} */ + @Override public void start() throws IgniteException { + if (!F.isEmpty(instance)) + state = F.isEmpty(realm) ? State.NAME_INSTANCE : State.NAME_INSTANCE_REALM; + else + state = F.isEmpty(realm) ? State.NAME : State.NAME_REALM; + } + + /** {@inheritDoc} */ + @Override public void stop() throws IgniteException { + // No-op. + } + + /** + * Get Kerberos instance (optional). + * + * @return Instance. + */ + @Nullable public String getInstance() { + return instance; + } + + /** + * Set Kerberos instance (optional). + * + * @param instance Kerberos instance. + */ + public void setInstance(@Nullable String instance) { + this.instance = instance; + } + + /** + * Get Kerberos realm (optional). + * + * @return Kerberos realm. + */ + @Nullable public String getRealm() { + return realm; + } + + /** + * Set Kerberos realm (optional). + * + * @param realm Kerberos realm. + */ + public void setRealm(@Nullable String realm) { + this.realm = realm; + } + + /** {@inheritDoc} */ + @Override public String toString() { + return S.toString(KerberosUserNameMapper.class, this); + } + + /** + * State enumeration. + */ + private enum State { + /** Name only. */ + NAME, + + /** Name and realm. */ + NAME_REALM, + + /** Name and host. */ + NAME_INSTANCE, + + /** Name, host and realm. */ + NAME_INSTANCE_REALM, + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/UserNameMapper.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/UserNameMapper.java b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/UserNameMapper.java new file mode 100644 index 0000000..12669aa --- /dev/null +++ b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/UserNameMapper.java @@ -0,0 +1,35 @@ +/* + * 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.ignite.hadoop.util; + +import org.jetbrains.annotations.Nullable; + +import java.io.Serializable; + +/** + * Hadoop file system name mapper. Ensures that correct user name is passed to the underlying Hadoop file system. + */ +public interface UserNameMapper extends Serializable { + /** + * Map user name. + * + * @param name User name. + * @return Mapped user name. + */ + @Nullable public String map(String name); +} http://git-wip-us.apache.org/repos/asf/ignite/blob/55152800/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/package-info.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/package-info.java b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/package-info.java new file mode 100644 index 0000000..d84c0ba --- /dev/null +++ b/modules/hadoop/src/main/java/org/apache/ignite/hadoop/util/package-info.java @@ -0,0 +1,22 @@ +/* + * 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 description. --> + * Ignite Hadoop Accelerator utility classes. + */ +package org.apache.ignite.hadoop.util; \ No newline at end of file