Skip to content

Commit f860ebd

Browse files
Merge branch 'main' into jdbc/fix-time-precision
2 parents 461ef3f + d339c41 commit f860ebd

2 files changed

Lines changed: 35 additions & 1 deletion

File tree

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ public class BigQueryStatement extends BigQueryNoOpsStatement {
104104

105105
private final BigQueryJdbcCustomLogger LOG = new BigQueryJdbcCustomLogger(this.toString());
106106
public static final int DEFAULT_BUFFER_SIZE = BigQuerySettings.DEFAULT_NUM_BUFFERED_ROWS * 2;
107+
static final int DEFAULT_ARROW_BUFFER_SIZE = 32;
107108
private static final String DEFAULT_DATASET_NAME = "_google_jdbc";
108109
private static final String DEFAULT_TABLE_NAME = "temp_table_";
109110
private static final String JDBC_JOB_PREFIX = "google-jdbc-";
@@ -931,7 +932,7 @@ ResultSet processArrowResultSet(TableResult results, Job job) throws SQLExceptio
931932
.setMaxStreamCount(1);
932933

933934
ReadSession readSession = getReadSession(builder.build());
934-
this.arrowBatchWrapperBlockingQueue = new LinkedBlockingDeque<>(getBufferSize());
935+
this.arrowBatchWrapperBlockingQueue = new LinkedBlockingDeque<>(getArrowBufferSize());
935936
// deserialize and populate the buffer async, so that the client isn't blocked
936937
populateBufferWorker =
937938
populateArrowBufferedQueue(
@@ -1512,6 +1513,10 @@ private int getBufferSize() {
15121513
: Math.min(this.querySettings.getNumBufferedRows() * 2, 100000));
15131514
}
15141515

1516+
int getArrowBufferSize() {
1517+
return DEFAULT_ARROW_BUFFER_SIZE;
1518+
}
1519+
15151520
/** Returns the destinationTable from jobId by calling `jobs.get` API */
15161521
TableId getDestinationTable(JobId jobId) {
15171522
Job job = this.bigQuery.getJob(jobId);

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,4 +1318,33 @@ public void testJoblessQueryPopulatesQueryStatistics() throws Exception {
13181318

13191319
verify(bigquery, Mockito.never()).getJob(any(JobId.class));
13201320
}
1321+
1322+
@Test
1323+
public void testProcessArrowResultSetUsesBoundedQueueCapacity() throws SQLException {
1324+
BigQueryStatement defaultStmtSpy = Mockito.spy(bigQueryStatement);
1325+
BigQueryReadClient bigQueryReadClient = mock(BigQueryReadClient.class);
1326+
Schema schema = Schema.of(fieldList);
1327+
ReadSession readSession = ReadSession.getDefaultInstance();
1328+
doReturn(bigQueryReadClient).when(defaultStmtSpy).getBigQueryReadClient();
1329+
doReturn(readSession).when(defaultStmtSpy).getReadSession(any(CreateReadSessionRequest.class));
1330+
Future<?> mockWorker = mock(Future.class);
1331+
@SuppressWarnings("unchecked")
1332+
ArgumentCaptor<BlockingQueue<BigQueryArrowBatchWrapper>> defaultQueueCaptor =
1333+
ArgumentCaptor.forClass(BlockingQueue.class);
1334+
doReturn(mockWorker)
1335+
.when(defaultStmtSpy)
1336+
.populateArrowBufferedQueue(
1337+
any(ReadSession.class), defaultQueueCaptor.capture(), any(BigQueryReadClient.class));
1338+
doReturn(arrowSchema).when(defaultStmtSpy).getArrowSchema(any(ReadSession.class));
1339+
1340+
TableResult result = mock(TableResult.class);
1341+
doReturn(schema).when(result).getSchema();
1342+
doReturn(10L).when(result).getTotalRows();
1343+
doReturn(TABLE_ID).when(defaultStmtSpy).getDestinationTable(any());
1344+
1345+
defaultStmtSpy.processArrowResultSet(result, null);
1346+
assertEquals(
1347+
BigQueryStatement.DEFAULT_ARROW_BUFFER_SIZE,
1348+
defaultQueueCaptor.getValue().remainingCapacity());
1349+
}
13211350
}

0 commit comments

Comments
 (0)