-
-
Notifications
You must be signed in to change notification settings - Fork 746
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
Tibber 429 too many requests Schleife #18635
Comments
Siehe auch #17706 - "einfach" exponential backoff implementieren bei allem anderen als 200 - schon wärs gut? |
Ja, das sollte das Problem lösen. Theoretisch könnte man aber auch mit fixen 30 Sekunden Wartezeit arbeiten, zumindest für diesen konkreten Fall. |
Der Logschnipsel ist leider nichtssagend. Mal wieder ist unklar wie es dazu kommt. These: das passiert nur im Fehlerfall. /cc @GrimmiMeloni |
Ein exponentielles Backoff einzubauen ist leider so ohne weiteres nicht möglich, das gibt die Client Library nicht her. |
Verstehe ich, aber hier ging es mir erstmal nur darum, wie evcc damit umgeht, wenn das Rate Limit bereits überschritten wurde. Das muss ja nicht durch evcc passiert sein, sondern kann auch durch einen anderen Dienst oder irgendein ausgeartetes Script passieren. Und dann ist evcc halt aktuell der bad player, der dafür sorgt, dass die Sperre nie aufgehoben wird - auch wenn er das Problem gar nicht ursprünglich verursacht hat. Zu der Frage wie es dazu kam (was in meinem Fall vermutlich tatsächlich evcc ist) würde ich ein eigenes Issue aufmachen, oder soll das hier beides zusammen behandelt werden? |
Ich habe jetzt Logs, anhand derer sich die Entstehung der Limitüberschreitung bei Tibber nachvollziehen können lassen sollte. Wie kann ich sie euch am besten zukommen lassen @andig ? |
Damit wird aber doch "nur" dafür gesorgt, das man wieder aus der Sperre rauskommt. Wäre es nicht grundsätzlich besser, gar nicht erst in die Sperre reinzulaufen? @andig schrieb ja auch "Der Logschnipsel ist leider nichtssagend. Mal wieder ist unklar wie es dazu kommt. " - daher dachte ich der Bedarf nach mehr Infos zur eigentlichen Entstehung ist vorhanden. Vielleicht geben die Logs darüber Aufschluss und es lässt sich verhindern, dass die Sperre überhaupt erst entsteht. |
Hmmm. Ich dachte das grundsätzliche Dilemma hätte ich bereits hier erklärt. Insbesondere wenn nicht nur evcc auf dem Tibber Account angemeldet ist, kann von evcc Seite nicht mit absoluter Sicherheit garantiert werden, daß es nicht zum Throttling kommt. Evcc kann lediglich sicherstellen nicht selbst mehr als die 100req/300s zu senden. Wenn andere Systeme im Spiel sind ist es nicht deterministisch was passiert. Der Change in #18646 sorgt dafür, daß im Connection Fehlerfall evcc nicht sekündlich auf der API anfragt. Das sollte zumindest dafür sorgen, daß wenn der Fehlerfall eintritt, Tibber aus dem Status wieder herauskommt. Oder anders ausgedrückt. Wenn dieser Fehler auftritt, steuert evcc nur noch 60 von 300 Requests bei. Ob das vorherige Verhalten von evcc für das Throttling verantwortlich war ist schwer zu beurteilen. Eigentlich müsste ja irgendein anderer Effekt erstmal zum Überschreiten der 100req/300s führen. Selbst in der pre-Patch Version des Codes sehe ich das erstmal nicht so ohne weiteres das evcc das tut. evcc meldet an, subscribed, und ab dann ist es kein API call mehr, weil der Stream steht. |
Genau deswegen würde ich euch ja gerne die Logs zur Verfügung stellen - es sieht für mich schon so aus, als wäre evcc ursächlich für die Limitüberschreitung. Und bei mir kann ich auch ausschließen, dass irgendein anderer Dienst die Limitüberschreitung herbeiführt. Hier ein Auszug aus den Logs:
Das sind schon relativ viele Verbindungsversuche in kurzer Zeit.. Und irgendwann kommt dann halt der 429 Fehler. |
OK, dann her damit. Ich schau es mir an. |
Ich habe mir das Log von @Andi1887 heute morgen näher angeschaut. Ich habe die Vermutung, daß der graph-ql client ein Problem hat, und resourcen / go-routines länger als nötig am Leben hält. Dies mache ich unter anderem an der Beobachtung fest, daß ab dem Moment in dem der aktuell laufende Run() mit der folgenden Meldung aussteigt:
sich eine Kaskade von "use of closed network connection" ins Log ergießt. Ich kann das leider in keiner Weise belegen, da die Log Einträge alle gleich aussehen. @andig kennst du irgendeine Möglichkeit in GoLang ThreadIds/RoutineIds/ContextIds ins Log zu bekommen, so daß wir diese Ausgaben ggf. irgendwie voneinander unterscheiden können? Wenn nein, sehe ich hier erstmal kein Weiterkommen. |
Das sagte ich ja (siehe graphql issue)- die go Routinen werden nicht beendet da sie in den error Channel schreiben wollen der mangels Reader blockiert is.
Das ist im PProf erkennbar. |
Ich habe jetzt nochmal intensiv den Fall der hängenden Go Routine angeschaut. Die ist nur Beiwerk vom Client shutdown (nach dem der subscripe scheitert). Ich würde sagen der go-graphql client leaked pro client exit eine go routine. Ich vermute auch das diese es sind, die die Kaskade an Log Nachrichten erzeugen. Eine andere Theorie habe ich nicht. @Andi1887 wie lang wäre das längste Log das Du mir senden kannst? Hast Du zufällig das Log das Du mir gesendet hast ab Start von evcc? |
Das Log von dem Fall, den ich dir geschickt habe, könnte ich dir ab "2025/02/04 19:33:30" zur Verfügung stellen. Allerdings ist da der Start von evcc nicht mit drauf, das lief schon länger. Wenn du ein vollständiges Log ab Start brauchst, müssen wir bis zum nächsten Auftreten warten. |
Describe the bug
Die Tibber-API, welche auch von evcc genutzt wird, hat ein Rate-Limit von 100 Abfragen pro 5 Minuten (https://developer.tibber.com/docs/overview). Wenn dieses Limit erreicht wurde, egal ob durch evcc oder einen anderen Dienst, kommt es zu folgendem Verhalten:
Nach einem 429 Status Code wird jeweils eine Sekunde später ein erneuter Versuch gestartet. Das führt dazu, dass die Sperre aufrecht erhalten bleibt, bis man evcc für einige Minuten ausschaltet.
Steps to reproduce
Configuration details
Log details
What type of operating system or environment does evcc run on?
Docker container
External automation
Nightly build
Version
evcc version 0.133.0 (b7a9abb)
The text was updated successfully, but these errors were encountered: