Skip to content

Commit 895fed6

Browse files
address Copilot comments
1 parent a77c55a commit 895fed6

2 files changed

Lines changed: 12 additions & 41 deletions

File tree

src/main/java/net/snowflake/client/internal/jdbc/cloud/storage/SnowflakeS3Client.java

Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.Base64;
2121
import java.util.List;
22+
import java.util.Locale;
2223
import java.util.Map;
2324
import java.util.Properties;
2425
import java.util.concurrent.CompletableFuture;
@@ -174,7 +175,15 @@ private void setupSnowflakeS3Client(
174175
if (this.stageEndPoint != null
175176
&& !this.stageEndPoint.isEmpty()
176177
&& !"null".equals(this.stageEndPoint)) {
177-
clientBuilder.endpointOverride(resolveStageEndpointUriForOverride(this.stageEndPoint));
178+
String endpointForOverride = this.stageEndPoint;
179+
String lower = endpointForOverride.toLowerCase(Locale.ROOT);
180+
if (!lower.startsWith("https://") && !lower.startsWith("http://")) {
181+
logger.debug(
182+
"AWS S3 Client: stage endpoint {} has no scheme, normalizing for URI creation.",
183+
this.stageEndPoint);
184+
endpointForOverride = "https://" + endpointForOverride;
185+
}
186+
clientBuilder.endpointOverride(URI.create(endpointForOverride));
178187
clientBuilder.region(region);
179188
} else {
180189
if (this.isUseS3RegionalUrl) {
@@ -233,38 +242,6 @@ private void setupSnowflakeS3Client(
233242
amazonClient = clientBuilder.build();
234243
}
235244

236-
/**
237-
* Builds a {@link URI} for {@code endpointOverride} with a non-null scheme (required by AWS SDK
238-
* v2). Uses {@link URI#getScheme()} and compares {@code http}/{@code https} case-insensitively
239-
* per RFC 3986; bare hostnames get an {@code https://} prefix.
240-
*
241-
* <p>{@link URI#create(String)} only throws {@link IllegalArgumentException}, wrapping {@link
242-
* java.net.URISyntaxException} when the string violates RFC&nbsp;2396 / RFC&nbsp;3986.
243-
*/
244-
private URI resolveStageEndpointUriForOverride(String raw) {
245-
URI parsed;
246-
try {
247-
parsed = URI.create(raw);
248-
} catch (IllegalArgumentException ex) {
249-
logger.debug(
250-
"AWS S3 Client: could not parse stage endpoint as URI; raw=\""
251-
+ raw
252-
+ "\"; prefixing https://",
253-
ex);
254-
return URI.create("https://" + raw);
255-
}
256-
String scheme = parsed.getScheme();
257-
if (scheme == null || scheme.isEmpty()) {
258-
logger.debug(
259-
"AWS S3 Client: stage endpoint {} has no scheme, normalizing for URI creation.", raw);
260-
return URI.create("https://" + raw);
261-
}
262-
if (scheme.equalsIgnoreCase("https") || scheme.equalsIgnoreCase("http")) {
263-
return parsed;
264-
}
265-
return parsed;
266-
}
267-
268245
static String getDomainSuffixForRegionalUrl(String regionName) {
269246
return regionName.toLowerCase().startsWith("cn-") ? "amazonaws.com.cn" : "amazonaws.com";
270247
}

src/test/java/net/snowflake/client/internal/jdbc/cloud/storage/SnowflakeS3ClientTest.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,7 @@ public void shouldDocumentBareAwsHostnameHasNullUriScheme() {
4141
public void shouldPrependHttpsWhenStageEndpointHasNoScheme() throws Exception {
4242
SnowflakeS3Client client =
4343
newClient(
44-
"eu-west-1",
45-
"s3.eu-west-1.amazonaws.com",
46-
false,
47-
/* isClientSideEncrypted */ false);
44+
"eu-west-1", "s3.eu-west-1.amazonaws.com", false, /* isClientSideEncrypted */ false);
4845
try {
4946
URI override = endpointOverride(client).get();
5047
assertEquals("https", override.getScheme());
@@ -154,10 +151,7 @@ public void shouldBuildClientWithoutNpeWhenStageEndpointIsSchemelessHost() throw
154151
try {
155152
client =
156153
newClient(
157-
"us-west-2",
158-
"s3.us-west-2.amazonaws.com",
159-
false,
160-
/* isClientSideEncrypted */ false);
154+
"us-west-2", "s3.us-west-2.amazonaws.com", false, /* isClientSideEncrypted */ false);
161155
assertNotNull(client);
162156
assertTrue(endpointOverride(client).isPresent());
163157
assertNotNull(endpointOverride(client).get().getScheme());

0 commit comments

Comments
 (0)