Frommi
Frommi

Reputation: 3

How to handle fast ndb queries to one entity?

If there are two or more post requests from client to one function, where server changes one entity, then second request can get this entity before first puts. And so, when second request puts entity, it rewrite changes from first request. How to prevent this effect?

Here some example (adding element to list):

class SomeHandler(webapp2.RequestHandler):
    def post(self):
        logging.info("SomeHandler post")
        name = self.request.get("name")
        element = self.request.get("element")
        x = X.query(X.name == name).fetch(1)[0]

        # some stuff, that takes time            

        x.list.append(element)
        logging.info("Putting entity")
        x.put()

So, if two post requests were fast enough, than logs might looks like this:

SomeHandler post
SomeHandler post
Putting entity
Putting entity

insted

SomeHandler post
Putting entity
SomeHandler post
Putting entity

And only second element will be added.

Upvotes: 0

Views: 83

Answers (1)

Daniel Roseman
Daniel Roseman

Reputation: 600026

This is exactly why there are transactions.

Upvotes: 2

Related Questions