Skip to content

Transactions - Bug when using transaction APIs explicitly (not through the context manager) #447

@flea89

Description

@flea89

TL;DR : when using trx.begin() and trx.commit() the transactions don't behave as expected.

Please refer to this merge request to see the bug highlighted in the test.

From a quick look at the code, the problem seems to be the transaction is not added to the client._batch_stack when the APIs are called explicitly.
_push_batch an _pop_batch are called only through the context manager __enter__ and __exit__.

Because of this
client.current_batch and current_transaction

Environment details

  • OS type and version: MacOs Ventura 13.1
  • Python version: 3.8.16
  • pip version: 22.0.4
  • google-cloud-datastore version: 2.15.2

Steps to reproduce

  1. Create a transaction client.transaction()
  2. Start a transaction txn.begin()
  3. Get an object entity_in_txn = client.get(key)
  4. Update and put the same entity outside of the transaction.
  5. Update the entity and put the entity within the transaction
  6. Commit the transaction txn.commit()

The transaction should raise a Conflit but it doesn't.
(When doing the same with the context manager the Exeption is raised, see here

Code example

See here

Stack trace

# example
N/A

Metadata

Metadata

Assignees

Labels

api: datastoreIssues related to the googleapis/python-datastore API.priority: p3Desirable enhancement or fix. May not be included in next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions