Приращение огненного хранилища - функция облака вызывается дважды - PullRequest
0 голосов
/ 19 июня 2019

При увеличении Firestore, что произойдет, если вы используете ее в облачной функции, а облачная функция будет случайно вызвана дважды?

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

Например, функция пытается увеличить поле документа на 1

document("post/Post_ID_1").
updateData(["likes" : FieldValue.increment(1)])

Так, хотя приращение может быть атомарным это не идемпотент ?Если мы хотим сделать наши счетчики идемпотентными , нам по-прежнему нужно использовать транзакцию и отслеживать, кто был последним, кому понравился пост?

1 Ответ

1 голос
/ 19 июня 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...