Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit 33bfb7f

Browse files
committed
fix: partner token overwrite of all subsequent or concurrent connections
1 parent 6bab803 commit 33bfb7f

3 files changed

Lines changed: 17 additions & 28 deletions

File tree

google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryConnection.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public class BigQueryConnection extends BigQueryNoOpsConnection {
7373
String connectionClassName = this.toString();
7474
private static final String DEFAULT_JDBC_TOKEN_VALUE = "Google-BigQuery-JDBC-Driver";
7575
private static final String DEFAULT_VERSION = "0.0.0";
76-
private static HeaderProvider HEADER_PROVIDER;
76+
private HeaderProvider headerProvider;
7777
BigQueryReadClient bigQueryReadClient = null;
7878
BigQueryWriteClient bigQueryWriteClient = null;
7979
BigQuery bigQuery;
@@ -136,6 +136,7 @@ public class BigQueryConnection extends BigQueryNoOpsConnection {
136136
String requestReason;
137137
Long connectionPoolSize;
138138
Long listenerPoolSize;
139+
String partnerToken;
139140

140141
BigQueryConnection(String url) throws IOException {
141142
this.connectionUrl = url;
@@ -236,8 +237,9 @@ public class BigQueryConnection extends BigQueryNoOpsConnection {
236237
this.requestReason = ds.getRequestReason();
237238
this.connectionPoolSize = ds.getConnectionPoolSize();
238239
this.listenerPoolSize = ds.getListenerPoolSize();
240+
this.partnerToken = ds.getPartnerToken();
239241

240-
HEADER_PROVIDER = createHeaderProvider();
242+
this.headerProvider = createHeaderProvider();
241243
this.bigQuery = getBigQueryConnection();
242244
}
243245

@@ -259,19 +261,11 @@ String getLibraryVersion(Class<?> libraryClass) {
259261
return version != null ? version : DEFAULT_VERSION;
260262
}
261263

262-
private String buildPartnerToken(String url) {
263-
String partnerTokenString =
264-
BigQueryJdbcUrlUtility.parsePartnerTokenProperty(url, this.connectionClassName);
265-
if (partnerTokenString == null || partnerTokenString.isEmpty()) {
266-
return "";
267-
}
268-
return partnerTokenString;
269-
}
270-
271264
HeaderProvider createHeaderProvider() {
272-
String partnerToken = buildPartnerToken(this.connectionUrl);
273-
String headerToken =
274-
DEFAULT_JDBC_TOKEN_VALUE + "/" + getLibraryVersion(this.getClass()) + partnerToken;
265+
String headerToken = DEFAULT_JDBC_TOKEN_VALUE + "/" + getLibraryVersion(this.getClass());
266+
if (this.partnerToken != null && !this.partnerToken.isEmpty()) {
267+
headerToken += this.partnerToken;
268+
}
275269
Map<String, String> headers = new java.util.HashMap<>();
276270
headers.put("user-agent", headerToken);
277271
if (this.requestReason != null) {
@@ -937,14 +931,14 @@ private BigQuery getBigQueryConnection() {
937931
bigQueryOptions.setTransportOptions(this.httpTransportOptions);
938932
}
939933

940-
BigQueryOptions options = bigQueryOptions.setHeaderProvider(HEADER_PROVIDER).build();
934+
BigQueryOptions options = bigQueryOptions.setHeaderProvider(this.headerProvider).build();
941935
options.setQueryPreviewEnabled(String.valueOf(this.useStatelessQueryMode));
942936
return options.getService();
943937
}
944938

945939
private BigQueryReadClient getBigQueryReadClientConnection() throws IOException {
946940
BigQueryReadSettings.Builder bigQueryReadSettings =
947-
BigQueryReadSettings.newBuilder().setHeaderProvider(HEADER_PROVIDER);
941+
BigQueryReadSettings.newBuilder().setHeaderProvider(this.headerProvider);
948942
if (getRetrySettings() != null) {
949943
bigQueryReadSettings.createReadSessionSettings().setRetrySettings(getRetrySettings());
950944
}
@@ -986,7 +980,7 @@ private BigQueryReadClient getBigQueryReadClientConnection() throws IOException
986980

987981
private BigQueryWriteClient getBigQueryWriteClientConnection() throws IOException {
988982
BigQueryWriteSettings.Builder bigQueryWriteSettings =
989-
BigQueryWriteSettings.newBuilder().setHeaderProvider(HEADER_PROVIDER);
983+
BigQueryWriteSettings.newBuilder().setHeaderProvider(this.headerProvider);
990984
if (getRetrySettings() != null) {
991985
bigQueryWriteSettings.createWriteStreamSettings().setRetrySettings(getRetrySettings());
992986
}

google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcUrlUtility.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -771,10 +771,6 @@ static boolean convertIntToBoolean(String value, String propertyName) {
771771
}
772772
}
773773

774-
static String parsePartnerTokenProperty(String url, String callerClassName) {
775-
return parseUriProperty(url, PARTNER_TOKEN_PROPERTY_NAME);
776-
}
777-
778774
public static Level parseLogLevel(String logLevelString) {
779775
int logLevel = logLevelString != null ? Integer.parseInt(logLevelString) : DEFAULT_LOG_LEVEL;
780776
switch (logLevel) {

google-cloud-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcUrlUtilityTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -160,41 +160,40 @@ public void testParsePartnerTokenProperty() {
160160
"jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;"
161161
+ "PartnerToken=(GPN:partner_company; dev);ProjectId=MyBigQueryProject;";
162162
String expected = " (GPN:partner_company; dev)";
163-
String result =
164-
BigQueryJdbcUrlUtility.parsePartnerTokenProperty(url, "testParsePartnerTokenProperty");
163+
String result = BigQueryJdbcUrlUtility.parseUriProperty(url, "PartnerToken");
165164
assertThat(result).isEqualTo(expected);
166165

167166
// Case with only partner name
168167
url =
169168
"jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;"
170169
+ "PartnerToken=(GPN:another_partner);ProjectId=MyBigQueryProject;";
171170
expected = " (GPN:another_partner)";
172-
result = BigQueryJdbcUrlUtility.parsePartnerTokenProperty(url, "testParsePartnerTokenProperty");
171+
result = BigQueryJdbcUrlUtility.parseUriProperty(url, "PartnerToken");
173172
assertThat(result).isEqualTo(expected);
174173

175174
// Case when PartnerToken property is not present
176175
url =
177176
"jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;"
178177
+ "ProjectId=MyBigQueryProject;";
179-
result = BigQueryJdbcUrlUtility.parsePartnerTokenProperty(url, "testParsePartnerTokenProperty");
178+
result = BigQueryJdbcUrlUtility.parseUriProperty(url, "PartnerToken");
180179
assertNull(result);
181180

182181
// Case when PartnerToken property is present but empty
183182
url = "jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;PartnerToken=();";
184-
result = BigQueryJdbcUrlUtility.parsePartnerTokenProperty(url, "testParsePartnerTokenProperty");
183+
result = BigQueryJdbcUrlUtility.parseUriProperty(url, "PartnerToken");
185184
assertNull(result);
186185

187186
// Case when PartnerToken property is present but without partner name
188187
url = "jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;PartnerToken=(env);";
189-
result = BigQueryJdbcUrlUtility.parsePartnerTokenProperty(url, "testParsePartnerTokenProperty");
188+
result = BigQueryJdbcUrlUtility.parseUriProperty(url, "PartnerToken");
190189
assertNull(result);
191190

192191
// Case with extra spaces around the values
193192
url =
194193
"jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;"
195194
+ "PartnerToken= ( GPN: partner_name ; test_env ) ;";
196195
expected = " (GPN: partner_name ; test_env)";
197-
result = BigQueryJdbcUrlUtility.parsePartnerTokenProperty(url, "testParsePartnerTokenProperty");
196+
result = BigQueryJdbcUrlUtility.parseUriProperty(url, "PartnerToken");
198197
assertThat(result).isEqualTo(expected);
199198
}
200199

0 commit comments

Comments
 (0)