Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Subscription doesn't deduplicate #11864

Open
Tainan404 opened this issue May 23, 2024 · 6 comments
Open

Subscription doesn't deduplicate #11864

Tainan404 opened this issue May 23, 2024 · 6 comments

Comments

@Tainan404
Copy link

Issue Description

Intended outcome:
When multiple components subscribe for the same subscrition deduplicate them.

Actual outcome:
When a new component subscribes for an on running subscription it duplicates the request.

The first two components reuse the same request for subscriptions, the new one creates a new request for the same susbcription
example:
Screencast from 23-05-2024 18:54:27.webm

Link to Reproduction

https://github.com/Tainan404/subscription-duplication

Reproduction Steps

after start the server and client

  • Send a message
  • Increase the number of components for 3
  • See on devtools on network tab a new subscription
  • Send a new message receive the same data in both subscriptions

@apollo/client version

3.10.4

@Tainan404 Tainan404 changed the title Subscription doesn't deduplicate when it happens after first data arrives Subscription doesn't deduplicate May 24, 2024
@TiagoJacobs
Copy link

Hello @Tainan404 - nice catch!

I would like to add that consistently deduplicating the subscriptions is a very important feature for BigBlueButton.

This feature allowed us to decouple the data consumption, allowing each component to require the data of interest.

However, with this bug, we will eventually get duplicated subscriptions, increasing the load in both client and server.

@jerelmiller - we have some workarounds in mind, like creating a hook named useDeduplicatedSubscription, but if it's something you could fix on apollo-client, it would benefit the whole comunity of users.

Any feedback in this issue will be highly appreciated.

Thank you!

@alessbell
Copy link
Member

Hi @Tainan404 and @TiagoJacobs 👋

I see that the relevant feature request apollographql/apollo-feature-requests#74 was closed by #6910.

As you described, I am seeing deduplication of the initial subscriptions, but when subsequent components are rendered as you said I'm seeing new connections open. I suspect I know what's happening here: any existing deduplication is happening in the QueryManager when startGraphQLSubscription calls getObservableFromLink, so requests that are fired in quick succession can be deduped, but we don't keep track of subscriptions with e.g. a unique cache key, so if the same subscription is being opened at a later time, it cannot be deduplicated against all currently running subscriptions.

I'll have to dig into this more and discuss with the team, thanks for the reproduction!

@TiagoJacobs
Copy link

Hello @alessbell,

To temporarily address this issue, we have implemented a new hook in BigBlueButton called usedDeduplicatedSubscription. You can find the pull request here.

I am sending it here in case it can be helpful to others.

PS: Looking forward for an oficial fix in the future.

Thanks again!

@dominikklein
Copy link

Maybe same like this here? #10117

@TiagoJacobs
Copy link

Hello @dominikklein - yes, it's the same case!

@dominikklein
Copy link

When this would work in a better way, would it be the same for subscribeToMore or is this currently in general handled in a different way?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants