googleapis / googleapis/google-cloud-java

[sdk-platform-java] RetryingFuture is not terminating the client correctly

オープン
#12,519 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る
priority: p4 type: bug
主要言語
Java
スター
2.1k
フォーク
1.2k
平均マージ
1日 23時間
マージ済み PR(30日)
154

説明

When `tracer` throw an error (https://github.com/googleapis/gax-java/blob/v2.20.1/gax/src/main/java/com/google/api/gax/retrying/BasicRetryingFuture.java#L202) because of version mismatch, the client will hang forever. The problem seems to be somewhere in `BasicRetryingFuture` and `CallbackChainRetryingFuture`.

In the following reproduce, `tracer.attemptSucceeded` will throw `NoSuchMethodError` because of the version mismatch. This exception will get caught in CallbackChainRetryingFuture#AttemptCompletionListener#run() https://github.com/googleapis/gax-java/blob/v2.20.1/gax/src/main/java/com/google/api/gax/retrying/CallbackChainRetryingFuture.java#L119. handle() is a noop because this attempt is already executed. Then the client goes into hang. The error is also not bubbled up which made it very difficult to debug.

#### Steps to reproduce

Dependency:

```



com.google.cloud
libraries-bom
26.1.1
pom
import


com.google.api
gax
2.19.6-SNAPSHOT




com.google.cloud
google-cloud-bigtable
2.15.0


```

Main:

Note: we need to create a bigtable instance and bigtable table with column family "cf1".

```
public static void main(String[] args) throws IOException, InterruptedException, ExecutionException {

BigtableDataSettings.Builder settings = BigtableDataSettings.newBuilder()
.setProjectId()
.setInstanceId();

try (BigtableDataClient client = BigtableDataClient.create(settings.build())) {
BulkMutation mutation = BulkMutation.create().add(RowMutationEntry.create("row-key-1").setCell("cf1", "q", "v2"));
client.mutateRowAsync(RowMutation.create("test", "row-key-1").deleteRow()).addListener(
new Runnable() {
@Override
public void run() {
System.out.println("Listener is called");
}
}, MoreExecutors.directExecutor()
);

Thread.sleep(60000);
}
}
```

Making sure to follow these steps will guarantee the quickest resolution possible.

Thanks!

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。