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

remove sync response cache #380

Merged
merged 1 commit into from
May 17, 2024

Conversation

Benjamin-L
Copy link
Contributor

This cache can serve invalid responses, and has an extremely low hit rate.

It serves invalid responses because because it's only keyed off the since parameter, but many of the other request parameters also affect the response or it's side effects. This will become worse once we implement filtering, because there will be a wider space of parameters with different responses. This problem is fixable, but not worth it because of the low hit rate.

The low hit rate is because normal clients will always issue the next sync request with since set to the prev_batch value of the previous response. The only time we expect to see multiple requests with the same since is when the response is empty, but we don't cache empty responses.

This was confirmed experimentally by logging cache hits and misses over 15 minutes with a wide variety of clients. This test was run on matrix.computer.surgery, which has only a few active users, but a large volume of sync traffic from many rooms. Over the test period, we had 3 hits and 5309 misses. All hits occurred in the first minute, so I suspect that they had something to do with client recovery from an offline state. The clients that were connected during the test are:

  • element web
  • schildichat web
  • iamb
  • gomuks
  • nheko
  • fractal
  • fluffychat web
  • fluffychat android
  • cinny web
  • element android
  • element X android

Fixes: #336

@Benjamin-L
Copy link
Contributor Author

A couple (prost, libc) of our dependencies in the lockfile were yanked, so I've added a lockfile-bump commit to make CI happy.

This cache can serve invalid responses, and has an extremely low hit
rate.

It serves invalid responses because because it's only keyed off
the `since` parameter, but many of the other request parameters also
affect the response or it's side effects. This will become worse once we
implement filtering, because there will be a wider space of parameters
with different responses. This problem is fixable, but not worth it
because of the low hit rate.

The low hit rate is because normal clients will always issue the next
sync request with `since` set to the `prev_batch` value of the previous
response. The only time we expect to see multiple requests with the same
`since` is when the response is empty, but we don't cache empty
responses.

This was confirmed experimentally by logging cache hits and misses over
15 minutes with a wide variety of clients. This test was run on
matrix.computer.surgery, which has only a few active users, but a
large volume of sync traffic from many rooms. Over the test period, we
had 3 hits and 5309 misses. All hits occurred in the first minute, so I
suspect that they had something to do with client recovery from an
offline state. The clients that were connected during the test are:

 - element web
 - schildichat web
 - iamb
 - gomuks
 - nheko
 - fractal
 - fluffychat web
 - fluffychat android
 - cinny web
 - element android
 - element X android

Fixes: girlbossceo#336
@Benjamin-L
Copy link
Contributor Author

CI is now fixed on the main branch, so rebased and removed the lockfile commit.

@girlbossceo girlbossceo merged commit 8bffcfe into girlbossceo:main May 17, 2024
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Bug: sync request cache ignores most parameters
2 participants