Я создал что-то в Google App Engine, который выступает в качестве бэкэнда для iPhone-приложения. В приложении есть взаимодействия, которые вытесняются в социальные сети через их API. Таким образом, типичный рабочий процесс выглядит так:Google App Engine - как вы обрабатываете исключение DatastoreTimeoutException?
- Пользователь использует iPhone приложение, чтобы сделать «что-то»
- App Engine приложение оповещается через HTTP
- App Engine оповещает социальной сети, что пользователь сделал «что-то.» Если пользователь должен проверить свой профиль в этой сети, будет отображаться их активность через приложение. Итак, что касается пользователя, то, что они сделали, вероятно, сработало.
- App Engine должен выполнять некоторую настойчивость самостоятельно, но когда он пытается, генерируется исключение DatastoreTimeException. И теперь данные находятся в состоянии фанки.
Так что же это хороший способ справиться с этим? По своей природе я хотел бы обернуть ее в «транзакцию», но нет способа отбросить то, что было отправлено в Социальную сеть. Итак, я больше думаю о том, как вы обрабатываете DatastoreTimeException? Должен ли я просто обернуть его в блок try и дать ему еще один выход? Лучше ли показывать пользователю ошибку, а затем, когда они снова попытаются «пропустить» взаимодействие в социальной сети, чтобы он не вытолкнул дважды? Есть ли еще одна идея, о которой я не думаю?
На практике повторная попытка часто бывает успешной; вы будете периодически получать тайм-ауты хранилища данных даже для небольших операций. – geoffspear
Вот что я имею в виду - если он потерпел неудачу, потому что хранилище данных захлопнулось, тогда повторная попытка великолепна. Если это не сработало, потому что ваши сущности стали слишком большими, повторная попытка просто отбросит навсегда. Предполагая, что это сбой, продолжительность, по-видимому, определяет, можно ли повторить попытку в простом цикле (до того, как ваш запрос также выйдет из строя) или если вам нужна задача (потому что для разрешения «фанкового состояния» потребуется больше одного запроса,). Но у меня нет опыта этого в движке приложения. –
Объект имеет несколько свойств - строку, длину, пару дат и пару целых чисел. Может ли это быть «слишком большим» или безопасно делать ставку на то, что это был глюк (это единственный раз, когда я это видел). – bpapa