Hi Matija, I can see your use case - you want to make sure that either all tasks get raised, or none. I can also see your worry - that tasks are actually being *fired* before the transaction is complete. I agree this would be a completely incorrect situation. I also transactionally raise multiple tasks, but I always have a datastore operation in conjunction (and use python) - I haven't encountered this issue of tasks being fired before the transaction completes, but I wonder if google has made the assumption that a transaction will always contain a datastore operation, and perhaps their logic is misbehaving if it does not?
An example of how this might happen is if their logic is waiting for a counter of outstanding db operations to reach 0 before raising tasks. This would be flawed logic. Thanks, Colin On Oct 28, 8:21 am, Matija <[email protected]> wrote: > I am not saving any entities but I am putting more than one task in > queue. It depends of the data that current task is processing. Let's > say two tasks (always less then five). > > At the end of 'transaction' I will have two tasks in queue or none. > > This usually works, but sometimes I get this > ConcurrentModificationException exception. Complete application chunk > works eventually because task with execute again and will finish > correctly, but it would be nice to understand this exception so that I > can avoid it. > > On Oct 28, 1:58 am, Tim Hoffman <[email protected]> wrote: > > > > > > > > > If you are not saving any entities why are you using a transaction to > > put the task into the queue. > > > The idea of a queuing a task transactionally is that the task doesn't > > get fired if the transaction fails (ie you save of entities fails). > > > Seems completely redundant > > > Rgds > > > T > > > On Oct 21, 11:18 pm, Matija <[email protected]> wrote: > > > > Hi, > > > I am > > > usinghttp://code.google.com/appengine/docs/java/taskqueue/overview.html#Ta... > > > way to enqueue two tasks in transaction. But I am not saving any > > > datastore entities. I am using objectify. > > > > I got this message: > > > > java.util.ConcurrentModificationException: too much contention on > > > these datastore entities. please try again. > > > at > > > com.google.appengine.api.datastore.DatastoreApiHelper.translateError(Datast > > > oreApiHelper.java: > > > 39) > > > at > > > com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(Datastor > > > eApiHelper.java: > > > 75) > > > at > > > com.google.appengine.api.datastore.TransactionImpl.makeSyncCall(Transaction > > > Impl.java: > > > 44) > > > at > > > com.google.appengine.api.datastore.TransactionImpl.makeSyncCall(Transaction > > > Impl.java: > > > 52) > > > at > > > com.google.appengine.api.datastore.TransactionImpl.commit(TransactionImpl.j > > > ava: > > > 64) > > > > When this happened only one task needed to be added to queue, so why > > > this error ? -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
