diff --git a/docs/design/core/presignedURL-Get/DecisionLog.md b/docs/design/core/presignedURL-Get/DecisionLog.md index 345a3ec9b584..84be9cb17bf4 100644 --- a/docs/design/core/presignedURL-Get/DecisionLog.md +++ b/docs/design/core/presignedURL-Get/DecisionLog.md @@ -1,7 +1,7 @@ # S3 Pre-signed URL GET - Decision Log -## Review Meeting: 06/17/2024 +## Review Meeting: 06/17/2025 **Attendees**: Alban, John, Zoe, Dongie, Bole, Ran, Saranya ### Closed Decisions @@ -20,7 +20,7 @@ 3. What should we name the Helper API? Options include PresignedURLManager or PresignedUrlExtension. Will be addressed in the Surface API Review. -## Review Meeting: 06/23/2024 +## Review Meeting: 06/23/2025 **Attendees**: John, Zoe, Dongie, Bole, Ran, Saranya, Alex, David ### Decisions Addressed @@ -30,3 +30,9 @@ 2. Replace IS_DISCOVERED_ENDPOINT execution attribute with a more semantically appropriate solution. Decided to introduce new SKIP_ENDPOINT_RESOLUTION execution attribute specifically for presigned URL scenarios where endpoint resolution should be bypassed, as IS_DISCOVERED_ENDPOINT is tied to deprecated endpoint discovery feature. 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. + +## Decision Poll Meeting: 06/30/2025 +**Attendees**: John, Zoe, Dongie, Bole, Ran, Saranya, Alex + +### Decision Addressed +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. diff --git a/docs/design/core/presignedURL-Get/Design.md b/docs/design/core/presignedURL-Get/Design.md index a99d0b8bfccb..79d61b1f5147 100644 --- a/docs/design/core/presignedURL-Get/Design.md +++ b/docs/design/core/presignedURL-Get/Design.md @@ -43,8 +43,7 @@ PresignedUrlManager presignManager = s3Client.presignedManager(); // Create presigned URL request PresignedUrlGetObjectRequest request = PresignedUrlGetObjectRequest.builder() .presignedUrl(presignedUrl) - .rangeStart(0L) - .rangeEnd(1024L) + .range("range=0-1024") .build(); // Async usage @@ -128,12 +127,11 @@ public final class PresignedUrlGetObjectRequest implements ToCopyableBuilder { private final String presignedUrl; - private final Long rangeStart; - private final Long rangeEnd; + private final String range; - // Standard getters: presignedUrl(), rangeStart(), rangeEnd() + // Standard getters: presignedUrl(), range() // Standard builder methods: builder(), toBuilder() - // Standard Builder class with presignedUrl(), rangeStart(), rangeEnd() setter methods + // Standard Builder class with presignedUrl(), range() setter methods } ``` @@ -159,7 +157,7 @@ Three approaches were considered: ### Why doesn't PresignedUrlGetObjectRequest extend S3Request? -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, rangeStart, rangeEnd). Internally, this gets wrapped in an encapsulated class that extends S3Request for use with ClientHandler. +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. ## References