From 2bddb2c023716470cba084848b2776b891f77511 Mon Sep 17 00:00:00 2001 From: Hector Castejon Diaz Date: Thu, 19 Mar 2026 09:31:16 +0000 Subject: [PATCH] Make GCP SA token refresh non-blocking with warning on failure Port of Go SDK #1544. The GCP SA access token (X-Databricks-GCP-SA-Access-Token) refresh is now non-blocking in both GoogleIdCredentialsProvider and GoogleCredentialsCredentialsProvider. On failure, a warning is logged and the header is skipped instead of throwing an exception. The token is also now always attempted regardless of client type (not just for ACCOUNT clients). Co-authored-by: Isaac --- .../GoogleCredentialsCredentialsProvider.java | 15 +++++---------- .../sdk/core/GoogleIdCredentialsProvider.java | 14 +++++--------- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/GoogleCredentialsCredentialsProvider.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/GoogleCredentialsCredentialsProvider.java index 463d2bab9..624371b29 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/GoogleCredentialsCredentialsProvider.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/GoogleCredentialsCredentialsProvider.java @@ -66,17 +66,12 @@ public HeaderFactory configure(DatabricksConfig config) { Map headers = new HashMap<>(); headers.put("Authorization", String.format("Bearer %s", idToken.getTokenValue())); - if (config.getClientType() == ClientType.ACCOUNT) { - AccessToken token; - try { - token = finalServiceAccountCredentials.createScoped(GCP_SCOPES).refreshAccessToken(); - } catch (IOException e) { - String message = - "Failed to refresh access token from Google service account credentials."; - LOG.error(message + e); - throw new DatabricksException(message, e); - } + try { + AccessToken token = + finalServiceAccountCredentials.createScoped(GCP_SCOPES).refreshAccessToken(); headers.put(SA_ACCESS_TOKEN_HEADER, token.getTokenValue()); + } catch (IOException e) { + LOG.warn("Failed to refresh GCP SA access token, skipping header: {}", e.getMessage()); } return headers; diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/GoogleIdCredentialsProvider.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/GoogleIdCredentialsProvider.java index 376d691c5..57765541c 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/GoogleIdCredentialsProvider.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/GoogleIdCredentialsProvider.java @@ -69,15 +69,11 @@ public HeaderFactory configure(DatabricksConfig config) { throw new DatabricksException(message, e); } - if (config.getClientType() == ClientType.ACCOUNT) { - try { - headers.put( - SA_ACCESS_TOKEN_HEADER, gcpScopedCredentials.refreshAccessToken().getTokenValue()); - } catch (IOException e) { - String message = "Failed to refresh access token from scoped id token credentials."; - LOG.error(message + e); - throw new DatabricksException(message, e); - } + try { + headers.put( + SA_ACCESS_TOKEN_HEADER, gcpScopedCredentials.refreshAccessToken().getTokenValue()); + } catch (IOException e) { + LOG.warn("Failed to refresh GCP SA access token, skipping header: {}", e.getMessage()); } return headers;