Skip to content

No error/end-callback triggered for streams on ERR_NETWORK_CHANGED #1363

@maja42

Description

@maja42

We are using long-running server-streams where the server pushes updates to the frontend.
If the user's network connections change (e.g. due to entering / leaving a VPN), these long-running streams immediately stop - so far so good.

The Browser shows these streams as "failed" inside the network tab:
image

In addition to that, the console tab also shows the failed request:
image

Note though that the HTTP Status is 200.

The issue:
grpc-web does not propagate the error to our application. I'd expect both the "error" and "end"-callbacks to be triggered. Maybe even the "status"-callback.
(Or, at least, the "end"-callback). They are not.
As a consequence, these background-streams silently stop, and we can't inform the user or restart the streams.

Simplified code example:

this._alertServiceClient = new AlertServicePublicClient(/*...*/);

// ...

const req: Empty = new Empty();
this._alertStream = this._alertServiceClient.streamAlertChanges(req);

// None of these callbacks gets called if the stream stops with ERR_NETWORK_CHANGED:
this._alertStream.on('data', (response: AlertChanges) => {
  console.log('DATA', status); 
});
this._alertStream.on('error', (err: RpcError) => {
  console.log('ERROR', err); 
});
this._alertStream.on('end', () => {
  console.log('END'); 
});
this._alertStream.on('status', (status) => {
  console.log('STATUS', status); 
});

this._store.dispatch(AlertChangesStarted());

Setup:
We are using Google Chrome, but it also happens for other browsers.
The backend starts with an nginX-server, that forwards all grpc-web calls to an enovy proxy. Envoy then translates to grpc and forwards to individual backend services.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions