从 6.38.2 迁移到 6.45 后,Spanner 重试不起作用

问题描述 投票:0回答:1

将 java-spanner lib 从版本 6.38.2 迁移到 6.45.0(gax 从 2.24 迁移到 2.32)后,我发现重试 DEADLINE_EXCEEDED 异常不起作用。

我有自定义重试配置:

SpannerStubSettings.Builder settingsBuilder = builder.getSpannerStubSettingsBuilder();
settingsBuilder.readSettings()
            .setRetryableCodes({StatusCode.Code.DEADLINE_EXCEEDED, StatusCode.Code.UNAVAILABLE})
            .setRetrySettings(
                RetrySettings.newBuilder()
                    .setInitialRetryDelay(Duration.ofMillis(10))
                    .setMaxRetryDelay(Duration.ofMillis(200))
                    .setRetryDelayMultiplier(1.5)
                    .setInitialRpcTimeout(Duration.ofMillis(100))
                    .setMaxRpcTimeout(Duration.ofMillis(1000))
                    .setRpcTimeoutMultiplier(1.5)
                    .setTotalTimeout(Duration.ofMillis(2000))
                    .build());

有了这个以及 java-spanner 库的 6.45.0 版本,许多请求在 0.0999 秒后都会以异常 DEADLINE_EXCEEDED 结束,因此在初始 RPC 超时后,不再重试。在应用重试并且请求最终成功之前。

如何解释?我已经检查了 lib 存储库(java-spanner 和 gax)中的更改,但无法匹配此特定行为的任何内容。

java google-api google-cloud-spanner
1个回答
0
投票

根据@kpater87的评论发布此内容:

似乎只有在需要创建会话时才会出现此问题。第一个具有此行为的版本是 gax 2.28.1。在不考虑 init-rpc-timeout 之前,不会重试,但会提供结果(如果达到总超时限制)。

您可以在 Google API Extensions for Node.js 上查看此链接以供参考。

© www.soinside.com 2019 - 2024. All rights reserved.