- Jun 11, 2020
- 131
- 26
i need help. i keep on getting this error
Not much to really do about it atmWe've had to impose stricter rate limiting site wide. When multiple user's checks coincide it can effectively cause a DDoS, the most recent downtime 2 days ago was directly attributed to this.
As WhiteVanDaycare suggested, lowering your worker count and minimizing the number of full rechecks should allow you to stay under the rate limiting.
Error 429, the main theme on the last pages with even Sam , our SysAdmin, explaining where it comes from, literally two (2) posts before yours -> herei need help. i keep on getting this error
asynciolimiter
used in requirements.txt
also slightly modified..dev69
from the end if you want to build it by yourself, but expect AssertionError from time to time due to
asynciolimiter
, slightly rewrote debug related logic - now message about pause will be printed to console if running F95Checker-Debug binary from terminal/cmd/etc.Just testing it on Devuan daedalus (stable) with python 3.11.2 installed.Here is my custom build for linux and windows:
You must be registered to see the links
Include (all are mine but 429 status fix isn't uploaded to repo):
You must be registered to see the links You must be registered to see the links- rate limiter: "API RPM" under "Refresh" settings section - you can try your luck and use it instead of next one, otherwise leave it at 0 (unlimited)
- retries for 429 response: "Retry on 429" under "Refresh" settings section, right under previous one, so far it worked for me
I suggest to make a copy/backup of your current f95checker settings directory since my build will modify settings table in sqlite file.
- WIN: C:\Users\Username\AppData\Roaming\f95checker
- Linux (at least on my manjaro): /home/username/.config/f95checker/
~/.config/f95checker
and ~/.f95checker
but the later seems to be from older versionsUnable to import OpenGL.arrays.numpymodule.NumpyHandler: No numpy module present: No module named 'numpy'
Yeah, I have same always. Not sure if it actually affect anything. I think I had same with last official release too.Unable to import OpenGL.arrays.numpymodule.NumpyHandler: No numpy module present: No module named 'numpy'
Got this line with the debug binary but i didn't see anything strange coming from it.
Try reading this thread. This is all we have been discussing for the last few days.Lately I have been getting errors due to too many connections.
I dropped it 5. Then ended up dropping it to 1 concurrent connection to actually fix it.
I think F95 changed their server settings to restrict multiple parallel connections
I read, and then I shared my own experience.Try reading this thread. This is all we have been discussing for the last few days.
seems like a band-aid fix, and from what i understand any single thread request is quite heavy on your backend.The quick checks aren't a problem as they're hitting a cached API.
It's the 'full' checks that are the problem, as they make requests to Xenforo.
The solution would be to space out the requests more, and to sleep when a 429 is encountered then retry.
this is actually making the problem even worse. when you get a 429, continuing to retry will only worsen the situation. the server is saying "youre going too fast, i cant handle this" and you go "ok let me keep trying another 20 times very quickly".
- rate limiter: "API RPM" under "Refresh" settings section - you can try your luck and use it instead of next one, otherwise leave it at 0 (unlimited)
- retries for 429 response: "Retry on 429" under "Refresh" settings section, right under previous one, so far it worked for me
Why? I agree there is a chance that X out of N games will still be updated after first 429 response (not that I see more than 2 errors in console at a time though), but after that there will bethis is actually making the problem even worse. when you get a 429, continuing to retry will only worsen the situation. the server is saying "youre going too fast, i cant handle this" and you go "ok let me keep trying another 20 times very quickly".
as sam said, if we wanted to fix this in place, the solution is sleeping when a 429 is received until its cleared.
Sam do you have a rough number for how long the 429 is? im thinking of detecting a 429 and sleeping for twice that time. atleast as a temporary solution, until ill make the dedicated cache api i outlined above (if you agree with that proposal)
s429_sem
is Semaphore(1)
) if s429_sem.locked():
await s429_sem.acquire()
s429_sem.release()
async with request("GET", game.url, timeout=globals.settings.request_timeout * 2) as (res, req):
if req.status == 429 and globals.settings.retry_on_429:
async with s429_sem:
if globals.debug:
print(f"[{datetime.now()}] Got 429 error during \"{game.name}\" update, retry in 1 minute", file=sys.stderr)
await asyncio.sleep(60)
return full_check(game, version, limiter)
async with request
this logic won't help. But same (again, I might be wrong) applies to cancelling all tasks on 429 status - there is no guarantee that some of them didn't "start" request already.Thanks, it kind of fixed on it ownError 429, the main theme on the last pages with even Sam , our SysAdmin, explaining where it comes from, literally two (2) posts before yours -> here
And no, no known method to prevent, avoid or circumvent it so far. Can happen to everyone due to high numbers of requests on the server (all of them, not only yours alone)
WillyJL tested it, no more requests if we got 429 until timeout is overMaybe something like this is better (s429_sem
isSemaphore(1)
)
As I see it, it might help to limit pointless requests in some cases, but if X threads already passed that point and went intoPython:if s429_sem.locked(): await s429_sem.acquire() s429_sem.release() async with request("GET", game.url, timeout=globals.settings.request_timeout * 2) as (res, req): if req.status == 429 and globals.settings.retry_on_429: async with s429_sem: if globals.debug: print(f"[{datetime.now()}] Got 429 error during \"{game.name}\" update, retry in 1 minute", file=sys.stderr) await asyncio.sleep(60) return full_check(game, version, limiter)
async with request
this logic won't help. But same (again, I might be wrong) applies to cancelling all tasks on 429 status - there is no guarantee that some of them didn't "start" request already.
WillyJL will appreciate your thoughts on this
Made any updates on your system between builds?WillyJL tested it, no more requests if we got 429 until timeout is over
View attachment 4209109
Also cought situation I mentioned above - one of games issued request before 429 (on another game) and got response after 429.
Changes already included in MEGA builds in original post.
Kinda. Yesterday build was done on ubuntu 22.04 with python 3.11.x, today on 24.04 with python 3.12.3. But it worked on my host manjaro system so I assumed everything is fine. Give me 10-15 mins and I'll make one on yesterday VM.Made any updates on your system between builds?
Seems to be a case of "everything is faster than a debian-update, even glaciers"You don't have permission to view the spoiler content. Log in or register now.
Not sure how I can help with it. Here is results ofMy antivirus is flagging it and showing this:
Trojan/Wacatac.B!ml.
.dev69
from asynciolimiter
version in requirements.txt
as mentioned in original post.