Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HADOOP-17198 Support S3 AccessPoint #3260

Merged
merged 5 commits into from
Sep 29, 2021

Conversation

bogthe
Copy link
Contributor

@bogthe bogthe commented Aug 3, 2021

HADOOP-17198

This change aims to add support for S3 AccessPoints. To use S3 object level
APIs for an AccessPoint, one has to use the AccessPoint (AP) ARN.

Hence the following have been added:

  • a new property to set the AccessPoint ARN;
  • S3a parsing and using the new property with appropriate exceptions;
  • initial documentation update for AccessPoints;

What this PR enables:

  • If apname is the name of an AccessPoint you have for created bucket then S3a now allows you to use paths like s3a://apname/ IF the new s3a.accesspoint.arn is set to the AccessPoint ARN e.g. arn:aws:s3:eu-west-1:123456789101:accesspoint/apname;

There's one thing I'm not sure about with this initial implementation so am looking for feedback if and how I should tackle it:

S3a bucket now has 2 "meanings" it can be a bucket name or an Access Point ARN. From the point of view of interacting with the SDK, they are interchangeable and internal string parsing logic is used to create the request for the right endpoint. However, I think it would be nicer to have a clearer abstraction for bucket names or access point ARNs that S3a operations can work with. This abstraction comes with the cost of doing a refactor which I'm not sure it's worth it right now. Even by doing a quick search on .getHost() there's quite a few places where the bucket name is deduced from the host.

@bogthe
Copy link
Contributor Author

bogthe commented Aug 3, 2021

Turns out merge with trunk broke some tests. Fixing.

@bogthe
Copy link
Contributor Author

bogthe commented Aug 4, 2021

Alright, ran the tests in eu-west-1 everything looks like it passes. Thought it would be easier to make the small changes to CSE in this PR. Ready to be reviewed!

@steveloughran @mukund-thakur @mehakmeet

Copy link
Contributor

@steveloughran steveloughran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the ARN option MUST ONLY be set ona per-bucket basis; a global one makes no sense.

Could be done in FS.initialize by constructing the final name and querying.

InternalConstants.ARN_BUCKET_OPTION = "fs.s3a.%s.access-point.arn"

// initialize

arn  = String.format(ARN_BUCKET_OPTION, getHost())


For tests, removeBaseAndBucketOverrides() will unset it for the test bucket:
removeBaseAndBucketOverrides(conf, "fs.s3a.access-point.arn")

// and to set it:
conf.set(String.format(ARN_BUCKET_OPTION, getHost(), "something"))

