【问题标题】:Cloud Functions continuously executing after timeoutCloud Functions 在超时后继续执行
【发布时间】:2018-11-27 19:10:13
【问题描述】:

我有一个具有触发 cronjob 的云功能的 Firestore 应用程序。 云功能耗时长,拉取大量数据。我已将函数的内存限制设置为 2Gb,超时设置为 540 秒,并且 Retry on failureNOT选中。

云函数本质上是这样的:

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


【解决方案1】:

所以这是 firebase 的一个错误。根据@MichaelBleigh

事实证明 Cloud Functions 中存在一个后端错误,该错误发生在使用默认超时创建函数但后来增加导致此问题的情况下。正在进行修复,希望能尽快解决该问题。

如果您在现在和修复错误之间阅读此内容,但我发现该功能将每 300 秒再次触发一次。所以对我来说,一个直接的解决方法是将超时设置为 250 秒,并尽可能降低函数的时间复杂度。这可能意味着暂时增加内存使用量。

【讨论】:

  • 仅供参考 - 这个错误目前一直在影响我,所以不确定它是否被正确修复。我禁用了触发 pub/sub 功能的应用程序引擎 cron 作业,并且该功能仍继续以 4 到 8 分钟的间隔重复(调用 3 到 8 次)。我不得不重新部署我的项目。我将尝试切换到schedule functions 方法,看看是否效果更好。也许@MichaelBleigh 可以参与进来。
猜你喜欢
  • 2018-09-19
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多