[vz-dev] Bug in C++Port von vzlogger - Puffer entleert sich nicht mehr

Justin Otherguy justin at justinotherguy.org
Mon Aug 6 08:37:40 CEST 2012


Servus Kai,

Am 06.08.2012 um 07:47 schrieb Kai Krueger:

>> Allerdings laufe ich alle paar Tage in folgendes Verhalten:
>> - der Puffer füllt sich, ohne sich - von alleine - wieder zu entleeren
>> - den relevanten Auszug aus vzlogger.log habe ich hier [1] abgelegt
> Da der 'logging-thread' fuer das Leeren des Puffers zustaendig ist, ist
> der Fehler in diesem Bereich zu suchen.
aha

> Dem Log nach scheint der logging thread im 'curl_send' zu haengen.
> Kannst Du aus dem spaeteren Verlauf des Log feststellen, ob es ein Timeout
> gab?
wie kann ich das erkennen?
Die Situation hatte sich nicht selbst wieder eingerenkt; ich habe vzlogger gestoppt, nachdem mehr als 1.000 Werte im Puffer waren.
Hab ich Dich falsch verstanden?

> Im zweiten Fall bekommt der Aufruf zu mindest 'CURL: Recv failure:
> Connection reset by peer' als antwort und kann entsprechend reagieren.
ist das nicht schon bevor der Puffer sich füllt? Zeilen 78-86; Puffer füllt sich ab Zeile 115

> Kann man den IP-wechsel exakt an dem Zeitstempel 'Aug 02 20:45:21' fest
> machen?
nicht sicher; ich vermute es aber stark:
20:45:21 meldet vzlogger die letzte erfolgreiche Anfrage (iconnect)
20:45:21 habe ich den letzten Eintrag im Log des Apache auf demo.volkszaehler.org
20:45:24 meldet vzlogger zum ersten Mal, dass es schief gegangen ist
21:00:02 kommt vzmonitor vorbei (läuft auch auf dem iconnect) und will wissen, ob mit dem Kanal alles in Butter ist; das ist dann schon mit der neuen IP

vzlogger loggt dann erst nach einem händischen Neustart wieder.

Die beiden Rechner (iconnect mit vzlogger und demo.volkszaehler.org) verwenden NTP; einen passenden Zeitstempel vom DSL-Router habe ich nicht.

Beantwortet das Deine Frage?

> Der IP-Wechsel ist Clientseitig?
jepp, ich hab am DSL-Anschluss ne neue IP bekommen.

> Ich schaue mal ob ich ein haengenbleiben im 'curl_send'
> (curl_easy_perform()) reproduzieren kann, um dann zu sehen in wie weit man
> hier ein Timeout provozieren kann.
ok. Wie sieht denn der Ablauf an der Stelle aus:
1 [Aug 02 20:45:21][chn0] Adding reading to queue (value=2276.80 ts=1343933121.627)
2 [Aug 02 20:45:21][api]  ==> number of tuples: 1
3 [Aug 02 20:45:21][CURL] compare: 1343933118801 1343933121627 1343933121626.678955
4 [Aug 02 20:45:21][chn0] JSON request body: [ [ 1343933121626.678955, 2276.800000 ] ]

Zeile 1: das ist in beiden Fällen (Wert wird geloggt und Wert wird nicht geloggt) zu sehen
Zeilen 2-4: die Zeilen finden sich nur, wenn das Logging auch klappt; anderenfalls füllt sich der Puffer
Zeilen 2-4 werden in Methode vz::api::Volkszaehler::api_json_tuples [1] generiert und diese wird in vz::api::Volkszaehler::send [2] aufgerufen, korrekt?

Läuft das dann nicht schon vor dem Absetzen des CURL-Requests schief?

Welche Fälle können denn dazu führen, dass der Puffer gefüllt wird?
Kannst Du mir sagen, an welchen Codestellen diese Fälle abgefragt werden?

Falls Du neue Fragen hast: her damit :-)

Danke schon mal!


Gruss, J.


[1] https://github.com/kaikrueger/vzlogger/blob/c%2B%2B-port/src/api/Volkszaehler.cpp#L150



More information about the volkszaehler-dev mailing list