// Now we need to roll back the transaction (even though it doesn't
// actually exist), otherwise TransactionCleanupFilter will try to
// roll it back, which is bad because it's not prepared for the crash
// that we catch below.
try {
rawTransaction.rollback();
throw new Error("Rollback of nonexistent transaction did not fail");
} catch (DatastoreTimeoutException e2) {
log.log(Level.INFO, "Rollback of nonexistent transaction failed as expected", e2);
}
throw e;