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

bug: GitHub ratelimit unhandled #1776

Open
4 tasks done
ILoveOpenSourceApplications opened this issue Mar 21, 2024 · 20 comments
Open
4 tasks done

bug: GitHub ratelimit unhandled #1776

ILoveOpenSourceApplications opened this issue Mar 21, 2024 · 20 comments
Labels
Bug report Something isn't working

Comments

@ILoveOpenSourceApplications

Bug description

If alternative source is toggled on/off once, the manager goes into this unresponsive state where none of the patchable apps load, and if a patchable app is selected, none of the patches load either. And the changeling also stops working as it showing a loading circle instead.

807fbe11-e595-4b12-9d8d-d8e4ecec5d3d.2.mp4

Screenshot_20240322_025615_ReVanced Manager

PS: #1760 can be clubbed with this issue.

Version of ReVanced Manager and version & name of app you are patching

v1.19.3

Installation method

None

ReVanced Manager logs

Nil

Patch logs

No response

Acknowledgements

  • This issue is not a duplicate of an existing bug report.
  • I have chosen an appropriate title.
  • All requested information has been provided properly.
  • The bug is only related to ReVanced Manager
@ILoveOpenSourceApplications ILoveOpenSourceApplications added the Bug report Something isn't working label Mar 21, 2024
@oSumAtrIX
Copy link
Member

Are you rate limited on GitHub? https://api.github.com/rate_limit

@oSumAtrIX oSumAtrIX added the Waiting on author Further information is requested label Mar 21, 2024
@ILoveOpenSourceApplications
Copy link
Author

{"resources":{"core":{"limit":60,"remaining":2,"reset":1711061079,"used":58,"resource":"core"},"graphql":{"limit":0,"remaining":0,"reset":1711061595,"used":0,"resource":"graphql"},"integration_manifest":{"limit":5000,"remaining":5000,"reset":1711061595,"used":0,"resource":"integration_manifest"},"search":{"limit":10,"remaining":10,"reset":1711058055,"used":0,"resource":"search"}},"rate":{"limit":60,"remaining":2,"reset":1711061079,"used":58,"resource":"core"}}

@oSumAtrIX
Copy link
Member

You seem rate-limited, but still, this is something ReVanced Manager should take care of.

@oSumAtrIX oSumAtrIX removed the Waiting on author Further information is requested label Mar 21, 2024
@oSumAtrIX oSumAtrIX changed the title bug: Toggling Alternative sources triggers an unusable manager bug: GitHub ratelimit unhandled Mar 21, 2024
@validcube validcube self-assigned this Mar 22, 2024
@Maccer1

This comment was marked as spam.

@oSumAtrIX
Copy link
Member

For support move to the links on https://revanced.app

@validcube
Copy link
Member

👋 Hello, @ILoveOpenSourceApplications!

Quick status update here, Unfortunately I will have to unassign myself from this issue (and any other issue that I've assigned to) as tomorrow is the day where I will became unavailable for the rest of the month for unspecified reason (for team refer to recreated janky excel file in the email that I've sent about weeks ago).

🔧 For anyone who's going to work on this

From a quick glance at this issue we would need some kind of interceptor to check if GitHub reply with 429 HTTP-code or check for x-ratelimit-remaining HTTP header. If limit is reached we would likely inform the user about the rate-limit problem and tell them to try later (and/or inform them about the reset time: x-ratelimit-reset header).

Feel free to deviate from this plan if you feel like you have a better solution.

@validcube validcube removed their assignment Mar 30, 2024
@ILoveOpenSourceApplications
Copy link
Author

Feel free to deviate from this plan if you feel like you have a better solution.

Hi, @validcube. Nope, I don't have any better solution. Though due to this issue, at times when I'm trying to patch, the manager becomes basically unresponsive and buffers and or doesn't load anything required. Switching between WiFi and mobile network seems to help at times.

@ILoveOpenSourceApplications
Copy link
Author

