0

当我在查询上使用 fetch_async() 时,它在第一次运行时会因 AssertionError 而崩溃。如果我立即再次运行它,那很好。

例如。

带型号:

class User(ndb.Model):
    user = ndb.UserProperty()
    name = ndb.StringProperty()
    penname = ndb.StringProperty()
    first_login = ndb.DateTimeProperty(auto_now_add=True)
    contact = ndb.BooleanProperty()

以下立即起作用,返回一个空列表:

users = User.query(User.penname == "asdf").fetch()

但这会崩溃:

future = User.query(User.penname == "asdf").fetch_async()
users = future.get_result()

和:

Traceback (most recent call last):
  File "/opt/google-appengine-python/google/appengine/ext/admin/__init__.py", line 320, in post
    exec(compiled_code, globals())
  File "<string>", line 6, in <module>
  File "/opt/google-appengine-python/google/appengine/ext/ndb/tasklets.py", line 320, in get_result
    self.check_success()
  File "/opt/google-appengine-python/google/appengine/ext/ndb/tasklets.py", line 357, in _help_tasklet_along
    value = gen.throw(exc.__class__, exc, tb)
  File "/opt/google-appengine-python/google/appengine/ext/ndb/query.py", line 887, in _run_to_list
    batch = yield rpc
  File "/opt/google-appengine-python/google/appengine/ext/ndb/tasklets.py", line 435, in _on_rpc_completion
    result = rpc.get_result()
  File "/opt/google-appengine-python/google/appengine/api/apiproxy_stub_map.py", line 592, in get_result
    return self.__get_result_hook(self)
  File "/opt/google-appengine-python/google/appengine/datastore/datastore_query.py", line 2386, in __query_result_hook
    self._batch_shared.conn.check_rpc_success(rpc)
  File "/opt/google-appengine-python/google/appengine/datastore/datastore_rpc.py", line 1191, in check_rpc_success
    rpc.check_success()
  File "/opt/google-appengine-python/google/appengine/api/apiproxy_stub_map.py", line 558, in check_success
    self.__rpc.CheckSuccess()
  File "/opt/google-appengine-python/google/appengine/api/apiproxy_rpc.py", line 156, in _WaitImpl
    self.request, self.response)
  File "/opt/google-appengine-python/google/appengine/api/datastore_file_stub.py", line 568, in MakeSyncCall
    response)
  File "/opt/google-appengine-python/google/appengine/api/apiproxy_stub.py", line 87, in MakeSyncCall
    method(request, response)
  File "/opt/google-appengine-python/google/appengine/datastore/datastore_stub_util.py", line 2367, in UpdateIndexesWrapper
    self._UpdateIndexes()
  File "/opt/google-appengine-python/google/appengine/datastore/datastore_stub_util.py", line 2656, in _UpdateIndexes
    self._index_yaml_updater.UpdateIndexYaml()
  File "/opt/google-appengine-python/google/appengine/datastore/datastore_stub_index.py", line 244, in UpdateIndexYaml
    all_indexes, manual_indexes)
  File "/opt/google-appengine-python/google/appengine/datastore/datastore_stub_index.py", line 85, in GenerateIndexFromHistory
    required, kind, ancestor, props, num_eq_filters = datastore_index.CompositeIndexForQuery(query)
  File "/opt/google-appengine-python/google/appengine/datastore/datastore_index.py", line 424, in CompositeIndexForQuery
    assert filter.property(0).name() == ineq_property
AssertionError

但是,如果我立即再次运行它,例如通过执行以下操作:

future = User.query(User.penname == "asdf").fetch_async()

try:
    users = future.get_result()
except:
    users = future.get_result()

有用。

这种情况到处都在出现,我正在努力找出根本原因。

4

1 回答 1

2

解决方案是升级到 1.7.1 SDK。

于 2012-08-24T15:46:04.120 回答