googleapis / googleapis/google-cloud-java
[sdk-platform-java] com.google.api.gax.httpjson.ManagedHttpJsonInterceptorChannel does not close the channels correctly
- Langage dominant
- Java
- Étoiles
- 2.1k
- Forks
- 1.2k
- Merge moyen
- 1 j 23 h
- PR mergées (30 j)
- 154
Description
#### Environment details
1. Specify the artifact at the beginning of the title. For example, "api-common", "gax" etc)
2. OS type and version: Linux Debian 6.1.158-1 (2025-11-09) x86_64 GNU/Linux
3. Java version: openjdk version "11.0.20.1" 2023-08-24
4. artifact version(s): 2.63.1
#### Steps to reproduce
1. Created a GCP API stub which uses "defaultHttpJsonTransportProviderBuilder" and creates an "InstantiatingHttpJsonChannelProvider"
2. On the client close, the close is successfully but the executor service is not being deleted.
#### Code example
```java
ManagedHttpJsonInterceptorChannel(
ManagedHttpJsonChannel channel, HttpJsonClientInterceptor interceptor) {
super();
this.channel = channel;
this.interceptor = interceptor;
}
@Override
public synchronized void shutdown() {
channel.shutdown();
}
```
super() calls ManagedHttpJsonChannel which creates a fixed executor service that never gets deleted.
```
protected ManagedHttpJsonChannel() {
this(null, true, null, null);
}
private ManagedHttpJsonChannel(
Executor executor,
boolean usingDefaultExecutor,
String endpoint,
@Nullable HttpTransport httpTransport) {
this.executor = executor;
this.usingDefaultExecutor = usingDefaultExecutor;
this.endpoint = endpoint;
this.httpTransport = httpTransport == null ? new NetHttpTransport() : httpTransport;
this.deadlineScheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
}
```
Ideally we should call:
```
@Override
public synchronized void shutdown() {
super.shutdown();
channel.shutdown();
}
```
Same applies to shutdownNow(), close()
Guide de contribution
Ouvrir le guide de contribution
Évaluation
Cette issue n'a pas encore été évaluée.