Облачные функции непрерывно выполняются после тайм-аута - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть приложение firestore с облачной функцией, которая запускает cronjob.Облачная функция занимает много времени и извлекает большое количество данных.Я установил предел памяти для моей функции в 2 Гб, а время ожидания 540 секунд и Повторить попытку при ошибке это НЕ проверено .

Облачная функция по сути выглядит следующим образом:

export const fetchEpisodesCronJob = pubsub
   .topic('daily-tick')
   .onPublish(() => {
       console.log(`TIMING - Before Fetches ${rssFeeds.length} feeds`, new Date())

   return Promise.map(
      rssFeeds.map(rssFeed => rssFeed.url),
      url => fetch(url).catch(e => e).then(addFeedToDB), // <-- This can take a long time
      {
           concurrency: 4
      }
    ).catch(e => {
       console.warn('Error fetching feeds', e);
    })
})

Однако в журналах я вижу следующее (продолжается бесконечно): enter image description here

Как видите, функция завершается со статусом timeout , однако она снова запускается снова.Что странно, я установил ограничение в 540 секунд, однако время ожидания составляет 5 минут.Также обратите внимание, что я проверил облачную консоль и вручную отключил последнюю публикацию cronjob в 10:00, но с тех пор вы можете увидеть несколько триггеров публикации.(Поэтому я считаю, что cronjob настроен нормально)

Также я получаю постоянные ошибки, повторяющиеся в консоли:

enter image description here

Мой вопросКак предотвратить повторное выполнение облачной функции, когда она уже была уничтожена из-за тайм-аута.Это ошибка или мне нужно где-то явно указать оператор kill.

Спасибо!

1 Ответ

0 голосов
/ 28 ноября 2018

Так что это ошибка с firebase.Согласно @ MichaelBleigh

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

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

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