[appengine-afterburner] r28 committed - ...

0 views
Skip to first unread message

appengine-...@googlecode.com

unread,
Mar 17, 2011, 3:38:17 PM3/17/11
to appengine-after...@googlegroups.com
Revision: 28
Author: appengine...@gmail.com
Date: Thu Mar 17 12:37:06 2011
Log:
Fixed allocate_ids call inside the transaction.


Revision created by MOE tool push_codebase.
MOE_MIGRATION=918

http://code.google.com/p/appengine-afterburner/source/detail?r=28

Modified:
/trunk/python/src/afterburner/experimental/db/triggers.py

=======================================
--- /trunk/python/src/afterburner/experimental/db/triggers.py Mon Mar 14
17:50:48 2011
+++ /trunk/python/src/afterburner/experimental/db/triggers.py Thu Mar 17
12:37:06 2011
@@ -157,6 +157,7 @@
from google.appengine.api import apiproxy_stub_map
from google.appengine.api import datastore
from google.appengine.api import taskqueue
+from google.appengine.datastore import datastore_rpc
from google.appengine.ext import db
from google.appengine.ext import webapp

@@ -165,6 +166,17 @@
UPDATE_URL = "/_ab/triggers/update"


+def _allocate_ids(keypb, size=1):
+ """Version of db.allocate_ids that works inside the transaction.
+
+ Args:
+ keypb: Key as a protocol buffer.
+ size: number of keys to allocate.
+ """
+ conn = datastore_rpc.Connection(adapter=None)
+ return conn.allocate_ids(keypb, size)
+
+
class Update(db.Model):
@classmethod
def kind(cls):
@@ -192,8 +204,7 @@
if not last_path_element.id() and not last_path_element.has_name():
# assign id to the entity
last_path_element.set_id(-1)
- db_key = db.Key._FromPb(key)
- allocated_id = db.allocate_ids(db_key, 1)[0]
+ allocated_id = _allocate_ids(key)[0]
last_path_element.set_id(allocated_id)

# Populate entity group, because datastore stub is stupid.
@@ -201,9 +212,9 @@
group = entity.mutable_entity_group()
root = entity.key().path().element(0)
group.add_element().CopyFrom(root)
+ db_key = db.Key._FromPb(key)
update_entity = Update(
- key_name=str(db.Key._FromPb(key)),
- parent=db.Key._FromPb(key))._populate_entity()
+ key_name=str(db_key), parent=db_key)._populate_entity()
extra_entities.append(update_entity._ToPb())
request.entity_list().extend(extra_entities)
elif call == "Delete" and not cls.ignore_deletes:

Reply all
Reply to author
Forward
0 new messages