googleapis / googleapis/ruby-spanner
tx.read() operation shouldn't increment seqno field
- Langage dominant
- Ruby
- Étoiles
- 6
- Forks
- 24
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
### Background:
Cloud Spanner uses the [`seqno`](https://github.com/googleapis/googleapis/blob/dd546bf83f7aa6dd24e17d3e83d9a397a6dd680c/google/spanner/v1/spanner.proto#L629-L639) field in DML statements of transactions to identify duplicate or out-of-order requests. This field is ignored for other queries. The value must always be monotonically increasing for every DML operation.
### Problem:
The [`Transaction#read()`](https://github.com/googleapis/ruby-spanner/blob/c6cde4010632724449bc4a653221f94a9c262669/google-cloud-spanner/lib/google/cloud/spanner/transaction.rb#L711) method isn't a DML operation, and doesn't use the `seqno` field. Yet, when the user calls it, the `@seqno` value is auto-incremented. This is because the read query is executed inside the context of [`safe_execute()`](https://github.com/googleapis/ruby-spanner/blob/c6cde4010632724449bc4a653221f94a9c262669/google-cloud-spanner/lib/google/cloud/spanner/transaction.rb#L1169-L1185) block.
While this won't cause any failure, we should avoid incrementing `seqno` for non-DML operations. This might lead to confusing debugging situations in the future, when the value is noticed to jump from `n` to `n + 2` directly (for any n >= 1). This can happen if there are DML operations interleaved with a `.read()` operation.
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez dans google-cloud-spanner/lib/google/cloud/spanner/transaction.rb, au niveau de Transaction#read() et safe_execute(), que l’issue identifie comme les points d’entrée pertinents. Suivez l’impact des requêtes de lecture sur @seqno et vérifiez qu’une lecture le laisse inchangé, tandis que les opérations DML continuent de l’incrémenter de manière monotone.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- ruby
- Domaine
- database
- Type d'issue
- Bug
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 48/100