超时后云功能连续执行

时间:2018-11-27 19:10:13

标签: javascript node.js firebase google-cloud-firestore google-cloud-functions

我有一个带云功能的Firestore应用程序,可触发cronjob。 云功能需要很长时间,并且会提取大量数据。我已将功能的内存限制设置为2Gb,并将超时设置为540秒,并且 重试失败 已选中< / em>。

云功能本质上是这样的:

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分钟。另请注意,我检查了云控制台,并在10:00 AM手动分离了最后一个cronjob pubsub,但此后您仍然可以看到多个pubsub触发器。 (因此,我相信cronjob的设置很好)

我在控制台中重复出现一致的错误:

enter image description here

我的问题是,当由于超时而被杀死时,如何防止云功能重新执行。这是错误还是我需要在某处显式设置kill语句。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是firebase的错误。根据@MichaelBleigh

  

事实证明,在使用默认超时创建函数但后来增加导致此问题的功能时,Cloud Functions中存在一个后端错误。一个修复程序正在开发中,有望很快解决该问题。

如果您是在现在和修复错误之间进行阅读,尽管我发现该函数将在300秒后再次触发。因此,对我来说,立即解决的方法是将超时时间设置为250秒,并使函数的时间复杂度保持最小。这可能意味着暂时增加内存使用。