You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**Attendees**: Alban Gicquel, John Viegas, Zoe Wang, Dongie Agnir, Bole Yi, Ran Vaknin, Saranya Somepalli
6
6
7
7
### Closed Decisions
8
8
@@ -21,7 +21,7 @@
21
21
3. What should we name the Helper API? Options include PresignedURLManager or PresignedUrlExtension. Will be addressed in the Surface API Review.
22
22
23
23
## Review Meeting: 06/23/2025
24
-
**Attendees**: John, Zoe, Dongie, Bole, Ran, Saranya, Alex, David
24
+
**Attendees**: John Viegas, Zoe Wang, Dongie Agnir, Bole Yi, Ran Vaknin, Saranya Somepalli, David Ho
25
25
26
26
### Decisions Addressed
27
27
@@ -32,7 +32,24 @@
32
32
3. Use separate rangeStart/rangeEnd fields vs single range string parameter. Decided to use separate rangeStart and rangeEnd Long fields for better user experience, as start/end is more intuitive than string parsing.
33
33
34
34
## Decision Poll Meeting: 06/30/2025
35
-
**Attendees**: John, Zoe, Dongie, Bole, Ran, Saranya, Alex
35
+
**Attendees**: John Viegas, Zoe Wang, Dongie Agnir, Bole Yi, Ran Vaknin, Saranya Somepalli, David Ho, Alex Woods
36
36
37
37
### Decision Addressed
38
38
Decided to use String range field for Request object to support all RFC 7233 formats including suffix ranges (bytes=-100) and future multi-range support, since S3 currently doesn't support multiple ranges but may in the future without requiring SDK changes.
39
+
40
+
## Post-standup Meeting: 07/14/2025
41
+
**Attendees**: Alban Gicquel, John Viegas, Zoe Wang, Dongie Agnir, Bole Yi, Ran Vaknin, Saranya Somepalli, David Ho, Alex Woods
42
+
43
+
### Decision Addressed
44
+
The team has decided to implement functionality only for S3 async client and defer S3 sync client implementation for now. This decision was made because implementing S3 sync client would require supporting multipart download capabilities.
45
+
46
+
## API Surface Area Review: 07/21/2025
47
+
**Attendees**: John Viegas, Zoe Wang, Dongie Agnir, Bole Yi, Ran Vaknin, Saranya Somepalli, David Ho, Alex Woods
48
+
49
+
### Decisions Addressed
50
+
51
+
1. Decided on the naming for the surface APIs - AsyncPresignedUrlExtension for the new core API, presignedUrlExtension() for the method to call from the AsyncS3Client and PresignedUrlDownloadRequest for the Get Object Request. Also decided to have PresignedUrlDownload as the Operation Name for metric collection.
52
+
53
+
2. Remove the consumer builder pattern from Get Request Model.
54
+
55
+
3. throw UnsupportedOperationException for Multipart S3 Client and S3 CRT Client for now.
Copy file name to clipboardExpand all lines: docs/design/core/presignedURL-Get/Design.md
+24-64Lines changed: 24 additions & 64 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,61 +10,52 @@ This document proposes how this functionality should be implemented in the Java
10
10
11
11
Look at decision log here: [Decision Log Section](DecisionLog.md)
12
12
13
-
The Java SDK team has decided to implement a separate `PresignedUrlManager`. The team chose the helper API pattern over direct `S3Client` integration to maintain clean separation of concerns while preserving SDK functionality.
13
+
The Java SDK team has decided to implement a separate `AsyncPresignedUrlExtension`. The team chose the helper API pattern over direct `S3AsyncClient` integration to maintain clean separation of concerns while preserving SDK functionality.
14
14
15
15
## Overview
16
16
17
-
The design introduces new helper APIs `AsyncPresignedUrlManager` and `PresignedUrlManager`which can be instantiated via the existing `S3AsyncClient` and `S3Client` respectively. These managers provide a clean abstraction layer that preserves SDK benefits while handling the unique requirements of pre-signed URL requests.
17
+
The design introduces a new helper API `AsyncPresignedUrlExtension`which can be instantiated via the existing `S3AsyncClient`. This extension provides a clean abstraction layer that preserves SDK benefits while handling the unique requirements of pre-signed URL requests.
18
18
19
-
This design will implement only the GET /download function for presigned URLs.
19
+
This design will implement only the GET /download function for presigned URLs for the S3AsyncClient. The synchronous S3Client implementation is deferred to future work.
20
20
21
21
22
22
23
23
## Proposed APIs
24
24
25
-
The v2 SDK will support a presigned URL manager for both sync and async clients that can leverage pre-signed URL downloads.
25
+
The v2 SDK will support a presigned URL extension for the async client that can leverage pre-signed URL downloads.
@@ -153,12 +110,15 @@ Three approaches were considered:
153
110
-**Pros**: Logical extension of presigner concept
154
111
-**Cons**: Breaks current stateless presigner patterns
155
112
156
-
**Decision**: Option 1 provides clean separation while preserving SDK benefits and following established v2 utility patterns.cutePresignedGetObject(presignedRequest);
113
+
**Decision**: Option 1 provides clean separation while preserving SDK benefits and following established v2 utility patterns.
### What about synchronous S3Client and S3 CRT Client support?
159
116
160
-
While extending S3Request would provide access to RequestOverrideConfiguration, many of these configurations (like credentials provider, signers) are not supported with presigned URL execution. Instead, we use a standalone request with only essential parameters (presignedUrl, range). Internally, this gets wrapped in an encapsulated class that extends S3Request for use with ClientHandler.
117
+
The synchronous S3Client implementation has been deferred to future work due to complexities around multipart download requirements. Support for S3CrtAsyncClient will also be added in future work once the AWS CRT team addresses current limitations with pre-signed URL handling.
While extending S3Request would provide access to RequestOverrideConfiguration, many of these configurations (like credentials provider, signers) are not supported with presigned URL execution. Instead, we use a standalone request with only essential parameters (presignedUrl, range). Internally, this gets wrapped in an encapsulated class that extends S3Request for use with ClientHandler.
0 commit comments