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 に答える