Firebase cloud function exits with code 16 what is error code 16 and where can I find more info?

Solution 1:

Apparently and after investigation, the error means something like: Headers already sent.

I had somewhere in my code a response.send() with headers and then, later on, I was sending another response.

Would be great if the Firebase team could elaborate with these issues and provide some documentation instead of leaving us blindfolded (to my understanding)

Solution 2:

An improperly terminated cloud function is the likely cause.

Here's what the firebase docs say:

  • Resolve functions that perform asynchronous processing (also known as "background functions") by returning a JavaScript promise.

  • Terminate HTTP functions with res.redirect(), res.send(), or res.end().

  • Terminate a synchronous function with a return; statement.

In short, watch out for floating promises and/or multiple calls to res or response.

I've also seen the Process exited with code 16 occur in tandem with:

Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.
    at GoogleAuth.getApplicationDefaultAsync (/srv/functions/node_modules/google-auth-library/build/src/auth/googleauth.js:161:19)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Solution 3:

The code for the function framework is actually public in the GoogleCloudPlatform/functions-framework-nodejs repository (although not advertised anywhere).

In particular you can see there the cases where killInstance is used, which is the one triggering exit code 16:

const killInstance = process.exit.bind(process, 16);

These cases are (at the time of writing):

  • uncaughtException
  • unhandledRejection