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()
, orres.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