Unlike Java/JS, firestore's python transactions do not retry on invalid transaction errors

オープン
#19,063 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@pcbeingused333 がすでに取り組んでいます。

2026年11月13日 から。

  • #19066 @pcbeingused333 による — オープン

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
25/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
python
領域
databases

調査の方向性

Read the Python Firestore transaction retry behavior described in the issue and compare it with the linked Node and Java fixes. An open pull request, #19066, is already linked, so check its scope and status before considering this work. Done means invalid-transaction errors are retried consistently with the expected behavior.

索引モデルが issue の本文から書いたものです。

説明

triage me type: bug
Determine this is the right repository
  • I determined this is the correct repository in which to report this bug.
Summary of the issue

Context
We use firestore transactions with some reasonable load. For whatever reason the error rate has been elevated today that doesn't seem to match any change in our traffic or usage.

Expected Behavior:
I'd expect transaction's retry behavior to be consistent across platforms. Instead some platforms retry invalid transaction errors but python does not.

Node: https://github.com/googleapis/nodejs-firestore/pull/1347
Java: https://github.com/googleapis/java-firestore/pull/447

Actual Behavior:
Python firestore transactions seem not to retry this error message

API client name and version

google-cloud-firestore 2.34.1

Reproduction steps: code

No response

Reproduction steps: supporting files

No response

Reproduction steps: actual results
_InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
	status = StatusCode.INVALID_ARGUMENT
	details = "The referenced transaction has expired or is no longer valid."
	debug_error_string = "INVALID_ARGUMENT:The referenced transaction has expired or is no longer valid."
>
(2 additional frame(s) were not displayed)
...
  File "grpc/_interceptor.py", line 331, in _with_call
    return call.result(), call
  File "grpc/_channel.py", line 447, in result
    raise self
  File "grpc/_interceptor.py", line 314, in continuation
    response, call = self._thunk(new_method).with_call(
  File "grpc/_channel.py", line 1182, in with_call
    return _end_unary_response_blocking(state, call, True, None)
  File "grpc/_channel.py", line 999, in _end_unary_response_blocking
    raise _InactiveRpcError(state)  # pytype: disable=not-instantiable

InvalidArgument: The referenced transaction has expired or is no longer valid.
Reproduction steps: expected results

file: output.txtmydata.csv

Calculated: bar
OS & version + platform

Various

Python environment

Python 3.12.14

Python dependencies

No response

Additional context

No response

主要言語
Python
スター
5.4k
フォーク
1.8k
平均マージ
2日 7時間
マージ済み PR(30日)
173

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

googleapis/google-cloud-python のほかの issue

googleapis/google-cloud-python の issue をすべて見る

似ている issue

Python の issue をもっと見る

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

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