9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

30万件程度のデータを、ローカルの Cloud Functions で処理しようとするとエラーになってしまう

Last updated at Posted at 2018-04-19

問題

Firebase Cloud FireStore にある30万件程度のデータを、Firebase Cloud Functions で5万件ずつ取得してごにょごにょしようと思ってたのですが、以下のようなエラーが発生して途中で処理が停止してしまっていました。

info: Execution took 599988 ms, finished with status: 'timeout'

もしくは、

info: Execution took 4093 ms, finished with status: 'crash'

また、10万件ほど処理が終わったタイミングで、以下の警告も表示されることがありました。

(node:38824) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: socket hang up
(node:38824) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

これが表示されると、新しく functionsの処理が再開され、合計3個並行して処理されるようになっていました。

Cloud Functionsのバージョン

v^0.8.1

対応

  • タイムアウト制限をなくす
info: Execution took 599988 ms, finished with status: 'timeout'

ローカルだとタイムアウトが60秒なので、だいたい60秒経ったら止まっていました。
このタイムアウトの設定をなくしてあげると、処理が続くようになると教わり、やってみると60秒以上処理が続くようになりました。

~/.nvm/versions/node/v8.6.0/lib/node_modules/firebase-tools/node_modules/@google-cloud/functions-emulator/src/supervisor/supervisor.js
calculateTimeout (duration) {
    // The default is 60 seconds
    const DEFAULT = 60;
    const MAX = 9 * 60;
}

をいじる。

しかし、発生回数は減りましたが、

info: Execution took 599988 ms, finished with status: 'timeout'

が消えることはありませんでした。

対応

Cloud Functions のバージョンをアップグレードする。

バージョンを、 v1.0.1 にあげました。

しかし、

info: Execution took 4093 ms, finished with status: 'crash'

が消えることはありませんでした。

対応

Fix bug where asynchronous operations inside emulated functions resulted in 500 statuses and "socket hangup" errors.

とあるので、以下の警告をなくせることを期待して、firebase-toosをアップグレード。

(node:38824) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: socket hang up

これが表示されることはなくなったかもしれない!

でも、以下のエラーのせいで最後まで処理されない!

info: Execution took 4093 ms, finished with status: 'crash'

解決策

Cloud Functions の emulator だから動かない説。
本番環境にアップして動かしてみたら、30万件処理された。

まとめ

Cloud Functions の emulator には限界がある。

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?