Skip to content

Commit 7edd58c

Browse files
ludochgae-java-bot
authored andcommitted
Pass the transaction to Datastore callback contexts.
PiperOrigin-RevId: 879155390 Change-Id: I4f2bb698cf6a475cff0abe448c10c94ac9f57386
1 parent 9578607 commit 7edd58c

File tree

13 files changed

+145
-101
lines changed

13 files changed

+145
-101
lines changed

api/src/main/java/com/google/appengine/api/datastore/BaseAsyncDatastoreServiceImpl.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ public Future<Map<Key, Entity>> get(@Nullable Transaction txn, Iterable<Key> key
212212
// Allocate the Map that will receive the result of the RPC here so that PreGet callbacks can
213213
// add results.
214214
Map<Key, Entity> resultMap = new HashMap<Key, Entity>();
215-
PreGetContext preGetContext = new PreGetContext(this, keyList, resultMap);
215+
PreGetContext preGetContext = new PreGetContext(this, txn, keyList, resultMap);
216216
datastoreServiceConfig.getDatastoreCallbacks().executePreGetCallbacks(preGetContext);
217217

218218
// Don't fetch anything from datastore that was provided by the preGet hooks.
@@ -222,7 +222,7 @@ public Future<Map<Key, Entity>> get(@Nullable Transaction txn, Iterable<Key> key
222222
Future<Map<Key, Entity>> result = doBatchGet(txn, Sets.newLinkedHashSet(keyList), resultMap);
223223

224224
// Invoke the user post-get callbacks.
225-
return new PostLoadFuture(result, datastoreServiceConfig.getDatastoreCallbacks(), this);
225+
return new PostLoadFuture(result, datastoreServiceConfig.getDatastoreCallbacks(), this, txn);
226226
}
227227

228228
private Future<Entity> wrapSingleGet(final Key key, Future<Map<Key, Entity>> futureEntities) {
@@ -268,7 +268,7 @@ public Future<List<Key>> put(@Nullable Transaction txn, Iterable<Entity> entitie
268268
// Invoke the pre-put callbacks.
269269
List<Entity> entityList =
270270
entities instanceof List ? (List<Entity>) entities : Lists.newArrayList(entities);
271-
PutContext prePutContext = new PutContext(this, entityList);
271+
PutContext prePutContext = new PutContext(this, txn, entityList);
272272
datastoreServiceConfig.getDatastoreCallbacks().executePrePutCallbacks(prePutContext);
273273

274274
// Do the datastore put RPC on the remaining entities.
@@ -277,7 +277,7 @@ public Future<List<Key>> put(@Nullable Transaction txn, Iterable<Entity> entitie
277277
if (txn == null) {
278278
// We're not in a txn so make sure we execute post-put callbacks when
279279
// the user asks for the result of the future.
280-
PutContext postPutContext = new PutContext(this, entityList);
280+
PutContext postPutContext = new PutContext(this, txn, entityList);
281281
result =
282282
new PostPutFuture(result, datastoreServiceConfig.getDatastoreCallbacks(), postPutContext);
283283
} else {
@@ -326,7 +326,7 @@ protected Future<Void> runInternal(Transaction txn) {
326326
@Override
327327
public Future<Void> delete(@Nullable Transaction txn, Iterable<Key> keys) {
328328
List<Key> allKeys = keys instanceof List ? (List<Key>) keys : ImmutableList.copyOf(keys);
329-
DeleteContext preDeleteContext = new DeleteContext(this, allKeys);
329+
DeleteContext preDeleteContext = new DeleteContext(this, txn, allKeys);
330330
datastoreServiceConfig.getDatastoreCallbacks().executePreDeleteCallbacks(preDeleteContext);
331331
// NOTE: We are reusing the user's list here, we can do this because
332332
// we do not hold on to this list after this function returns.
@@ -339,7 +339,7 @@ public Future<Void> delete(@Nullable Transaction txn, Iterable<Key> keys) {
339339
new PostDeleteFuture(
340340
result,
341341
datastoreServiceConfig.getDatastoreCallbacks(),
342-
new DeleteContext(this, allKeys));
342+
new DeleteContext(this, txn, allKeys));
343343
} else {
344344
// We are in a txn so register the entities that have been deleted with
345345
// the txn so that we execute the appropriate post delete callbacks when
@@ -434,7 +434,7 @@ public PreparedQuery prepare(Query query) {
434434
@SuppressWarnings("deprecation")
435435
@Override
436436
public PreparedQuery prepare(Transaction txn, Query query) {
437-
PreQueryContext context = new PreQueryContext(this, query);
437+
PreQueryContext context = new PreQueryContext(this, txn, query);
438438
datastoreServiceConfig.getDatastoreCallbacks().executePreQueryCallbacks(context);
439439
// Make sure we get the query off the context in case the interceptor has
440440
// modified it.

api/src/main/java/com/google/appengine/api/datastore/BaseCallbackContext.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
*/
3131
abstract class BaseCallbackContext<T> implements CallbackContext<T> {
3232
private final CurrentTransactionProvider currentTxnProvider;
33+
private final Transaction txn;
3334

3435
/** All elements provided to the operation that triggered the callback. */
3536
private final List<T> elements;
@@ -41,8 +42,10 @@ abstract class BaseCallbackContext<T> implements CallbackContext<T> {
4142
* @param currentTxnProvider Provides the current transaction
4243
* @param elements All elements involved in the operation that triggered the callback.
4344
*/
44-
BaseCallbackContext(CurrentTransactionProvider currentTxnProvider, List<T> elements) {
45+
BaseCallbackContext(
46+
CurrentTransactionProvider currentTxnProvider, Transaction txn, List<T> elements) {
4547
this.currentTxnProvider = Preconditions.checkNotNull(currentTxnProvider);
48+
this.txn = txn;
4649
this.elements = Collections.unmodifiableList(Preconditions.checkNotNull(elements));
4750
}
4851

@@ -53,7 +56,7 @@ public List<T> getElements() {
5356

5457
@Override
5558
public Transaction getCurrentTransaction() {
56-
return currentTxnProvider.getCurrentTransaction(null);
59+
return currentTxnProvider.getCurrentTransaction(txn);
5760
}
5861

5962
@Override

api/src/main/java/com/google/appengine/api/datastore/BaseQueryResultsSource.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,8 @@ private int processQueryResult(
291291
for (Entity entity : entityList) {
292292
// Since results are streamed back over time we just create one context
293293
// per result and execute postLoad callbacks within that context.
294-
callbacks.executePostLoadCallbacks(new PostLoadContext(currentTransactionProvider, entity));
294+
callbacks.executePostLoadCallbacks(
295+
new PostLoadContext(currentTransactionProvider, txn, entity));
295296
}
296297
totalResults += entityList.size();
297298
// If the user has pulled back a large number of results without setting

api/src/main/java/com/google/appengine/api/datastore/DeleteContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
*/
2525
public final class DeleteContext extends BaseCallbackContext<Key> {
2626

27-
DeleteContext(CurrentTransactionProvider currentTxnProvider, List<Key> keys) {
28-
super(currentTxnProvider, keys);
27+
DeleteContext(CurrentTransactionProvider currentTxnProvider, Transaction txn, List<Key> keys) {
28+
super(currentTxnProvider, txn, keys);
2929
}
3030

3131
@Override

api/src/main/java/com/google/appengine/api/datastore/PostLoadContext.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@
3131
*/
3232
public final class PostLoadContext extends BaseCallbackContext<Entity> {
3333

34-
PostLoadContext(CurrentTransactionProvider currentTransactionProvider, List<Entity> results) {
35-
super(currentTransactionProvider, results);
34+
PostLoadContext(
35+
CurrentTransactionProvider currentTransactionProvider, Transaction txn, List<Entity> results) {
36+
super(currentTransactionProvider, txn, results);
3637
}
3738

38-
PostLoadContext(CurrentTransactionProvider currentTransactionProvider, Entity result) {
39-
this(currentTransactionProvider, Arrays.asList(result));
39+
PostLoadContext(
40+
CurrentTransactionProvider currentTransactionProvider, Transaction txn, Entity result) {
41+
this(currentTransactionProvider, txn, Arrays.asList(result));
4042
}
4143

4244
@Override

api/src/main/java/com/google/appengine/api/datastore/PostLoadFuture.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,22 @@
2626
*/
2727
class PostLoadFuture extends PostOpFuture<Map<Key, Entity>> {
2828
private final CurrentTransactionProvider txnProvider;
29+
private final Transaction txn;
2930

3031
PostLoadFuture(
3132
Future<Map<Key, Entity>> delegate,
3233
DatastoreCallbacks callbacks,
33-
CurrentTransactionProvider txnProvider) {
34+
CurrentTransactionProvider txnProvider,
35+
Transaction txn) {
3436
super(delegate, callbacks);
3537
this.txnProvider = txnProvider;
38+
this.txn = txn;
3639
}
3740

3841
@Override
3942
void executeCallbacks(Map<Key, Entity> result) {
4043
PostLoadContext postGetContext =
41-
new PostLoadContext(txnProvider, Lists.newArrayList(result.values()));
44+
new PostLoadContext(txnProvider, txn, Lists.newArrayList(result.values()));
4245
datastoreCallbacks.executePostLoadCallbacks(postGetContext);
4346
}
4447
}

api/src/main/java/com/google/appengine/api/datastore/PreGetContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@ public final class PreGetContext extends BaseCallbackContext<Key> {
3434

3535
PreGetContext(
3636
CurrentTransactionProvider currentTransactionProvider,
37+
Transaction txn,
3738
List<Key> keys,
3839
Map<Key, Entity> resultMap) {
39-
super(currentTransactionProvider, keys);
40+
super(currentTransactionProvider, txn, keys);
4041
this.resultMap = resultMap;
4142
}
4243

api/src/main/java/com/google/appengine/api/datastore/PreQueryContext.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@
2929
// in as the results are streamed back.
3030
public final class PreQueryContext extends BaseCallbackContext<Query> {
3131

32-
PreQueryContext(CurrentTransactionProvider currentTransactionProvider, Query query) {
32+
PreQueryContext(
33+
CurrentTransactionProvider currentTransactionProvider, Transaction txn, Query query) {
3334
// Pass in a copy of the provided query so that hooks can mutate without
3435
// side effects.
35-
super(currentTransactionProvider, Arrays.asList(new Query(query)));
36+
super(currentTransactionProvider, txn, Arrays.asList(new Query(query)));
3637
}
3738

3839
@Override

api/src/main/java/com/google/appengine/api/datastore/PutContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
*/
2525
public final class PutContext extends BaseCallbackContext<Entity> {
2626

27-
PutContext(CurrentTransactionProvider currentTxnProvider, List<Entity> entities) {
28-
super(currentTxnProvider, entities);
27+
PutContext(CurrentTransactionProvider currentTxnProvider, Transaction txn, List<Entity> entities) {
28+
super(currentTxnProvider, txn, entities);
2929
}
3030

3131
@Override

api/src/main/java/com/google/appengine/api/datastore/TransactionImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,10 @@ private PostCommitFuture(
9595

9696
@Override
9797
void executeCallbacks(Void ignoreMe) {
98-
PutContext putContext = new PutContext(TransactionImpl.this, putEntities);
98+
PutContext putContext = new PutContext(TransactionImpl.this, TransactionImpl.this, putEntities);
9999
callbacks.executePostPutCallbacks(putContext);
100-
DeleteContext deleteContext = new DeleteContext(TransactionImpl.this, deletedKeys);
100+
DeleteContext deleteContext =
101+
new DeleteContext(TransactionImpl.this, TransactionImpl.this, deletedKeys);
101102
callbacks.executePostDeleteCallbacks(deleteContext);
102103
}
103104
}

0 commit comments

Comments
 (0)