This is just my doubt, but this issue began only after the introduction of changelogs into the manager. And everytime I open the manager and tap on the changelogs button, I noticed that it's fetching real time data from the internet (from the buffering). Could this also be one of the reason why the GitHub rate limit is getting exceeded as the manager now accesses the github api for fetching the changelogs for both the manager and patches as well as fetching the patch & integration data for patching as well?

If so, then making the manager remember the last changelog until an update is done to either would be better in handling the traffic right?

@kitadai31
Copy link
Contributor

@validcube May I make a PR for this?

I'm thinking of using toast to notify the rate limit and time remaining like this.

But before I open the PR, I have one question.
I think the manager can show all network errors in this way.

This is useful when the ReVanced API is down and returns 500 error, or user mistyped alternative sources.
Is this OK?

@oSumAtrIX
Copy link
Member

Instead of a toast which can go away, you can show a label at the places where stuff should've loaded

@ILoveOpenSourceApplications
Copy link
Author

Is this the best solution that's available, giving a user who wants to patch an app to wait 53 minutes for the manager to be ready? Can't we restrict something somewhere so that the manager doesn't use up the available GitHub ratelimit?

@oSumAtrIX
Copy link
Member

A setting could be added to input a GitHub PAT to circumvent ratelimit. The ratelimit currently happens due to a bug in ReVanced Manager making more requests than necessary due a caching issue. The solution isnt known, but if found, rate limiting would hardly be a problem. You'd need to reopen ReVanced Manager like 30 times to hit any rate limits

@oSumAtrIX
Copy link
Member

Additionally ReVanced Manager is supposed to cache everything. After a ratelimit, it should simply use the cached files, just like if offline

@validcube
Copy link
Member

validcube commented May 16, 2024

@kitadai31

@validcube May I make a PR for this?

Sure, you can make a PR whenever you like.

I'm thinking of using toast to notify the rate limit and time remaining like this.

But before I open the PR, I have one question. I think the manager can show all network errors in this way.

This is useful when the ReVanced API is down and returns 500 error, or user mistyped alternative sources. Is this OK?

For me, I would use a dialog component for something critical because toast feels like simple low-priority feedback (probably because it is) and isn't something the user would normally see or care about.

image

This is a quick mockup of what the dialog could look like

@ILoveOpenSourceApplications
Copy link
Author

The current solution is a workaround rather than a fix. But atleast the user will know why nothing is loading and why they're unable to use the manager.

@oSumAtrIX
Copy link
Member

The cache should be fixed if it is an imminent issue that needs to be looked into, then a proper solution can be done for ratelimits

@kitadai31
Copy link
Contributor

kitadai31 commented May 16, 2024

OK oSumAtrIX and nullcube.
I can't think of a good idea to display the error, and I don't have that much skill with Flutter, so I'll stop doing this PR, sorry.

But I fixed the cache issue
The issue is occurred because the github_api.dart doesn't use Lock (synchronized) to call dio.get(), while the revanced_api.dart uses it
This causes GitHub API spamming

Before add synchronized:
Every time I launch the Manager, it accesses the API 3 to 7 times randomly
2024-05-17 (5)

After add synchronized:
The problem is fixed
2024-05-17 (1)

I'll open a PR for this first

but API rate limit errors & network errors still have to be shown. I hope someone do this... 😕

@oSumAtrIX
Copy link
Member

I remember adding the lock. Which commit introduced the regression?

@oSumAtrIX
Copy link
Member

In regards to rate limits, ReVanced Manager should work just like if it were offline, until the rate limit elapses. Actions that require the API such as when the app launches for the first time or when you refresh the home feed should show a toast, or if better, a dialog explaining the rate limit

@kitadai31
Copy link
Contributor

kitadai31 commented May 16, 2024

I looked around some revisions of github_api.dart, but Lock has never been added

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug report Something isn't working
Projects
Status: 📋 Backlog
Development

No branches or pull requests

5 participants