BadValueError: Объект имеет неинициализированные свойства ___ после сброса индексов и очистки кэша памяти

Я работаю над приложением Google App Engine на python. Я попытался переключить запрос, который я выполнял, для одного из моих маршрутов, чтобы запрашивать только одно свойство вместо 2, что приводило к появлению ошибки индексации всякий раз, когда мы пытались выполнить этот запрос.

Это было что-то вроде «Не удалось найти индекс, соответствующий указанным параметрам», но на данный момент у меня нет скриншотов. Чтобы попытаться исправить ситуацию, мы запустили appcfg.py Vacuum_indices и удалили все индексы, связанные с первоначальным поиском. Затем мы загрузили новый index.yaml, указав новый индекс. Хотя мы смогли увидеть, что новые индексы действительно были созданы в панели администратора, а старые исчезли, мы все равно получали ту же ошибку.

Мы действительно не уверены, почему это происходит, и не можем найти документацию по этим проблемам в Интернете. Наша следующая мысль заключалась в том, что какое-то предыдущее состояние в кэше памяти вызывало попытку запроса использовать его старый индекс. Итак, мы сбросили кэш памяти, и теперь мы получаем эту ошибку:

File  "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__
  rv = self.handle_exception(request, response, e)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__
  rv = self.router.dispatch(request, response)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
  return route.handler_adapter(request, response)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__
  return handler.dispatch()
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch
  return self.handle_exception(e, self.app.debug)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch
  return method(*args, **kwargs)
File "/base/data/home/apps/s~dev-erpetcloud2/dev1.392600188150722624/routes/users.py", line 172, in post
  res_dict = cp_user.to_dict()
File "/base/data/home/apps/s~dev-erpetcloud2/dev1.392600188150722624/routes/models/../models/cp_models.py", line 248, in to_dict
  animal_dict = animal.to_dict()
File "/base/data/home/apps/s~dev-erpetcloud2/dev1.392600188150722624/routes/models/../models/cp_models.py", line 574, in to_dict
  protocol, params = self.get_protocol_and_params()
File "/base/data/home/apps/s~dev-erpetcloud2/dev1.392600188150722624/routes/models/../models/cp_models.py", line 395, in get_protocol_and_params
  record = self.protocol_state_key.get()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/key.py", line 572, in get
  return self.get_async(**ctx_options).get_result()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 342, in get_result
  self.check_success()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 389, in _help_tasklet_along
  value = gen.send(val)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/context.py", line 765, in get
  pbs = entity._to_pb(set_key=False).SerializePartialToString()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 3158, in _to_pb
  self._check_initialized()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 3014, in _check_initialized
'Entity has uninitialized properties: %s' % ', '.join(baddies))
BadValueError: Entity has uninitialized properties: title

Просматривая хранилище данных, сущность, на которую ссылается эта трассировка, определенно имеет свойство title.

Я много искал ошибки, которые могут возникнуть из-за удаления индексов и сброса кэша памяти, и ничего полезного не нашел.

Если бы кто-то мог дать мне немного информации о том, что здесь может происходить и как работают эти системы (моя ментальная модель может быть ошибочной), или указать мне правильное направление, это было бы фантастически. Спасибо!!


person bgenchel    schedule 06.05.2016    source источник


Ответы (1)


Эта ошибка означает, что свойство title было указано как обязательное свойство, но вы пытаетесь записать объект в хранилище данных без инициализации этого свойства. Эта ошибка возникает только во время put(). Вы случайно не вносили какие-либо изменения в определение объекта или часть кода, которая записывает эти объекты в хранилище данных?

Изменить: ошибка также может произойти при попытке прочитать объект, для которого не указано значение для «обязательного» свойства.

person mng    schedule 07.05.2016
comment
в том-то и дело, что мы не вносили изменения в определение этого объекта. На самом деле, я сам просмотрел хранилище данных, чтобы убедиться, что то, что оно пытается извлечь, действительно обладает этим свойством. - person bgenchel; 07.05.2016
comment
Хорошо, в каком сценарии вы видите эту ошибку? Кроме того, можете ли вы подтвердить, что свойство «title» всегда было указано как «обязательное» и НИКОГДА не менялось? - person mng; 07.05.2016
comment
Я не могу подтвердить это, однако я могу подтвердить, что данные, которые он пытается получить, имеют поле заголовка и что это поле инициализировано. - person bgenchel; 09.05.2016
comment
это также происходит во время pickle. - person max; 28.03.2017
comment
Это также происходит во время вызова метода get_by_id(<value>). - person Apurva Kunkulol; 19.11.2019