Skip to content

Commit d539467

Browse files
committed
Merge pull request #180 from tseaver/129-rollback_using_connection_xact
Fix #129: use transaction ID from connection's own transaction.
2 parents f5ec306 + d576000 commit d539467

File tree

4 files changed

+15
-23
lines changed

4 files changed

+15
-23
lines changed

gcloud/datastore/connection.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -165,23 +165,20 @@ def begin_transaction(self, dataset_id, serializable=False):
165165

166166
return response.transaction
167167

168-
def rollback_transaction(self, dataset_id, transaction_id):
169-
"""Rollback an existing transaction.
168+
def rollback_transaction(self, dataset_id):
169+
"""Rollback the connection's existing transaction.
170170
171171
Raises a ``ValueError``
172172
if the connection isn't currently in a transaction.
173173
174174
:type dataset_id: string
175175
:param dataset_id: The dataset to which the transaction belongs.
176-
177-
:type transaction_id: string
178-
:param transaction_id: The ID of the transaction to roll back.
179176
"""
180177
if not self.transaction() or not self.transaction().id():
181178
raise ValueError('No transaction to rollback.')
182179

183180
request = datastore_pb.RollbackRequest()
184-
request.transaction = transaction_id
181+
request.transaction = self.transaction().id()
185182
# Nothing to do with this response, so just execute the method.
186183
self._rpc(dataset_id, 'rollback', request,
187184
datastore_pb.RollbackResponse)

gcloud/datastore/test_connection.py

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -244,31 +244,27 @@ def test_begin_transaction_explicit_serialize(self):
244244

245245
def test_rollback_transaction_wo_existing_transaction(self):
246246
DATASET_ID = 'DATASET'
247-
TRANSACTION_ID = 'TRANSACTION'
248247
conn = self._makeOne()
249248
self.assertRaises(ValueError,
250-
conn.rollback_transaction, DATASET_ID, TRANSACTION_ID)
249+
conn.rollback_transaction, DATASET_ID)
251250

252251
def test_rollback_transaction_w_existing_transaction_no_id(self):
253252
class Xact(object):
254253
def id(self):
255254
return None
256255
DATASET_ID = 'DATASET'
257-
TRANSACTION_ID = 'TRANSACTION'
258256
conn = self._makeOne()
259257
conn.transaction(Xact())
260258
self.assertRaises(ValueError,
261-
conn.rollback_transaction, DATASET_ID, TRANSACTION_ID)
259+
conn.rollback_transaction, DATASET_ID)
262260

263261
def test_rollback_transaction_ok(self):
264262
from gcloud.datastore.connection import datastore_pb
263+
DATASET_ID = 'DATASET'
264+
TRANSACTION = 'xact'
265265
class Xact(object):
266266
def id(self):
267-
return 'xact'
268-
xact = object()
269-
270-
DATASET_ID = 'DATASET'
271-
TRANSACTION = 'TRANSACTION'
267+
return TRANSACTION
272268
rsp_pb = datastore_pb.RollbackResponse()
273269
conn = self._makeOne()
274270
conn.transaction(Xact())
@@ -280,14 +276,13 @@ def id(self):
280276
'rollback',
281277
])
282278
http = conn._http = Http({'status': '200'}, rsp_pb.SerializeToString())
283-
self.assertEqual(conn.rollback_transaction(DATASET_ID, TRANSACTION),
284-
None)
279+
self.assertEqual(conn.rollback_transaction(DATASET_ID), None)
285280
cw = http._called_with
286281
self.assertEqual(cw['uri'], URI)
287282
self.assertEqual(cw['method'], 'POST')
288283
self.assertEqual(cw['headers'],
289284
{'Content-Type': 'application/x-protobuf',
290-
'Content-Length': '13',
285+
'Content-Length': '6',
291286
})
292287
rq_class = datastore_pb.RollbackRequest
293288
request = rq_class()

gcloud/datastore/test_transaction.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def test_rollback(self):
4949
xact.begin()
5050
xact.rollback()
5151
self.assertEqual(xact.id(), None)
52-
self.assertEqual(connection._rolled_back, (_DATASET, 234))
52+
self.assertEqual(connection._rolled_back, _DATASET)
5353
self.assertEqual(connection._xact, None)
5454

5555
def test_commit_no_auto_ids(self):
@@ -127,7 +127,7 @@ class Foo(Exception):
127127
except Foo:
128128
pass # XXX
129129
#self.assertEqual(xact.id(), None)
130-
#self.assertEqual(connection._rolled_back, (_DATASET, 234))
130+
#self.assertEqual(connection._rolled_back, _DATASET))
131131
#self.assertEqual(connection._xact, None)
132132
# XXX should *not* have committed
133133
self.assertEqual(connection._committed, (_DATASET, mutation))
@@ -167,8 +167,8 @@ def transaction(self, xact=_marker):
167167
def begin_transaction(self, dataset_id):
168168
self._begun = dataset_id
169169
return self._xact_id
170-
def rollback_transaction(self, dataset_id, xact_id):
171-
self._rolled_back = (dataset_id, xact_id)
170+
def rollback_transaction(self, dataset_id):
171+
self._rolled_back = dataset_id
172172
def commit(self, dataset_id, mutation):
173173
self._committed = (dataset_id, mutation)
174174
return self._commit_result

gcloud/datastore/transaction.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def rollback(self):
210210
- Sets the current connection's transaction reference to None.
211211
- Sets the current transaction's ID to None.
212212
"""
213-
self.connection().rollback_transaction(self.dataset().id(), self.id())
213+
self.connection().rollback_transaction(self.dataset().id())
214214
self.connection().transaction(None)
215215
self._id = None
216216

0 commit comments

Comments
 (0)