diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ConnectionImpl.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ConnectionImpl.java index c3465c33a..d66903ce5 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ConnectionImpl.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ConnectionImpl.java @@ -1069,7 +1069,17 @@ private void processArrowStreamAsync( } } catch (Exception e) { - throw BigQueryException.translateAndThrow(e); + if (e instanceof InterruptedException + || e.getCause() instanceof InterruptedException + || e instanceof com.google.api.gax.rpc.CancelledException) { + // Log silently and let it fall through to 'finally' for cleanup. + // This is the "graceful shutdown". + logger.log( + Level.INFO, "Background thread interrupted (Connection Closed). Stopping."); + Thread.currentThread().interrupt(); + } else { + throw BigQueryException.translateAndThrow(e); + } } finally { // logic needed for graceful shutdown // marking end of stream try {