2013-09-21 7 views
2

Запуск на GAE devserver, I POST на мой URL REST, чтобы вставить новую строку. Я возвращаю ответ JSON, отражающий вставленный элемент. Если я затем перейду в API-интерфейс API и запрошу URL-адрес GET, вновь вставленный элемент отсутствует. Через 20 секунд или около того, и 4 или 5 GETS, в конечном итоге новый элемент включен в ответ.Как работает/работает кеширование GAE/Endpoints?

Код конечной точки является кодом, сгенерированным по умолчанию.

Любые идеи, в которых происходит это кэширование/асинхронное поведение, и как я могу его удалить?

ответ

1

Это возможное согласованное поведение хранилища данных GAE. Это хорошо документировано в документах GAE.

Вам нужно будет переписать ваши запросы GET, чтобы они были полностью согласованы.

Вот начало: https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

+0

Хотя я не сомневаюсь в ответе, мне любопытно, почему я вижу его в devserver. Разве devserver намеренно задерживает записи для подражания живой среде? – pinoyyid

+0

Хороший вопрос. «Старый» devserver (до 1.7.6 или около того) по умолчанию полностью согласуется с поведением, вам нужен параметр командной строки, чтобы заставить его имитировать в конечном итоге последовательное поведение. Новый devserver - это противоположность, и по умолчанию это приводит к последовательному поведению. Вы можете использовать флаг командной строки -datastore_consistency_policy для его переключения и определить, действительно ли это является причиной: https://developers.google.com/appengine/docs/python/tools/old_devserver – dragonx

1

Это из-за возможной последовательности.

Вы можете построить ваши запросы сильно последовательно, как описано здесь: https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

Однако, если вы просто выполняя ГЭТ, вы должны использовать key.get(). Это также сильно согласуется с тем, как вы должны получать единый объект.

Смежные вопросы