Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
4069e9b
fix(oauth2_http): avoid retrying on 403 Forbidden during GCE metadata…
macastelaz Jul 8, 2026
d03d42c
test: assert exactly 1 request is made on 403 in isOnGce_forbidden_do…
macastelaz Jul 8, 2026
b38389c
fix(oauth2_http): downgrade instanceof pattern matching for Java 8 co…
macastelaz Jul 8, 2026
cd409a9
test: add getRequestCount to MockMetadataServerTransport to support v…
macastelaz Jul 9, 2026
3c7ca3e
chore: sync java-showcase generated files
macastelaz Jul 9, 2026
b5f6618
test: mock getOsName in isOnGce_forbidden_doesNotRetry to avoid CI en…
macastelaz Jul 9, 2026
86ec2fd
feat(oauth2_http): fail fast on all 4xx client errors during GCE ping
macastelaz Jul 9, 2026
345c3ef
test: mock lowercase os name for linux in gce detection tests
macastelaz Jul 9, 2026
bf4d821
style(oauth2_http): format ComputeEngineCredentialsTest
macastelaz Jul 9, 2026
1ecf6ea
Address review comments
macastelaz Jul 13, 2026
1e46c24
Merge branch 'main' into remove-gce-403-retry
macastelaz Jul 13, 2026
4a30454
Fix CI styling errors
macastelaz Jul 13, 2026
83634c4
Fix trailing spaces to satisfy formatter
macastelaz Jul 13, 2026
69b21ff
Merge branch 'main' into remove-gce-403-retry
macastelaz Jul 14, 2026
3096a47
Fix Windows proto compilation issue with UDM
macastelaz Jul 14, 2026
ced1e31
Fix JDK 21 compiler bug in generated gRPC code
macastelaz Jul 14, 2026
2e61017
Fix generated code for UdmProto rename to fix Windows CI
macastelaz Jul 14, 2026
23f7bc0
Retrigger CI
macastelaz Jul 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -648,6 +648,10 @@ void setProjectId(String projectId) {
private static boolean pingComputeEngineMetadata(
HttpTransportFactory transportFactory, DefaultCredentialsProvider provider) {
GenericUrl tokenUrl = new GenericUrl(getMetadataServerUrl(provider));
// pingComputeEngineMetadata is executed heavily during startup (within isOnGce()) on non-GCE
// environments. We use a strict 500ms timeout and manual 3-try loop (instead of
// ExponentialBackOff and HttpRequest.setUnsuccessfulResponseHandler) to fail fast and avoid
// significantly delaying application startup for workflows running on local setups.
for (int i = 1; i <= MAX_COMPUTE_PING_TRIES; ++i) {
try {
HttpRequest request =
Expand All @@ -673,6 +677,12 @@ private static boolean pingComputeEngineMetadata(
} catch (SocketTimeoutException expected) {
// Ignore logging timeouts which is the expected failure mode in non GCE environments.
} catch (IOException e) {
if (e instanceof HttpResponseException) {
int statusCode = ((HttpResponseException) e).getStatusCode();
if (statusCode >= 400 && statusCode < 500) {
return false;
}
Comment thread
macastelaz marked this conversation as resolved.
}
LOGGER.log(
Level.FINE,
"Encountered an unexpected exception when checking"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,13 @@
import com.google.auth.TestUtils;
import com.google.auth.http.HttpTransportFactory;
import com.google.auth.oauth2.DefaultCredentialsProviderTest.MockRequestCountingTransportFactory;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Collection;
Expand Down Expand Up @@ -1177,6 +1182,60 @@ void getProjectId_explicitSet_noMDsCall() {
assertEquals(0, transportFactory.transport.getRequestCount());
}

@Test
void isOnGce_clientError_doesNotRetry_returnsFalseOnUnknownOs() {
MockMetadataServerTransportFactory transportFactory = new MockMetadataServerTransportFactory();
transportFactory.transport.setStatusCode(HttpStatusCodes.STATUS_CODE_NOT_FOUND);
DefaultCredentialsProvider provider =
new DefaultCredentialsProvider() {
@Override
String getEnv(String name) {
if (DefaultCredentialsProvider.NO_GCE_CHECK_ENV_VAR.equals(name)) {
return "false";
}
return super.getEnv(name);
}

@Override
String getOsName() {
return "Unknown";
}
};
boolean isOnGce = ComputeEngineCredentials.isOnGce(transportFactory, provider);
assertFalse(isOnGce);
assertEquals(1, transportFactory.transport.getRequestCount());
}

@Test
void isOnGce_clientError_doesNotRetry_returnsTrueOnLinuxGce() {
MockMetadataServerTransportFactory transportFactory = new MockMetadataServerTransportFactory();
transportFactory.transport.setStatusCode(HttpStatusCodes.STATUS_CODE_FORBIDDEN);
DefaultCredentialsProvider provider =
new DefaultCredentialsProvider() {
@Override
String getEnv(String name) {
if (DefaultCredentialsProvider.NO_GCE_CHECK_ENV_VAR.equals(name)) {
return "false";
}
return super.getEnv(name);
}

@Override
String getOsName() {
return "linux";
}

@Override
InputStream readStream(File file) throws FileNotFoundException {
return new ByteArrayInputStream(
"Google Compute Engine".getBytes(StandardCharsets.UTF_8));
}
};
boolean isOnGce = ComputeEngineCredentials.isOnGce(transportFactory, provider);
assertTrue(isOnGce);
assertEquals(1, transportFactory.transport.getRequestCount());
}

static class MockMetadataServerTransportFactory implements HttpTransportFactory {

MockMetadataServerTransport transport =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ public class MockMetadataServerTransport extends MockHttpTransport {

private boolean emptyContent;
private MockLowLevelHttpRequest request;
private int requestCount = 0;

public int getRequestCount() {
return requestCount;
}

public MockMetadataServerTransport() {}

Expand Down Expand Up @@ -125,6 +130,7 @@ public MockLowLevelHttpRequest getRequest() {

@Override
public LowLevelHttpRequest buildRequest(String method, String url) throws IOException {
requestCount++;
if (url.startsWith(ComputeEngineCredentials.getTokenServerEncodedUrl())) {
this.request = getMockRequestForTokenEndpoint(url);
return this.request;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,13 @@ private AnalyticsMetadata() {
}

public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
return com.google.backstory.Udm.internal_static_google_backstory_AnalyticsMetadata_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_AnalyticsMetadata_descriptor;
}

@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.backstory.Udm
return com.google.backstory.UdmProto
.internal_static_google_backstory_AnalyticsMetadata_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.backstory.AnalyticsMetadata.class,
Expand Down Expand Up @@ -295,13 +295,13 @@ public static final class Builder extends com.google.protobuf.GeneratedMessage.B
// @@protoc_insertion_point(builder_implements:google.backstory.AnalyticsMetadata)
com.google.backstory.AnalyticsMetadataOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
return com.google.backstory.Udm.internal_static_google_backstory_AnalyticsMetadata_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_AnalyticsMetadata_descriptor;
}

@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.backstory.Udm
return com.google.backstory.UdmProto
.internal_static_google_backstory_AnalyticsMetadata_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.backstory.AnalyticsMetadata.class,
Expand All @@ -325,7 +325,7 @@ public Builder clear() {

@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
return com.google.backstory.Udm.internal_static_google_backstory_AnalyticsMetadata_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_AnalyticsMetadata_descriptor;
}

@java.lang.Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,13 @@ private AppCompatMetadata() {
}

public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
return com.google.backstory.Udm.internal_static_google_backstory_AppCompatMetadata_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_AppCompatMetadata_descriptor;
}

@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.backstory.Udm
return com.google.backstory.UdmProto
.internal_static_google_backstory_AppCompatMetadata_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.backstory.AppCompatMetadata.class,
Expand Down Expand Up @@ -354,13 +354,13 @@ public static final class Builder extends com.google.protobuf.GeneratedMessage.B
// @@protoc_insertion_point(builder_implements:google.backstory.AppCompatMetadata)
com.google.backstory.AppCompatMetadataOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
return com.google.backstory.Udm.internal_static_google_backstory_AppCompatMetadata_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_AppCompatMetadata_descriptor;
}

@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.backstory.Udm
return com.google.backstory.UdmProto
.internal_static_google_backstory_AppCompatMetadata_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.backstory.AppCompatMetadata.class,
Expand All @@ -386,7 +386,7 @@ public Builder clear() {

@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
return com.google.backstory.Udm.internal_static_google_backstory_AppCompatMetadata_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_AppCompatMetadata_descriptor;
}

@java.lang.Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,13 @@ private Artifact() {
}

public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
return com.google.backstory.Udm.internal_static_google_backstory_Artifact_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_Artifact_descriptor;
}

@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.backstory.Udm.internal_static_google_backstory_Artifact_fieldAccessorTable
return com.google.backstory.UdmProto.internal_static_google_backstory_Artifact_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.backstory.Artifact.class, com.google.backstory.Artifact.Builder.class);
}
Expand Down Expand Up @@ -1454,13 +1454,13 @@ public static final class Builder extends com.google.protobuf.GeneratedMessage.B
// @@protoc_insertion_point(builder_implements:google.backstory.Artifact)
com.google.backstory.ArtifactOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
return com.google.backstory.Udm.internal_static_google_backstory_Artifact_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_Artifact_descriptor;
}

@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.backstory.Udm.internal_static_google_backstory_Artifact_fieldAccessorTable
return com.google.backstory.UdmProto.internal_static_google_backstory_Artifact_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.backstory.Artifact.class, com.google.backstory.Artifact.Builder.class);
}
Expand Down Expand Up @@ -1560,7 +1560,7 @@ public Builder clear() {

@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
return com.google.backstory.Udm.internal_static_google_backstory_Artifact_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_Artifact_descriptor;
}

@java.lang.Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,13 @@ private ArtifactClient() {
}

public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
return com.google.backstory.Udm.internal_static_google_backstory_ArtifactClient_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_ArtifactClient_descriptor;
}