@@ -2570,6 +2614,11 @@ protected S3ListResult continueListObjects(S3ListRequest request,
OBJECT_CONTINUE_LIST_REQUEST,
() -> {
if (useListV1) {
if (accessPoint != null) {
// AccessPoints are not compatible with V1List
throw new InvalidRequestException("ListV1 is not supported by AccessPoints");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do you think maybe during initialize it should just downgrade?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, good idea, upgrading it is!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(side issue: reviewing snowball support. it's a v1 API only)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, I think we could just fail and let whoever is editing the settings deal with it. v1 is not the default, and the only place we recommend it is for 3rd party implementations. If someone changes the list option, things fail.

but propose: including the config option in the text, e.g.
"v1 list API configured in" + LIST_VERSION + " is not supported by access points"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I upgraded list to V2 in initialize method. I'm thinking I should make that logging more explicit there and completely remove this extra check + throw InvalidRequestException. Should be enough right?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If not, remove that and skip all V1 list tests (since they're using V2 anyway)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see you've reverted this & letting the SDK fail it. worksforme

Copy link
Contributor

@mukund-thakur mukund-thakur left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added few comments.

</property>
```

While keeping the global `accesspoint.arn` property set to empty `" "` which is the default.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we discussed it to be "" above so the docs should be consistent as well.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, my fault for mixing it up. I thought the default was " " not "" for properties.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sometimes " " can be set in a conf to force an override which getTrimmed() will then downgrade to "". No need to worry about that in these docs

Copy link
Contributor

@mehakmeet mehakmeet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doing a small/quick review, because I am seeing some failures with these conditions:

  • AP set, S3Guard ON.
❯ bin/hadoop fs -ls s3a://mehakmeet-singh-data/
2021-08-06 13:38:05,104 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2021-08-06 13:38:05,259 INFO s3a.S3AFileSystem: Using AccessPoint ARN "arn:aws:s3:ap-south-1:152813717728:accesspoint/mmt-ap" for bucket mehakmeet-singh-data
2021-08-06 13:38:05,337 INFO impl.MetricsConfig: Loaded properties from hadoop-metrics2.properties
2021-08-06 13:38:05,394 INFO impl.MetricsSystemImpl: Scheduled Metric snapshot period at 10 second(s).
2021-08-06 13:38:05,394 INFO impl.MetricsSystemImpl: s3a-file-system metrics system started
2021-08-06 13:38:06,593 ERROR s3guard.S3Guard: Failed to instantiate metadata store org.apache.hadoop.fs.s3a.s3guard.DynamoDBMetadataStore defined in fs.s3a.metadatastore.impl: java.nio.file.AccessDeniedException: arn:aws:s3:ap-south-1:152813717728:accesspoint/mmt-ap: com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: User: arn:aws:iam::152813717728:user/mehakmeet.singh is not authorized to perform: dynamodb:DescribeTable on resource: arn:aws:dynamodb:ap-south-1:152813717728:table/arn:aws:s3:ap-south-1:152813717728:accesspoint/mmt-ap (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException; Request ID: PRP7H8KJ3K5U71T3FDC046F30RVV4KQNSO5AEMVJF66Q9ASUAAJG; Proxy: null)
java.nio.file.AccessDeniedException: arn:aws:s3:ap-south-1:152813717728:accesspoint/mmt-ap: com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: User: arn:aws:iam::152813717728:user/mehakmeet.singh is not authorized to perform: dynamodb:DescribeTable on resource: arn:aws:dynamodb:ap-south-1:152813717728:table/arn:aws:s3:ap-south-1:152813717728:accesspoint/mmt-ap (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException; Request ID: PRP7H8KJ3K5U71T3FDC046F30RVV4KQNSO5AEMVJF66Q9ASUAAJG; Proxy: null)
	at org.apache.hadoop.fs.s3a.S3AUtils.translateDynamoDBException(S3AUtils.java:460)
	at org.apache.hadoop.fs.s3a.S3AUtils.translateException(S3AUtils.java:216)
	at org.apache.hadoop.fs.s3a.s3guard.DynamoDBMetadataStoreTableManager.initTable(DynamoDBMetadataStoreTableManager.java:237)
	at org.apache.hadoop.fs.s3a.s3guard.DynamoDBMetadataStore.initialize(DynamoDBMetadataStore.java:441)
	at org.apache.hadoop.fs.s3a.s3guard.S3Guard.getMetadataStore(S3Guard.java:125)
	at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:553)
	at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3460)
	at org.apache.hadoop.fs.FileSystem.access$300(FileSystem.java:172)
	at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3565)
	at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3512)
	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:539)
	at org.apache.hadoop.fs.Path.getFileSystem(Path.java:366)
	at org.apache.hadoop.fs.shell.PathData.expandAsGlob(PathData.java:342)
	at org.apache.hadoop.fs.shell.Command.expandArgument(Command.java:252)
	at org.apache.hadoop.fs.shell.Command.expandArguments(Command.java:235)
	at org.apache.hadoop.fs.shell.FsCommand.processRawArguments(FsCommand.java:105)
	at org.apache.hadoop.fs.shell.Command.run(Command.java:179)
	at org.apache.hadoop.fs.FsShell.run(FsShell.java:327)
	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:81)
	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:95)
	at org.apache.hadoop.fs.FsShell.main(FsShell.java:390)

This seems more of some missing Access Point policy I need to add in AWS console?

  • AP set, endpoint(fs.s3a.endpoint) set.
❯ bin/hadoop fs -ls s3a://mehakmeet-singh-data/
2021-08-06 13:39:57,198 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2021-08-06 13:39:57,361 INFO s3a.S3AFileSystem: Using AccessPoint ARN "arn:aws:s3:ap-south-1:152813717728:accesspoint/mmt-ap" for bucket mehakmeet-singh-data
2021-08-06 13:39:57,446 INFO impl.MetricsConfig: Loaded properties from hadoop-metrics2.properties
2021-08-06 13:39:57,755 INFO impl.MetricsSystemImpl: Scheduled Metric snapshot period at 10 second(s).
2021-08-06 13:39:57,756 INFO impl.MetricsSystemImpl: s3a-file-system metrics system started
ls: `s3a://mehakmeet-singh-data/': listStatus on s3a://mehakmeet-singh-data/: com.amazonaws.services.s3.model.AmazonS3Exception: The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: RQQ71TN58GMAGX0H; S3 Extended Request ID: OlJ3rlBs9LPIwIOU6IhT8dGCFEZCqVGVRX00PFOZuq6ZTvNFvB2XkNFkj7U0ovDpucdCHtNYgTA=; Proxy: null), S3 Extended Request ID: OlJ3rlBs9LPIwIOU6IhT8dGCFEZCqVGVRX00PFOZuq6ZTvNFvB2XkNFkj7U0ovDpucdCHtNYgTA=:NoSuchBucket: The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: RQQ71TN58GMAGX0H; S3 Extended Request ID: OlJ3rlBs9LPIwIOU6IhT8dGCFEZCqVGVRX00PFOZuq6ZTvNFvB2XkNFkj7U0ovDpucdCHtNYgTA=; Proxy: null)
2021-08-06 13:39:58,942 INFO impl.MetricsSystemImpl: Stopping s3a-file-system metrics system...
2021-08-06 13:39:58,942 INFO impl.MetricsSystemImpl: s3a-file-system metrics system stopped.
2021-08-06 13:39:58,942 INFO impl.MetricsSystemImpl: s3a-file-system metrics system shutdown complete.

Had the property set as: fs.s3a.endpoint=s3.ap-south-1.amazonaws.com, removing this, works. Maybe something with the overriding/setting to default of endpoint in S3AFileSystem.java?

// If there's no endpoint set, then use the default for bucket or AccessPoint. Overriding is
// useful when using FIPS or DualStack S3 endpoints.
String endpoint = conf.getTrimmed(ENDPOINT, "");
if (endpoint.isEmpty()) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

did you meant to check for !endpoint.isEmpty()?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, what I initially intended is to say "if you're not setting the endpoint then I'll provide a default Access Point endpoint". This is because I don't know what endpoint the user wants to point it to.

This is also why your tests are failing when you set the endpoint to ap-south-1. I'm open to adding another fs.s3a.accesspoint-endpoint configuration if it's better to provide an option to override only the access point endpoint.

Copy link
Contributor

@mehakmeet mehakmeet Aug 6, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, basically, if we have an Accesspoint set, we can't have an endpoint set as well? or we would have to change something like s3.ap-south-1.amazonaws.com to s3-accesspoint.ap-south-1.amazonaws.com?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I thought about this a bit more and decided to change to always use the access point endpoint instead of the above logic. So right now they should work even if you have set a custom endpoint to be something different.

Copy link
Contributor

@mehakmeet mehakmeet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

general review.

if (service.contains("s3-accesspoint") || service.contains("s3-outposts") ||
service.contains("s3-object-lambda")) {
// If AccessPoint then bucketName is of format `accessPoint-accountId`;
String[] accessPointBits = hostBits[0].split("\\-");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what if AccessPoint Name have a "-" in it?
for eg: AP name = "mmt-ap", then bucketName = "mmt-ap-ACCOUNT_ID", with this split, we would end up with "mmt" as accessPointName and "ap" as accountID.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch

}

skipIfKmsKeyIdIsNotSet(c);
skipIfCSEIsNotEnabled(c);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like my code had a bug in it. This should be skipping if CSE is enabled or if KMS key is not set.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

*/
public static void skipIfCSEIsNotEnabled(Configuration configuration) {
String encryption = configuration.get(Constants.SERVER_SIDE_ENCRYPTION_ALGORITHM, "");
if (!encryption.equals(S3AEncryptionMethods.CSE_KMS.getMethod())) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

change this to skip if CSE is enabled.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I don't understand. Why would I change this method to skip if CSE is enabled? And the places where it's called (even though I added it you have the better context, so trying to understand it).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests that require this are SSE tests which shouldn't skip if CSE-KMS is the encryption method used. It should've been skipped if CSE-KMS is enabled, to tell the user that SSE-KMS is not the method used.

@bogthe
Copy link
Contributor Author

bogthe commented Aug 6, 2021

@mehakmeet APs are not supposed to work with S3 Guard. I'll update the documentation to point that out.

@mehakmeet
Copy link
Contributor

APs are not supposed to work with S3 Guard.

Shouldn't we just throw an exception during initialization if AccessPoint is set and S3Guard is enabled to tell the users that AccessPoints are incompatible with S3Guard?

@steveloughran
Copy link
Contributor

Shouldn't we just throw an exception during initialization if AccessPoint is set and S3Guard is enabled to tell the users that AccessPoints are incompatible with S3Guard?

+1; what we do with CSE.

@bogthe
Copy link
Contributor Author

bogthe commented Aug 20, 2021

Sorry for being inactive on this PR for this long, but I'm back!

I went through and addressed all the comments (hopefully didn't miss any). Thanks to everyone that did the initial review, really appreciated it!

Since it touches CSE as well I ran the integration tests with and without CSE enabled just to make sure things are good. There's one more small commit coming and that's about it!

@hadoop-yetus
Copy link

🎊 +1 overall

Vote Subsystem Runtime Logfile Comment
+0 🆗 reexec 0m 58s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 1s No case conflicting files found.
+0 🆗 codespell 0m 0s codespell was not available.
+0 🆗 markdownlint 0m 0s markdownlint was not available.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 11 new or modified test files.
_ trunk Compile Tests _
+0 🆗 mvndep 12m 34s Maven dependency ordering for branch
+1 💚 mvninstall 21m 8s trunk passed
+1 💚 compile 23m 49s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 compile 20m 35s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 checkstyle 3m 44s trunk passed
+1 💚 mvnsite 2m 27s trunk passed
+1 💚 javadoc 1m 46s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 2m 35s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 spotbugs 4m 5s trunk passed
+1 💚 shadedclient 15m 4s branch has no errors when building and testing our client artifacts.
-0 ⚠️ patch 15m 27s Used diff version of patch file. Binary files and potentially other changes not applied. Please rebase and squash commits if necessary.
_ Patch Compile Tests _
+0 🆗 mvndep 0m 29s Maven dependency ordering for patch
+1 💚 mvninstall 1m 31s the patch passed
+1 💚 compile 22m 43s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javac 22m 43s the patch passed
+1 💚 compile 18m 30s the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 javac 18m 30s the patch passed
+1 💚 blanks 0m 0s The patch has no blanks issues.
-0 ⚠️ checkstyle 3m 39s /results-checkstyle-root.txt root: The patch generated 10 new + 19 unchanged - 0 fixed = 29 total (was 19)
+1 💚 mvnsite 2m 34s the patch passed
+1 💚 xml 0m 2s The patch has no ill-formed XML file.
+1 💚 javadoc 1m 46s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 1m 41s hadoop-common in the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10.
+1 💚 javadoc 0m 49s hadoop-tools_hadoop-aws-jdkPrivateBuild-1.8.0_292-8u292-b10-0ubuntu120.04-b10 with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu120.04-b10 generated 0 new + 62 unchanged - 1 fixed = 62 total (was 63)
+1 💚 spotbugs 4m 8s the patch passed
+1 💚 shadedclient 14m 58s patch has no errors when building and testing our client artifacts.
_ Other Tests _
+1 💚 unit 17m 3s hadoop-common in the patch passed.
+1 💚 unit 2m 31s hadoop-aws in the patch passed.
+1 💚 asflicense 1m 0s The patch does not generate ASF License warnings.
205m 33s
Subsystem Report/Notes
Docker ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/6/artifact/out/Dockerfile
GITHUB PR #3260
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient codespell xml spotbugs checkstyle markdownlint
uname Linux 64ba227b7a21 4.15.0-58-generic #64-Ubuntu SMP Tue Aug 6 11:12:41 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/bin/hadoop.sh
git revision trunk / 2275da082cc3e25076d67bfbad4cd517ea895248
Default Java Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Multi-JDK versions /usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Test Results https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/6/testReport/
Max. process+thread count 1267 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/6/console
versions git=2.25.1 maven=3.6.3 spotbugs=4.2.2
Powered by Apache Yetus 0.14.0-SNAPSHOT https://yetus.apache.org

This message was automatically generated.

@hadoop-yetus
Copy link

🎊 +1 overall

Vote Subsystem Runtime Logfile Comment
+0 🆗 reexec 0m 55s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+0 🆗 codespell 0m 1s codespell was not available.
+0 🆗 markdownlint 0m 1s markdownlint was not available.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 14 new or modified test files.
_ trunk Compile Tests _
+0 🆗 mvndep 12m 43s Maven dependency ordering for branch
+1 💚 mvninstall 25m 0s trunk passed
+1 💚 compile 26m 14s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 compile 21m 40s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 checkstyle 3m 57s trunk passed
+1 💚 mvnsite 2m 35s trunk passed
+1 💚 javadoc 1m 39s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 2m 22s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 spotbugs 4m 10s trunk passed
+1 💚 shadedclient 18m 10s branch has no errors when building and testing our client artifacts.
-0 ⚠️ patch 18m 33s Used diff version of patch file. Binary files and potentially other changes not applied. Please rebase and squash commits if necessary.
_ Patch Compile Tests _
+0 🆗 mvndep 0m 25s Maven dependency ordering for patch
+1 💚 mvninstall 1m 44s the patch passed
+1 💚 compile 25m 26s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javac 25m 26s the patch passed
+1 💚 compile 21m 45s the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 javac 21m 45s the patch passed
+1 💚 blanks 0m 0s The patch has no blanks issues.
-0 ⚠️ checkstyle 4m 1s /results-checkstyle-root.txt root: The patch generated 6 new + 23 unchanged - 0 fixed = 29 total (was 23)
+1 💚 mvnsite 2m 34s the patch passed
+1 💚 xml 0m 2s The patch has no ill-formed XML file.
+1 💚 javadoc 1m 36s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 1m 36s hadoop-common in the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10.
+1 💚 javadoc 0m 41s hadoop-tools_hadoop-aws-jdkPrivateBuild-1.8.0_292-8u292-b10-0ubuntu120.04-b10 with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu120.04-b10 generated 0 new + 62 unchanged - 1 fixed = 62 total (was 63)
+1 💚 spotbugs 4m 36s the patch passed
+1 💚 shadedclient 17m 51s patch has no errors when building and testing our client artifacts.
_ Other Tests _
+1 💚 unit 18m 31s hadoop-common in the patch passed.
+1 💚 unit 3m 5s hadoop-aws in the patch passed.
+1 💚 asflicense 0m 52s The patch does not generate ASF License warnings.
226m 41s
Subsystem Report/Notes
Docker ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/9/artifact/out/Dockerfile
GITHUB PR #3260
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient codespell xml spotbugs checkstyle markdownlint
uname Linux 71116e6c565e 4.15.0-143-generic #147-Ubuntu SMP Wed Apr 14 16:10:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/bin/hadoop.sh
git revision trunk / 11e82f3b5bc59d567b938adf8530835c3acff658
Default Java Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Multi-JDK versions /usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Test Results https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/9/testReport/
Max. process+thread count 2143 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/9/console
versions git=2.25.1 maven=3.6.3 spotbugs=4.2.2
Powered by Apache Yetus 0.14.0-SNAPSHOT https://yetus.apache.org

This message was automatically generated.

@bogthe
Copy link
Contributor Author

bogthe commented Aug 23, 2021

Alright, all tests pass now. This PR should be ready for review!
@mukund-thakur @mehakmeet @steveloughran thank you for your patience.

@apache apache deleted a comment from hadoop-yetus Aug 23, 2021
Copy link
Contributor

@steveloughran steveloughran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looking good, minor details in tests, docs and error messages left to tune

```

Before using Access Points make sure you're not impacted by the following:
- `ListObjectsV1` is not supported, arguably you shouldn't use it if you can;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cut the "arguably" as it will only puzzle the reader. Best to say "this is deprecated on AWS S3 for performance reasons"

*/
public static void maybeSkipIfS3GuardAndS3CSEIOE(PathIOException ioe)
public static void maybeSkipIfIOEContainsMessage(PathIOException ioe, String ...messages)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit, remove the maybe as the if indicates it happens sometimes

// Skip if CSE is not configured as an algorithm
String encryption = getConfiguration().get(Constants.SERVER_SIDE_ENCRYPTION_ALGORITHM, "");
if (!encryption.equals(S3AEncryptionMethods.CSE_KMS.getMethod())) {
skip("CSE encryption has been set");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

error text is wrong

+ "SSE-KMS");

skipIfKmsKeyIdIsNotSet(c);
// FS is not available at this point so checking CSE like this
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can just call skipIfCSEIsEnabled

@@ -2570,6 +2614,11 @@ protected S3ListResult continueListObjects(S3ListRequest request,
OBJECT_CONTINUE_LIST_REQUEST,
() -> {
if (useListV1) {
if (accessPoint != null) {
// AccessPoints are not compatible with V1List
throw new InvalidRequestException("ListV1 is not supported by AccessPoints");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, I think we could just fail and let whoever is editing the settings deal with it. v1 is not the default, and the only place we recommend it is for 3rd party implementations. If someone changes the list option, things fail.

but propose: including the config option in the text, e.g.
"v1 list API configured in" + LIST_VERSION + " is not supported by access points"

@bogthe
Copy link
Contributor Author

bogthe commented Aug 23, 2021

Thanks, updated them. Removed the extra check + throw for the V1 listing. Let me know if I should remove the upgrade in initialize and skip the V1 tests next. I can see value in both keeping and removing the upgrade.

@apache apache deleted a comment from hadoop-yetus Aug 26, 2021
@steveloughran
Copy link
Contributor

I'm happy with this; don't see any obvious regressions.

One thing (and I've suggested it to mehakmeet for the CSE work) is mentioning AP testing in the testing docs, especially qualifying SDK updates.

It's going to be hard as you'll need one set up (I don't have locally...not sure if we have one on our VPN), so it should be something like:

You SHOULD run tests against an S3 access point if you have the setup to do so.

@steveloughran
Copy link
Contributor

had another thought. What if we had an option to require access points? You could then set that globally and it would be an error to try and connect to any bucket which didn't have an AP ARN defined., something like fs.s3a.access.point.required
The idea being you could have a policy in a VPN that you weren't allowed to talk to anything except through an AP; any mistyped/misreferenced bucket would fail to initialise. If you really need to talk to a bucket externally you could disable the switch on a bucket by bucket basis.

@bogthe
Copy link
Contributor Author

bogthe commented Aug 26, 2021

That's an interesting idea 🤔 . It definitely sounds like a great way to improve security in a VPN from the software stack. What's the general way to approach this, add it to this PR or come back later with another PR and only then cherry pick both into release branch? I prefer smaller changes but don't mind adding it here either.

had another thought. What if we had an option to require access points? You could then set that globally and it would be an error to try and connect to any bucket which didn't have an AP ARN defined., something like fs.s3a.access.point.required
The idea being you could have a policy in a VPN that you weren't allowed to talk to anything except through an AP; any mistyped/misreferenced bucket would fail to initialise. If you really need to talk to a bucket externally you could disable the switch on a bucket by bucket basis.

You don't need to be inside a VPN to test access points. You only need an access point created for any bucket and you're good to go. Of course, if you have the set up and want to test it there, that's great but what you're testing then is more on AWS integration than S3A changes. And yes! Update to the docs coming right up!

I'm happy with this; don't see any obvious regressions.

One thing (and I've suggested it to mehakmeet for the CSE work) is mentioning AP testing in the testing docs, especially qualifying SDK updates.

It's going to be hard as you'll need one set up (I don't have locally...not sure if we have one on our VPN), so it should be something like:

You SHOULD run tests against an S3 access point if you have the setup to do so.

@steveloughran
Copy link
Contributor

afraid @mehakmeet's patches have broken this, sorry

@mehakmeet
Copy link
Contributor

Sorry about that 😅. I have refactored the CSE skip conditions in a tuning patch so you can just remove those changes from this patch and rebase once.

@bogthe bogthe force-pushed the s3/HADOOP-17198-accesspoints branch 2 times, most recently from 28590ea to b0fa6e5 Compare September 23, 2021 08:59
@bogthe
Copy link
Contributor Author

bogthe commented Sep 23, 2021

@mehakmeet thanks for letting me know! (should've been in a different patch the first time, but I thought I could sneak them in this one 😓)

@steveloughran rebased, reran the entire suite and everything looks to be OK now 👍

@bogthe
Copy link
Contributor Author

bogthe commented Sep 23, 2021

did something change with the build system?

@hadoop-yetus
Copy link

💔 -1 overall

Vote Subsystem Runtime Logfile Comment
+0 🆗 reexec 0m 45s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+0 🆗 codespell 0m 1s codespell was not available.
+0 🆗 markdownlint 0m 1s markdownlint was not available.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 8 new or modified test files.
_ trunk Compile Tests _
+0 🆗 mvndep 12m 59s Maven dependency ordering for branch
+1 💚 mvninstall 20m 47s trunk passed
+1 💚 compile 21m 14s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 compile 18m 37s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 checkstyle 3m 42s trunk passed
+1 💚 mvnsite 2m 37s trunk passed
+1 💚 javadoc 1m 49s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 2m 29s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 spotbugs 3m 47s trunk passed
+1 💚 shadedclient 20m 8s branch has no errors when building and testing our client artifacts.
_ Patch Compile Tests _
+0 🆗 mvndep 0m 27s Maven dependency ordering for patch
+1 💚 mvninstall 1m 32s the patch passed
+1 💚 compile 20m 43s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javac 20m 43s the patch passed
+1 💚 compile 21m 37s the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 javac 21m 37s the patch passed
+1 💚 blanks 0m 0s The patch has no blanks issues.
-0 ⚠️ checkstyle 4m 6s /results-checkstyle-root.txt root: The patch generated 8 new + 19 unchanged - 0 fixed = 27 total (was 19)
+1 💚 mvnsite 2m 44s the patch passed
+1 💚 xml 0m 1s The patch has no ill-formed XML file.
+1 💚 javadoc 1m 40s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 1m 52s hadoop-common in the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10.
+1 💚 javadoc 0m 44s hadoop-tools_hadoop-aws-jdkPrivateBuild-1.8.0_292-8u292-b10-0ubuntu120.04-b10 with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu120.04-b10 generated 0 new + 62 unchanged - 1 fixed = 62 total (was 63)
+1 💚 spotbugs 5m 2s the patch passed
+1 💚 shadedclient 25m 15s patch has no errors when building and testing our client artifacts.
_ Other Tests _
-1 ❌ unit 18m 48s /patch-unit-hadoop-common-project_hadoop-common.txt hadoop-common in the patch passed.
+1 💚 unit 2m 40s hadoop-aws in the patch passed.
+1 💚 asflicense 0m 58s The patch does not generate ASF License warnings.
220m 5s
Reason Tests
Failed junit tests hadoop.fs.TestLocalFSCopyFromLocal
hadoop.metrics2.source.TestJvmMetrics
Subsystem Report/Notes
Docker ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/16/artifact/out/Dockerfile
GITHUB PR #3260
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient codespell xml spotbugs checkstyle markdownlint
uname Linux 848940a79329 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/bin/hadoop.sh
git revision trunk / 5f3e6914fdafe09b0389506ef2ffe810c589b827
Default Java Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Multi-JDK versions /usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Test Results https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/16/testReport/
Max. process+thread count 1263 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/16/console
versions git=2.25.1 maven=3.6.3 spotbugs=4.2.2
Powered by Apache Yetus 0.14.0-SNAPSHOT https://yetus.apache.org

This message was automatically generated.

Bogdan Stolojan added 3 commits September 28, 2021 13:27
This change aims to add support for S3 accesspoints. To use S3 object level
APIs for an accesspoint, one has to use the accesspoint (ap) ARN.

Hence the following have been added:
- a new property to set the accesspoint ARN;
- s3a parsing and using the new property with appropriate exceptions;
- initial documentation update for accesspoints;

We're explicitly throwing now if S3Guard is enabled and you're using an
Access Point. Which is the right way to go anyway!

Skipping all tests that use AP and S3Guard too. We're also fixing
CSEEncryption tests since it was checking for the wrong condition.

Adding Access Point only option

- Adding a new config option called `fs.s3a.accesspoint.required` which
  requires all bucket access to be done through access points, otherwise
  an exception is thrown on initialize;
- Updating documentation to include this new option;
- Adding new test for the option;
@apache apache deleted a comment from hadoop-yetus Sep 28, 2021
@apache apache deleted a comment from hadoop-yetus Sep 28, 2021
@apache apache deleted a comment from hadoop-yetus Sep 28, 2021
@apache apache deleted a comment from hadoop-yetus Sep 28, 2021
@apache apache deleted a comment from hadoop-yetus Sep 28, 2021
s3.getBucketAcl(bucket);
} catch (AmazonServiceException ex) {
int statusCode = ex.getStatusCode();
if (statusCode == 404 || (statusCode == 403 && accessPoint != null)) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Starting to think we should use constants here, just to track down where they come from. I see we don't do that elsewhere (S3AUtils.translateException(), but that doesn't mean we shouldn't start)

Could you add constants here for HTTP_RESPONSE_404 & 403 in InternalConstants & refer here. Then we could retrofit and extend elsewhere

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see there's a SC_404 in internal constants so I'll use that and add a SC_403.

@@ -1167,7 +1216,10 @@ public String getBucketLocation(String bucketName) throws IOException {
final String region = trackDurationAndSpan(
STORE_EXISTS_PROBE, bucketName, null, () ->
invoker.retry("getBucketLocation()", bucketName, true, () ->
s3.getBucketLocation(bucketName)));
// If accessPoint then region is known from Arn
accessPoint != null
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we pull this up to L1216 & we can skip the entire overhead of duration tracking, retry etc.

Currently it's overkill to wrap, but it will add it to the iostats, so maybe it's best to leave as is

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I liked the iostats tracking so it doesn't look like an operation is missing / changed.

@@ -2570,6 +2614,11 @@ protected S3ListResult continueListObjects(S3ListRequest request,
OBJECT_CONTINUE_LIST_REQUEST,
() -> {
if (useListV1) {
if (accessPoint != null) {
// AccessPoints are not compatible with V1List
throw new InvalidRequestException("ListV1 is not supported by AccessPoints");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see you've reverted this & letting the SDK fail it. worksforme

- `ListObjectsV1` is not supported, this is also deprecated on AWS S3 for performance reasons;
- The endpoint for S3 requests will automatically change from `s3.amazonaws.com` to use
`s3-accesspoint.REGION.amazonaws.{com | com.cn}` depending on the Access Point ARN. This **only**
happens if the `fs.s3a.endpoint` property isn't set. The endpoint property overwrites any changes,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this still true?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nope, removing good catch

this is intentional so FIPS or DualStack endpoints can be set. While considering endpoints,
if you have any custom signers that use the host endpoint property make sure to update them if
needed;
- Access Point names don't have to be globally unique, in the same way that bucket names have to.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as we support it per-bucket only, this bullet point can be cut

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

</property>
```

While keeping the global `accesspoint.arn` property set to empty `" "` which is the default.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sometimes " " can be set in a conf to force an override which getTrimmed() will then downgrade to "". No need to worry about that in these docs

@apache apache deleted a comment from hadoop-yetus Sep 28, 2021
@apache apache deleted a comment from hadoop-yetus Sep 28, 2021
@apache apache deleted a comment from hadoop-yetus Sep 28, 2021
@apache apache deleted a comment from hadoop-yetus Sep 28, 2021
@apache apache deleted a comment from hadoop-yetus Sep 28, 2021
Copy link
Contributor

@steveloughran steveloughran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, done a review through VS.code to see everything discussed has been covered. Answer is: yes

some changes on docs now the option is per-bucket only, and I'm wondering if we should declare some InternalConstants for 403 and 404, to help in future if we want to find out where these are being used

other than that: ready to go1

@bogthe
Copy link
Contributor Author

bogthe commented Sep 28, 2021

@steveloughran thanks for having a look again. Addressed the comments.

I think VSCode is doing something funky as

I see you've reverted this & letting the SDK fail it. worksforme

comment was on a previous revision, I didn't revert that, ListV1 is upgraded for V2 if using APs (either VS code or rebasing).

@hadoop-yetus
Copy link

🎊 +1 overall

Vote Subsystem Runtime Logfile Comment
+0 🆗 reexec 0m 55s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 1s No case conflicting files found.
+0 🆗 codespell 0m 0s codespell was not available.
+0 🆗 markdownlint 0m 0s markdownlint was not available.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 8 new or modified test files.
_ trunk Compile Tests _
+0 🆗 mvndep 13m 37s Maven dependency ordering for branch
+1 💚 mvninstall 27m 45s trunk passed
+1 💚 compile 22m 13s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 compile 19m 28s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 checkstyle 3m 33s trunk passed
+1 💚 mvnsite 2m 44s trunk passed
+1 💚 javadoc 1m 37s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 2m 14s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 spotbugs 3m 49s trunk passed
+1 💚 shadedclient 21m 17s branch has no errors when building and testing our client artifacts.
_ Patch Compile Tests _
+0 🆗 mvndep 0m 27s Maven dependency ordering for patch
+1 💚 mvninstall 1m 38s the patch passed
+1 💚 compile 22m 35s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javac 22m 35s the patch passed
+1 💚 compile 19m 12s the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 javac 19m 12s the patch passed
+1 💚 blanks 0m 0s The patch has no blanks issues.
+1 💚 checkstyle 3m 30s the patch passed
+1 💚 mvnsite 2m 32s the patch passed
+1 💚 xml 0m 1s The patch has no ill-formed XML file.
+1 💚 javadoc 1m 35s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 1m 34s hadoop-common in the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10.
+1 💚 javadoc 0m 42s hadoop-tools_hadoop-aws-jdkPrivateBuild-1.8.0_292-8u292-b10-0ubuntu120.04-b10 with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu120.04-b10 generated 0 new + 62 unchanged - 1 fixed = 62 total (was 63)
+1 💚 spotbugs 4m 8s the patch passed
+1 💚 shadedclient 21m 16s patch has no errors when building and testing our client artifacts.
_ Other Tests _
+1 💚 unit 17m 58s hadoop-common in the patch passed.
+1 💚 unit 2m 31s hadoop-aws in the patch passed.
+1 💚 asflicense 0m 59s The patch does not generate ASF License warnings.
223m 16s
Subsystem Report/Notes
Docker ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/17/artifact/out/Dockerfile
GITHUB PR #3260
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient codespell xml spotbugs checkstyle markdownlint
uname Linux b701753fd55f 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/bin/hadoop.sh
git revision trunk / 7a0c3aaf423f415060a38cc1e2c8de9c33582f3d
Default Java Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Multi-JDK versions /usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Test Results https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/17/testReport/
Max. process+thread count 3148 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/17/console
versions git=2.25.1 maven=3.6.3 spotbugs=4.2.2
Powered by Apache Yetus 0.14.0-SNAPSHOT https://yetus.apache.org

This message was automatically generated.

@hadoop-yetus
Copy link

🎊 +1 overall

Vote Subsystem Runtime Logfile Comment
+0 🆗 reexec 1m 2s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 1s No case conflicting files found.
+0 🆗 codespell 0m 0s codespell was not available.
+0 🆗 markdownlint 0m 0s markdownlint was not available.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 8 new or modified test files.
_ trunk Compile Tests _
+0 🆗 mvndep 13m 35s Maven dependency ordering for branch
+1 💚 mvninstall 22m 59s trunk passed
+1 💚 compile 22m 55s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 compile 19m 28s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 checkstyle 3m 44s trunk passed
+1 💚 mvnsite 2m 24s trunk passed
+1 💚 javadoc 1m 36s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 2m 16s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 spotbugs 3m 53s trunk passed
+1 💚 shadedclient 21m 6s branch has no errors when building and testing our client artifacts.
_ Patch Compile Tests _
+0 🆗 mvndep 0m 28s Maven dependency ordering for patch
+1 💚 mvninstall 1m 36s the patch passed
+1 💚 compile 22m 25s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javac 22m 25s the patch passed
+1 💚 compile 19m 15s the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 javac 19m 15s the patch passed
+1 💚 blanks 0m 0s The patch has no blanks issues.
+1 💚 checkstyle 3m 39s the patch passed
+1 💚 mvnsite 2m 32s the patch passed
+1 💚 xml 0m 2s The patch has no ill-formed XML file.
+1 💚 javadoc 1m 44s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 1m 45s hadoop-common in the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10.
+1 💚 javadoc 0m 45s hadoop-tools_hadoop-aws-jdkPrivateBuild-1.8.0_292-8u292-b10-0ubuntu120.04-b10 with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu120.04-b10 generated 0 new + 62 unchanged - 1 fixed = 62 total (was 63)
+1 💚 spotbugs 4m 21s the patch passed
+1 💚 shadedclient 20m 17s patch has no errors when building and testing our client artifacts.
_ Other Tests _
+1 💚 unit 17m 28s hadoop-common in the patch passed.
+1 💚 unit 2m 32s hadoop-aws in the patch passed.
+1 💚 asflicense 1m 1s The patch does not generate ASF License warnings.
217m 58s
Subsystem Report/Notes
Docker ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/18/artifact/out/Dockerfile
GITHUB PR #3260
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient codespell xml spotbugs checkstyle markdownlint
uname Linux f11da8e9bcd4 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/bin/hadoop.sh
git revision trunk / 5710a88
Default Java Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Multi-JDK versions /usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Test Results https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/18/testReport/
Max. process+thread count 1262 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/18/console
versions git=2.25.1 maven=3.6.3 spotbugs=4.2.2
Powered by Apache Yetus 0.14.0-SNAPSHOT https://yetus.apache.org

This message was automatically generated.

@hadoop-yetus
Copy link

🎊 +1 overall

Vote Subsystem Runtime Logfile Comment
+0 🆗 reexec 1m 1s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+0 🆗 codespell 0m 1s codespell was not available.
+0 🆗 markdownlint 0m 1s markdownlint was not available.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 8 new or modified test files.
_ trunk Compile Tests _
+0 🆗 mvndep 13m 26s Maven dependency ordering for branch
+1 💚 mvninstall 24m 6s trunk passed
+1 💚 compile 23m 7s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 compile 19m 26s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 checkstyle 3m 49s trunk passed
+1 💚 mvnsite 2m 21s trunk passed
+1 💚 javadoc 1m 32s trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 2m 13s trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 spotbugs 3m 38s trunk passed
+1 💚 shadedclient 23m 4s branch has no errors when building and testing our client artifacts.
_ Patch Compile Tests _
+0 🆗 mvndep 0m 23s Maven dependency ordering for patch
+1 💚 mvninstall 1m 33s the patch passed
+1 💚 compile 22m 15s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javac 22m 15s the patch passed
+1 💚 compile 19m 37s the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
+1 💚 javac 19m 37s the patch passed
+1 💚 blanks 0m 0s The patch has no blanks issues.
+1 💚 checkstyle 3m 55s the patch passed
+1 💚 mvnsite 2m 20s the patch passed
+1 💚 xml 0m 1s The patch has no ill-formed XML file.
+1 💚 javadoc 1m 31s the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04
+1 💚 javadoc 1m 33s hadoop-common in the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10.
+1 💚 javadoc 0m 38s hadoop-tools_hadoop-aws-jdkPrivateBuild-1.8.0_292-8u292-b10-0ubuntu120.04-b10 with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu120.04-b10 generated 0 new + 62 unchanged - 1 fixed = 62 total (was 63)
+1 💚 spotbugs 4m 1s the patch passed
+1 💚 shadedclient 22m 41s patch has no errors when building and testing our client artifacts.
_ Other Tests _
+1 💚 unit 17m 11s hadoop-common in the patch passed.
+1 💚 unit 2m 27s hadoop-aws in the patch passed.
+1 💚 asflicense 0m 50s The patch does not generate ASF License warnings.
221m 33s
Subsystem Report/Notes
Docker ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/19/artifact/out/Dockerfile
GITHUB PR #3260
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient codespell xml spotbugs checkstyle markdownlint
uname Linux 1b9f9e4235d4 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality dev-support/bin/hadoop.sh
git revision trunk / 22732f2
Default Java Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Multi-JDK versions /usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
Test Results https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/19/testReport/
Max. process+thread count 1377 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3260/19/console
versions git=2.25.1 maven=3.6.3 spotbugs=4.2.2
Powered by Apache Yetus 0.14.0-SNAPSHOT https://yetus.apache.org

This message was automatically generated.

Copy link
Contributor

@steveloughran steveloughran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1, merging and going to a backport to 3.3

@steveloughran steveloughran merged commit b7c2864 into apache:trunk Sep 29, 2021
bogthe added a commit to bogthe/hadoop that referenced this pull request Feb 2, 2022
Add support for S3 Access Points. This provides extra security as it
ensures applications are not working with buckets belong to third parties.

To bind a bucket to an access point, set the access point (ap) ARN,
which must be done for each specific bucket, using the pattern

fs.s3a.bucket.$BUCKET.accesspoint.arn = ARN

* The global/bucket option `fs.s3a.accesspoint.required` to
mandate that buckets must declare their access point.
* This is not compatible with S3Guard.

Consult the documentation for further details.

Contributed by Bogdan Stolojan
bogthe added a commit to bogthe/hadoop that referenced this pull request Feb 2, 2022
Add support for S3 Access Points. This provides extra security as it
ensures applications are not working with buckets belong to third parties.

To bind a bucket to an access point, set the access point (ap) ARN,
which must be done for each specific bucket, using the pattern

fs.s3a.bucket.$BUCKET.accesspoint.arn = ARN

* The global/bucket option `fs.s3a.accesspoint.required` to
mandate that buckets must declare their access point.
* This is not compatible with S3Guard.

Consult the documentation for further details.

Contributed by Bogdan Stolojan
steveloughran pushed a commit to steveloughran/hadoop that referenced this pull request Feb 3, 2022
Add support for S3 Access Points. This provides extra security as it
ensures applications are not working with buckets belong to third parties.

To bind a bucket to an access point, set the access point (ap) ARN,
which must be done for each specific bucket, using the pattern

fs.s3a.bucket.$BUCKET.accesspoint.arn = ARN

* The global/bucket option `fs.s3a.accesspoint.required` to
mandate that buckets must declare their access point.
* This is not compatible with S3Guard.

Consult the documentation for further details.

Contributed by Bogdan Stolojan

(this commit contains the changes to TestArnResource from HADOOP-18068,
 "upgrade AWS SDK to 1.12.132" so that it works with the later SDK.)

Change-Id: I3fac213e52ca6ec1c813effb8496c353964b8e1b
asfgit pushed a commit that referenced this pull request Feb 4, 2022
Add support for S3 Access Points. This provides extra security as it
ensures applications are not working with buckets belong to third parties.

To bind a bucket to an access point, set the access point (ap) ARN,
which must be done for each specific bucket, using the pattern

fs.s3a.bucket.$BUCKET.accesspoint.arn = ARN

* The global/bucket option `fs.s3a.accesspoint.required` to
mandate that buckets must declare their access point.
* This is not compatible with S3Guard.

Consult the documentation for further details.

Contributed by Bogdan Stolojan

(this commit contains the changes to TestArnResource from HADOOP-18068,
 "upgrade AWS SDK to 1.12.132" so that it works with the later SDK.)

Change-Id: I3fac213e52ca6ec1c813effb8496c353964b8e1b
sunchao pushed a commit that referenced this pull request Feb 4, 2022
Add support for S3 Access Points. This provides extra security as it
ensures applications are not working with buckets belong to third parties.

To bind a bucket to an access point, set the access point (ap) ARN,
which must be done for each specific bucket, using the pattern

fs.s3a.bucket.$BUCKET.accesspoint.arn = ARN

* The global/bucket option `fs.s3a.accesspoint.required` to
mandate that buckets must declare their access point.
* This is not compatible with S3Guard.

Consult the documentation for further details.
kevincong pushed a commit to kevincong/hadoop that referenced this pull request May 18, 2022
Add support for S3 Access Points. This provides extra security as it
ensures applications are not working with buckets belong to third parties.

To bind a bucket to an access point, set the access point (ap) ARN,
which must be done for each specific bucket, using the pattern

fs.s3a.bucket.$BUCKET.accesspoint.arn = ARN

* The global/bucket option `fs.s3a.accesspoint.required` to
mandate that buckets must declare their access point.
* This is not compatible with S3Guard.

Consult the documentation for further details.

Contributed by Bogdan Stolojan

(this commit contains the changes to TestArnResource from HADOOP-18068,
 "upgrade AWS SDK to 1.12.132" so that it works with the later SDK.)

Change-Id: I3fac213e52ca6ec1c813effb8496c353964b8e1b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants