HADOOP-14195. CredentialProviderFactory$getProviders is not thread-safe. Contributed by Vihang Karajgaonkar.
(cherry picked from commit 128015584d69492806fd1700c8f840d78aa9c729)
This commit is contained in:
parent
1e64c582f5
commit
d946dfcbe1
@ -56,12 +56,16 @@ public static List<CredentialProvider> getProviders(Configuration conf
|
||||
try {
|
||||
URI uri = new URI(path);
|
||||
boolean found = false;
|
||||
for(CredentialProviderFactory factory: serviceLoader) {
|
||||
CredentialProvider kp = factory.createProvider(uri, conf);
|
||||
if (kp != null) {
|
||||
result.add(kp);
|
||||
found = true;
|
||||
break;
|
||||
// Iterate serviceLoader in a synchronized block since
|
||||
// serviceLoader iterator is not thread-safe.
|
||||
synchronized (serviceLoader) {
|
||||
for (CredentialProviderFactory factory : serviceLoader) {
|
||||
CredentialProvider kp = factory.createProvider(uri, conf);
|
||||
if (kp != null) {
|
||||
result.add(kp);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user