[Messaging] sendEachForMulticast with a lot of tokens throws error
[READ] Step 1: Are you in the right place?
- For issues related to the code in this repository file a Github issue.
- If the issue pertains to Cloud Firestore, read the instructions in the "Firestore issue" template.
- For general technical questions, post a question on StackOverflow with the firebase tag.
- For general Firebase discussion, use the firebase-talk google group.
- For help troubleshooting your application that does not fall under one of the above categories, reach out to the personalized Firebase support channel.
[REQUIRED] Step 2: Describe your environment
- Operating System version: Docker version 28.0.1, build 068a01e (image is: oven/bun:1.2.12-alpine)
- Firebase SDK version: 13.4.0
- Firebase Product: messaging
- Node.js version: v20.18.0
- NPM version: 10.8.2
[REQUIRED] Step 3: Describe the problem
Steps to reproduce:
When using Http/2 with sendEachForMulticast will throw an error (Error while making requests: GOAWAY - exceeded_max_concurrent_streams, Error code: 1) when sending with a lot fcm tokens (lowest that i have tested that got rejected is 214)
if legacy http transport is enabled, this issue does not occur.
best guess why this happens is the fact that it sends a request for every token, therefore sending up to 500 requests at once which is too many for the http/2 implemenation of it.
Relevant Code:
const app = admin.initializeApp();
const messaging = app.messaging();
const tokens = []; // List of a lot of FCM tokens
try {
const result = await messaging.sendEachForMulticast({ tokens });
} catch (err) {
console.error(err);
}
Hi @ShadowWolf308 , Thanks for opening this issue. Each connection should already limit the number of concurrent streams to 100 so this does seem odd. https://github.com/firebase/firebase-admin-node/blob/26b884f70300ef8e3213dfbbd72351ce7f68c695/src/utils/api-request.ts#L1333-L1337
My hunch is this could possibly be caused by something in your environment overriding the HTTP/2 settings.
Could you provide some additional information about your environment and messages sent:
-
Do these errors only occur during parallel calls to sendEachForMulticast with 100+ tokens each or with a singular sendEachForMulticast call with 100+ tokens?
-
Are you using any proxies or anything that could be affecting the HTTP/2 connection settings?
-
Are you experiencing these errors locally or in a server environment?
Along with this could you provide a minimum repro since we are unable to reproduce this error on our side.