-
Notifications
You must be signed in to change notification settings - Fork 8.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
93 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
60 changes: 60 additions & 0 deletions
60
hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/tools/S3AccessGrantsUtil.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
package org.apache.hadoop.fs.s3a.tools; | ||
Check failure on line 1 in hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/tools/S3AccessGrantsUtil.java ASF Cloudbees Jenkins ci-hadoop / Apache Yetushadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/tools/S3AccessGrantsUtil.java#L1
|
||
|
||
import org.apache.hadoop.conf.Configuration; | ||
import org.apache.hadoop.fs.s3a.DefaultS3ClientFactory; | ||
import org.apache.hadoop.fs.store.LogExactlyOnce; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import software.amazon.awssdk.s3accessgrants.plugin.S3AccessGrantsPlugin; | ||
import software.amazon.awssdk.services.s3.S3BaseClientBuilder; | ||
|
||
import static org.apache.hadoop.fs.s3a.Constants.AWS_S3_ACCESS_GRANTS_FALLBACK_TO_IAM_ENABLED; | ||
|
||
public class S3AccessGrantsUtil { | ||
|
||
protected static final Logger LOG = | ||
LoggerFactory.getLogger(S3AccessGrantsUtil.class); | ||
|
||
private static final LogExactlyOnce LOG_EXACTLY_ONCE = new LogExactlyOnce(LOG); | ||
private static final String S3AG_PLUGIN_CLASSNAME = | ||
"software.amazon.awssdk.s3accessgrants.plugin.S3AccessGrantsPlugin"; | ||
|
||
/** | ||
* S3 Access Grants plugin availability. | ||
*/ | ||
private static final boolean S3AG_PLUGIN_FOUND = checkForS3AGPlugin(); | ||
|
||
private static boolean checkForS3AGPlugin() { | ||
try { | ||
ClassLoader cl = DefaultS3ClientFactory.class.getClassLoader(); | ||
cl.loadClass(S3AG_PLUGIN_CLASSNAME); | ||
LOG.debug("S3AG plugin class {} found", S3AG_PLUGIN_CLASSNAME); | ||
return true; | ||
} catch (Exception e) { | ||
LOG.debug("S3AG plugin class {} not found", S3AG_PLUGIN_CLASSNAME, e); | ||
return false; | ||
} | ||
} | ||
|
||
/** | ||
* Is the S3AG plugin available? | ||
* @return true if it was found in the classloader | ||
*/ | ||
private static synchronized boolean isS3AGPluginAvailable() { | ||
return S3AG_PLUGIN_FOUND; | ||
} | ||
|
||
public static <BuilderT extends S3BaseClientBuilder<BuilderT, ClientT>, ClientT> void | ||
applyS3AccessGrantsConfigurations(BuilderT builder, Configuration conf) { | ||
if (isS3AGPluginAvailable()) { | ||
boolean s3agFallbackEnabled = conf.getBoolean( | ||
AWS_S3_ACCESS_GRANTS_FALLBACK_TO_IAM_ENABLED, false); | ||
S3AccessGrantsPlugin accessGrantsPlugin = | ||
S3AccessGrantsPlugin.builder().enableFallback(s3agFallbackEnabled).build(); | ||
builder.addPlugin(accessGrantsPlugin); | ||
LOG_EXACTLY_ONCE.info("s3ag plugin is added to s3 client with fallback: {}", s3agFallbackEnabled); | ||
} else { | ||
LOG_EXACTLY_ONCE.warn("s3ag plugin is not available."); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters