Repository: hadoop Updated Branches: refs/heads/branch-2.8.2 8e0e71075 -> a80cd4b89
HADOOP-10829. Iteration on CredentialProviderFactory.serviceLoader is thread-unsafe. Contributed by Benoy Antony and Rakesh R. (cherry picked from commit b82485d6fed2194bf0dc2eedfab7e226e30a7cf0) (cherry picked from commit c0e294ffc82d611a64b352e3962bce9399ddbe5f) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/a80cd4b8 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/a80cd4b8 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/a80cd4b8 Branch: refs/heads/branch-2.8.2 Commit: a80cd4b897216b8aa2bfd2f4fb5c37a545ef4503 Parents: 8e0e7107 Author: Jitendra Pandey <[email protected]> Authored: Fri Jul 7 12:45:37 2017 -0700 Committer: Junping Du <[email protected]> Committed: Thu Aug 31 16:23:37 2017 -0700 ---------------------------------------------------------------------- .../hadoop/security/alias/CredentialProviderFactory.java | 10 ++++++++++ 1 file changed, 10 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/a80cd4b8/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/alias/CredentialProviderFactory.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/alias/CredentialProviderFactory.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/alias/CredentialProviderFactory.java index 3bb4f6d..1f5c8ec 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/alias/CredentialProviderFactory.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/alias/CredentialProviderFactory.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.ServiceLoader; @@ -47,6 +48,15 @@ public abstract class CredentialProviderFactory { private static final ServiceLoader<CredentialProviderFactory> serviceLoader = ServiceLoader.load(CredentialProviderFactory.class); + // Iterate through the serviceLoader to avoid lazy loading. + // Lazy loading would require synchronization in concurrent use cases. + static { + Iterator<CredentialProviderFactory> iterServices = serviceLoader.iterator(); + while (iterServices.hasNext()) { + iterServices.next(); + } + } + public static List<CredentialProvider> getProviders(Configuration conf ) throws IOException { List<CredentialProvider> result = new ArrayList<CredentialProvider>(); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
