Skip to content

Commit 21e6dc8

Browse files
authored
fix(bigquery-jdbc): fix htapi fallback due to permission logic (#14418)
1 parent b44ffe8 commit 21e6dc8

7 files changed

Lines changed: 39 additions & 14 deletions

File tree

‎java-bigquery-jdbc/.cloudbuild/jdbc_nightly.yaml‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@ steps:
2525
timeout: 10000s
2626
entrypoint: 'bash'
2727
args: ['java-bigquery-jdbc/.cloudbuild/scripts/jdbc-nightly.sh']
28-
secretEnv: ['SA_EMAIL', 'KMS_RESOURCE_PATH', 'SA_SECRET']
28+
secretEnv: ['SA_EMAIL', 'SA_EMAIL_NO_READAPI', 'KMS_RESOURCE_PATH', 'SA_SECRET']
2929

3030
availableSecrets:
3131
secretManager:
3232
- versionName: projects/$PROJECT_ID/secrets/jdbc-presubmit-sa-email/versions/latest
3333
env: 'SA_EMAIL'
34+
- versionName: projects/$PROJECT_ID/secrets/jdbc-presubmit-sa-email-no-readapi/versions/latest
35+
env: 'SA_EMAIL_NO_READAPI'
3436
- versionName: projects/$PROJECT_ID/secrets/kms_resource_path/versions/latest
3537
env: 'KMS_RESOURCE_PATH'
3638
- versionName: projects/$PROJECT_ID/secrets/GoogleJDBCServiceAccountSecret/versions/latest

‎java-bigquery-jdbc/.cloudbuild/jdbc_presubmit.yaml‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@ steps:
2828
timeout: 2000s
2929
entrypoint: 'bash'
3030
args: ['java-bigquery-jdbc/.cloudbuild/scripts/jdbc-presubmit.sh']
31-
secretEnv: ['SA_EMAIL', 'KMS_RESOURCE_PATH', 'SA_SECRET']
31+
secretEnv: ['SA_EMAIL', 'SA_EMAIL_NO_READAPI', 'KMS_RESOURCE_PATH', 'SA_SECRET']
3232
availableSecrets:
3333
secretManager:
3434
- versionName: projects/$PROJECT_ID/secrets/jdbc-presubmit-sa-email/versions/latest
3535
env: 'SA_EMAIL'
36+
- versionName: projects/$PROJECT_ID/secrets/jdbc-presubmit-sa-email-no-readapi/versions/latest
37+
env: 'SA_EMAIL_NO_READAPI'
3638
- versionName: projects/$PROJECT_ID/secrets/kms_resource_path/versions/latest
3739
env: 'KMS_RESOURCE_PATH'
3840
- versionName: projects/$PROJECT_ID/secrets/GoogleJDBCServiceAccountSecret/versions/latest

‎java-bigquery-jdbc/Makefile‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ run-it-standalone:
9393
-e "GOOGLE_APPLICATION_CREDENTIALS=/auth/application_creds.json" \
9494
-v $(SRC):/src \
9595
-e "SA_EMAIL=$(SA_EMAIL)" \
96+
-e "SA_EMAIL_NO_READAPI=$(SA_EMAIL_NO_READAPI)" \
9697
-e "KMS_RESOURCE_PATH=$(KMS_RESOURCE_PATH)" \
9798
-e "SA_SECRET=/auth/application_creds.json" \
9899
-e "SA_SECRET_P12=/auth/application_creds.p12" \

‎java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java‎

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -929,16 +929,6 @@ ResultSet processArrowResultSet(TableResult results, Job job) throws SQLExceptio
929929
"Failed to execute query: Unable to allocate background threads to process the query results. Connection-scoped thread pool limit of 100 threads was reached or system is out of memory.",
930930
ex);
931931
}
932-
if (ex instanceof RuntimeException) {
933-
throw (ex instanceof BigQueryJdbcRuntimeException)
934-
? (BigQueryJdbcRuntimeException) ex
935-
: new BigQueryJdbcRuntimeException(ex);
936-
}
937-
if (ex instanceof SQLException) {
938-
throw (ex instanceof BigQueryJdbcException)
939-
? (BigQueryJdbcException) ex
940-
: new BigQueryJdbcException(ex);
941-
}
942932
throw new BigQueryJdbcException(ex.getMessage(), ex);
943933
}
944934
}

