Yeah, that's probably not a good thing. I'm betting the wrong error message was surfaced. Are you still seeing this?
-- Ikai Lan Developer Programs Engineer, Google App Engine plus.ikailan.com | twitter.com/ikai On Thu, Aug 4, 2011 at 6:48 AM, Joshua Smith <[email protected]>wrote: > This is a weird one. > > I have a cron that rolls up some data every few minutes. Nothing too > complicated: > > class CollectStatsHandler(webapp.RequestHandler): > def get(self): > nodes = NodeModel.gql("WHERE online = :1 and procs > :2", True, > 0).fetch(1000) > sum = 0 > for n in nodes: > sum = sum + n.procs > now = datetime.datetime.now().timetuple() > hour = datetime.datetime(now[0], now[1], now[2], now[3]) > hourly = HourlyStatsModel.gql("WHERE hour = :1", hour).get() > if not hourly: > hourly = HourlyStatsModel() > hourly.hour = hour > hourly.stats = str(sum) > else: > hourly.stats = hourly.stats + "," + str(sum) > hourly.put() > > I'm running on M/S, so every now and then I'll get timeouts or whatever, > but that's OK because this is really just for my internal "app health" > dashboard. > > Anyway, yesterday I got this exception: > > google.appengine.api.datastore_errors.TransactionFailedError@/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_rpc.py:1074 > (at least 2 occurrences) Handler:main.pyURL: > http://mesonstreaming.appspot.com/admin/collectStats Stacktrace: > > Traceback (most recent call last): > File > "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", > line 700, in __call__ > handler.get(*groups) > File "/base/data/home/apps/mesonstreaming/51.352130110004909428/main.py", > line 1677, in get > hourly.put() > File > "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", > line 1006, in put > return datastore.Put(self._entity, config=config) > File > "/base/python_runtime/python_lib/versions/1/google/appengine/api/datastore.py", > line 467, in Put > return PutAsync(entities, **kwargs).get_result() > File > "/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_rpc.py", > line 658, in get_result > results = self.__rpcs[0].get_result() > File > "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", > line 592, in get_result > return self.__get_result_hook(self) > File > "/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_rpc.py", > line 1385, in __put_hook > self.check_rpc_success(rpc) > File > "/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_rpc.py", > line 1074, in check_rpc_success > raise _ToDatastoreError(err) > TransactionFailedError: too much contention on these datastore entities. > please try again. > > > So we have a transaction failed error on a put which is NOT a transaction. > > And we have too much contention on an entity which is written once every 5 > minutes by a cron. > > Huh? > > -Joshua > > -- > 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. > -- 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.
