Skip to content

Commit 4a528a5

Browse files
committed
fix(bigquery): close GAPIC storage transport correctly to release sockets
1 parent 042e991 commit 4a528a5

5 files changed

Lines changed: 13 additions & 13 deletions

File tree

packages/google-cloud-bigquery/google/cloud/bigquery/dbapi/connection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def close(self):
8484

8585
if self._owns_bqstorage_client:
8686
# There is no close() on the BQ Storage client itself.
87-
self._bqstorage_client._transport.grpc_channel.close()
87+
self._bqstorage_client._transport.close()
8888

8989
for cursor_ in self._cursors_created:
9090
if not cursor_._closed:

packages/google-cloud-bigquery/google/cloud/bigquery/magics/magics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,4 +773,4 @@ def _close_transports(client, bqstorage_client):
773773
"""
774774
client.close()
775775
if bqstorage_client is not None:
776-
bqstorage_client._transport.grpc_channel.close()
776+
bqstorage_client._transport.close()

packages/google-cloud-bigquery/google/cloud/bigquery/table.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2353,7 +2353,7 @@ def to_arrow(
23532353
progress_bar.close()
23542354
finally:
23552355
if owns_bqstorage_client:
2356-
bqstorage_client._transport.grpc_channel.close() # type: ignore
2356+
bqstorage_client._transport.close()
23572357

23582358
if record_batches and bqstorage_client is not None:
23592359
return pyarrow.Table.from_batches(record_batches)

packages/google-cloud-bigquery/tests/unit/test_dbapi_connection.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def _mock_bqstorage_client(self):
4040
from google.cloud import bigquery_storage
4141

4242
mock_client = mock.create_autospec(bigquery_storage.BigQueryReadClient)
43-
mock_client._transport = mock.Mock(spec=["channel"])
43+
mock_client._transport = mock.Mock(spec=["channel", "close"])
4444
mock_client._transport.grpc_channel = mock.Mock(spec=["close"])
4545
return mock_client
4646

@@ -176,7 +176,7 @@ def test_close_closes_all_created_bigquery_clients(self):
176176
connection.close()
177177

178178
self.assertTrue(client.close.called)
179-
self.assertTrue(bqstorage_client._transport.grpc_channel.close.called)
179+
self.assertTrue(bqstorage_client._transport.close.called)
180180

181181
def test_close_does_not_close_bigquery_clients_passed_to_it(self):
182182
pytest.importorskip("google.cloud.bigquery_storage")
@@ -187,7 +187,7 @@ def test_close_does_not_close_bigquery_clients_passed_to_it(self):
187187
connection.close()
188188

189189
self.assertFalse(client.close.called)
190-
self.assertFalse(bqstorage_client._transport.grpc_channel.close.called)
190+
self.assertFalse(bqstorage_client._transport.close.called)
191191

192192
def test_close_closes_all_created_cursors(self):
193193
connection = self._make_one(client=self._mock_client())

packages/google-cloud-bigquery/tests/unit/test_table.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3048,7 +3048,7 @@ def test_to_arrow_iterable_w_bqstorage(self):
30483048
self.assertEqual(record_batch, expected_record_batch)
30493049

30503050
# Don't close the client if it was passed in.
3051-
bqstorage_client._transport.grpc_channel.close.assert_not_called()
3051+
bqstorage_client._transport.close.assert_not_called()
30523052

30533053
def test_to_arrow(self):
30543054
pytest.importorskip("numpy")
@@ -3424,7 +3424,7 @@ def test_to_arrow_w_bqstorage(self):
34243424
self.assertEqual(actual_tbl.num_rows, total_rows)
34253425

34263426
# Don't close the client if it was passed in.
3427-
bqstorage_client._transport.grpc_channel.close.assert_not_called()
3427+
bqstorage_client._transport.close.assert_not_called()
34283428

34293429
def test_to_arrow_w_bqstorage_creates_client(self):
34303430
pytest.importorskip("numpy")
@@ -3458,7 +3458,7 @@ def test_to_arrow_w_bqstorage_creates_client(self):
34583458
)
34593459
row_iterator.to_arrow(create_bqstorage_client=True)
34603460
mock_client._ensure_bqstorage_client.assert_called_once()
3461-
bqstorage_client._transport.grpc_channel.close.assert_called_once()
3461+
bqstorage_client._transport.close.assert_called_once()
34623462

34633463
def test_to_arrow_ensure_bqstorage_client_wo_bqstorage(self):
34643464
pytest.importorskip("numpy")
@@ -3741,7 +3741,7 @@ def test_to_dataframe_iterable_w_bqstorage(self):
37413741
self.assertEqual(len(got), total_pages)
37423742

37433743
# Don't close the client if it was passed in.
3744-
bqstorage_client._transport.grpc_channel.close.assert_not_called()
3744+
bqstorage_client._transport.close.assert_not_called()
37453745

37463746
def test_to_dataframe_iterable_w_bqstorage_max_results_warning(self):
37473747
pytest.importorskip("numpy")
@@ -4807,7 +4807,7 @@ def test_to_dataframe_w_bqstorage_creates_client(self):
48074807
)
48084808
row_iterator.to_dataframe(create_bqstorage_client=True)
48094809
mock_client._ensure_bqstorage_client.assert_called_once()
4810-
bqstorage_client._transport.grpc_channel.close.assert_called_once()
4810+
bqstorage_client._transport.close.assert_called_once()
48114811

48124812
def test_to_dataframe_w_bqstorage_no_streams(self):
48134813
pytest.importorskip("numpy")
@@ -4999,7 +4999,7 @@ def test_to_dataframe_w_bqstorage_nonempty(self):
49994999
self.assertEqual(len(got.index), total_rows)
50005000

50015001
# Don't close the client if it was passed in.
5002-
bqstorage_client._transport.grpc_channel.close.assert_not_called()
5002+
bqstorage_client._transport.close.assert_not_called()
50035003

50045004
def test_to_dataframe_w_bqstorage_multiple_streams_return_unique_index(self):
50055005
pytest.importorskip("numpy")
@@ -5421,7 +5421,7 @@ def test_to_dataframe_concat_categorical_dtype_w_pyarrow(self):
54215421
)
54225422

54235423
# Don't close the client if it was passed in.
5424-
bqstorage_client._transport.grpc_channel.close.assert_not_called()
5424+
bqstorage_client._transport.close.assert_not_called()
54255425

54265426
def test_to_dataframe_geography_as_object(self):
54275427
pandas = pytest.importorskip("pandas")

0 commit comments

Comments
 (0)