我有一个带云功能的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);
})
})
您可以看到该函数以状态 timeout 结束,但是又重新开始备份。奇怪的是,我指定了540秒的限制,但是超时时间始终是5分钟。另请注意,我检查了云控制台,并在10:00 AM手动分离了最后一个cronjob pubsub,但此后您仍然可以看到多个pubsub触发器。 (因此,我相信cronjob的设置很好)
我在控制台中重复出现一致的错误:
我的问题是,当由于超时而被杀死时,如何防止云功能重新执行。这是错误还是我需要在某处显式设置kill语句。
谢谢!
答案 0 :(得分:1)
这是firebase的错误。根据@MichaelBleigh
事实证明,在使用默认超时创建函数但后来增加导致此问题的功能时,Cloud Functions中存在一个后端错误。一个修复程序正在开发中,有望很快解决该问题。
如果您是在现在和修复错误之间进行阅读,尽管我发现该函数将在300秒后再次触发。因此,对我来说,立即解决的方法是将超时时间设置为250秒,并使函数的时间复杂度保持最小。这可能意味着暂时增加内存使用。