【发布时间】:2018-11-27 19:10:13
【问题描述】:
我有一个具有触发 cronjob 的云功能的 Firestore 应用程序。 云功能耗时长,拉取大量数据。我已将函数的内存限制设置为 2Gb,超时设置为 540 秒,并且 Retry on failure 已NOT选中。
云函数本质上是这样的:
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 手动关闭了最后一个 cronjob pubsub,但此后您可以看到多个 pubsub 触发器。 (所以我相信 cronjob 设置得很好)
我还在控制台中重复出现一致的错误:
我的问题是如何防止云功能因超时而被终止时重新执行。这是一个错误还是我需要在某处明确设置一个 kill 语句。
谢谢!
【问题讨论】:
-
事实证明 Cloud Functions 中存在一个后端错误,当使用默认超时创建函数但后来增加导致此问题时,会发生该错误。正在修复,希望能尽快解决问题。
-
非常感谢@MichaelBleigh 的快速回复。所以本质上,每次我增加默认超时时都会发生这种情况?现在是否有当前的解决方法,还是我应该坐稳?我的功能肯定需要超过 60 秒才能完成。
-
它可能只发生在 PubSub 函数中(其他函数类型不受影响)。我相信修复迫在眉睫,所以你也许可以坐稳。
-
@MichaelBleigh 你知道这是否存在未解决的问题吗?我遇到了类似的事情(不确定是否相同)并且想知道它是否相关。谢谢。
-
因为这是从 2018 年开始的,我非常怀疑这是同一个问题 :)
标签: javascript node.js firebase google-cloud-firestore google-cloud-functions