@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.backstory.Udm
return com.google.backstory.UdmProto
.internal_static_google_backstory_ArtifactClient_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.backstory.ArtifactClient.class,
Expand Down Expand Up @@ -401,13 +401,13 @@ public static final class Builder extends com.google.protobuf.GeneratedMessage.B
// @@protoc_insertion_point(builder_implements:google.backstory.ArtifactClient)
com.google.backstory.ArtifactClientOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
return com.google.backstory.Udm.internal_static_google_backstory_ArtifactClient_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_ArtifactClient_descriptor;
}

@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.backstory.Udm
return com.google.backstory.UdmProto
.internal_static_google_backstory_ArtifactClient_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.backstory.ArtifactClient.class,
Expand All @@ -432,7 +432,7 @@ public Builder clear() {

@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
return com.google.backstory.Udm.internal_static_google_backstory_ArtifactClient_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_ArtifactClient_descriptor;
}

@java.lang.Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,13 @@ private Asset() {
}

public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
return com.google.backstory.Udm.internal_static_google_backstory_Asset_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_Asset_descriptor;
}

@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.backstory.Udm.internal_static_google_backstory_Asset_fieldAccessorTable
return com.google.backstory.UdmProto.internal_static_google_backstory_Asset_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.backstory.Asset.class, com.google.backstory.Asset.Builder.class);
}
Expand Down Expand Up @@ -2493,13 +2493,13 @@ public static final class Builder extends com.google.protobuf.GeneratedMessage.B
// @@protoc_insertion_point(builder_implements:google.backstory.Asset)
com.google.backstory.AssetOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
return com.google.backstory.Udm.internal_static_google_backstory_Asset_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_Asset_descriptor;
}

@java.lang.Override
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.google.backstory.Udm.internal_static_google_backstory_Asset_fieldAccessorTable
return com.google.backstory.UdmProto.internal_static_google_backstory_Asset_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.google.backstory.Asset.class, com.google.backstory.Asset.Builder.class);
}
Expand Down Expand Up @@ -2630,7 +2630,7 @@ public Builder clear() {

@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
return com.google.backstory.Udm.internal_static_google_backstory_Asset_descriptor;
return com.google.backstory.UdmProto.internal_static_google_backstory_Asset_descriptor;
}

@java.lang.Override
Expand Down
Loading
Loading