‎java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ public static String getBaseConnectionUrl() {
284284
public static final BigQuery bigQuery = BigQueryJdbcBaseTest.getBigQuery(connectionUrl);
285285

286286
public static final String FORCE_READ_API_PROPERTIES =
287-
"EnableHighThroughputAPI=1;HighThroughputActivationRatio=0;HighThroughputMinTableSize=0;MaxResults=1;";
287+
";EnableHighThroughputAPI=1;HighThroughputActivationRatio=0;HighThroughputMinTableSize=0;";
288288

289289
public static final String createDatasetQuery =
290290
"CREATE SCHEMA IF NOT EXISTS `%s.%s` OPTIONS(default_table_expiration_days = 5)";
@@ -460,10 +460,16 @@ public static List<String> getInfoBySQL(Connection connection, String sqlCmd)
460460
}
461461

462462
public static void validateStatement(Statement stmt, int expectedRows) throws SQLException {
463+
validateStatement(stmt, expectedRows, "ResultSet");
464+
}
465+
466+
public static <T> void validateStatement(Statement stmt, int expectedRows, String clazz)
467+
throws SQLException {
463468
String query = "SELECT * FROM UNNEST(GENERATE_ARRAY(1, " + expectedRows + "))";
464469
assertTrue(stmt.execute(query));
465470
int count = 0;
466471
try (ResultSet rs = stmt.getResultSet()) {
472+
assertTrue(rs.getClass().getName().contains(clazz));
467473
while (rs.next()) {
468474
count++;
469475
}

‎java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITJdbcTimestampPicosTest.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,9 @@ private static String getPicosConnectionUrl(boolean picosEnabled, boolean arrowE
154154
+ "EnableTimestampPicos="
155155
+ (picosEnabled ? "1" : "0")
156156
+ ";"
157-
+ (arrowEnabled ? ITBase.FORCE_READ_API_PROPERTIES : "EnableHighThroughputAPI=0;");
157+
+ (arrowEnabled
158+
? ITBase.FORCE_READ_API_PROPERTIES + "MaxResults=1;"
159+
: "EnableHighThroughputAPI=0;");
158160
}
159161

160162
@Test

‎java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.google.cloud.bigquery.Table;
3535
import com.google.cloud.bigquery.TableResult;
3636
import com.google.cloud.bigquery.jdbc.BigQueryConnection;
37+
import java.io.IOException;
3738
import java.sql.Connection;
3839
import java.sql.DriverManager;
3940
import java.sql.ResultSet;
@@ -490,4 +491,25 @@ public void testNonIdempotentCreateTableAndDrop() throws SQLException {
490491
}
491492
}
492493
}
494+
495+
@Test
496+
@Tag("advanced")
497+
public void testHighThroughputApiFallbackNoReadApi() throws IOException, SQLException {
498+
String saNoReadApi = requireEnvVar("SA_EMAIL_NO_READAPI");
499+
500+
String connectionUri =
501+
ITBase.connectionUrl
502+
+ ";ServiceAccountImpersonationEmail="
503+
+ saNoReadApi
504+
+ ";MaxResults=10;"
505+
+ ITBase.FORCE_READ_API_PROPERTIES;
506+
507+
try (Connection connection = DriverManager.getConnection(connectionUri)) {
508+
assertNotNull(connection);
509+
assertFalse(connection.isClosed());
510+
511+
Statement statement = connection.createStatement();
512+
validateStatement(statement, 50, "BigQueryJsonResultSet");
513+
}
514+
}
493515
}

0 commit comments

Comments
 (0)