title: AppEngine: Maintaining DataStore Consistency When Creating Records
body: <p>I've hit a small dilemma! I have a handler called vote; when it is invoked it sets a user's vote to whatever they have picked. To remember what options they previously picked, I store a VoteRecord options which details what their current vote is set to.</p>
  
  <p>Of course, the first time they vote, I have to create the object and store it. But successive votes should just change the value of the existing VoteRecord. But he comes the problem: under some circumstances two VoteRecords can be created. It's rare (only happened once in all 500 votes we've seen so far) but still bad when it does.</p>
  
  <p>The issue happens because two separate handlers both do essentially this:</p>
  
  <pre><code>query = VoteRecord.all().filter('user =', session.user).filter('poll =', poll)
  
  if query.count(1) &gt; 0:
   vote = query[0]
  
   poll.votes[vote.option] -= 1
   poll.votes[option] += 1
   poll.put()
  
   vote.option = option
   vote.updated = datetime.now()
   vote.put()
  else:
   vote = VoteRecord()
   vote.user = session.user
   vote.poll = poll
   vote.option = option
   vote.put()
  
   poll.votes[option] += 1
   poll.put()
  
   session.user.votes += 1
   session.user.xp += 3
   session.user.put()
  
   incr('votes')
  </code></pre>
  
  <p>My question is: what is the most effective and fastest way to handle these requests while ensuring that no request is lost and no request creates two VoteRecord objects?</p>