Ошибка Firebase: TOO_MANY_TRIGGERS

В нашем приложении Firebase есть список с большим количеством элементов в базе данных Realtime. Каждая операция создания, обновления и удаления на одном элементе обрабатывается Firebase Cloud Function с помощью триггера onWrite (в простейшем случае эта функция просто подсчитывает элементы). Но иногда требуется массовая работа на элементах без необходимости индивидуальной обработки. Скажем, мы хотим, чтобы в одной транзакции удалялись все элементы и сбрасывались счетчики.

Раньше это работало нормально. Из-за предела 1000 для количества Облачных Функций, вызванных одной записью (https://firebase.google.com/docs/database/usage/limits), никаких функций, которые вообще не срабатывали, и это был желаемый результат.

Теперь, без изменения кода приложения, мы имеем ошибку

Ошибка: TOO_MANY_TRIGGERS: этот запрос вызовет слишком много функций для запуска.

Такая же ошибка появляется в клиентском приложении, API-интерфейсе администратора и даже при импорте json с использованием веб-интерфейса. Только тот вариант, который работает для нас, - это обработка элементов партиями. Но он не транзактивен и занимает до десятков минут вместо миллисекунд, как и раньше.

Какие параметры мы должны обойти эту ошибку? Оптимально это было бы некоторым переключением на запуск функции пропуска в случае превышения лимита.

Ответ 1

В настоящее время нет способа предотвратить запуск триггеров в особых обстоятельствах. Единственный способ избежать этого - отменить все триггеры, выполнить обновления, а затем снова развернуть все триггеры.

Я бы посоветовал вам подать запрос на функцию для этого.

Ответ 2

Для тех, кто читает этот вопрос после 2018 года, теперь есть возможность отключить строгое соблюдение ограничений на триггеры.

Строгая проверка по умолчанию включена для операций записи, запускающих события. Любые операции записи, которые запускают более 1000 облачных функций или одно событие размером более 1 МБ, завершатся неудачно и вернут ошибку, сообщающую о достигнутом пределе. Это может означать, что некоторые облачные функции вообще не запускаются, если они не проходят предварительную проверку.

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

Чтобы отключить strictTriggerValidation, выполните следующие действия:

Смотрите здесь для документов: https://firebase.google.com/docs/database/usage/limits