[vz-dev] vzlogger und neue Middleware

Thorben Thuermer r00t at constancy.org
Mon Feb 3 00:11:50 CET 2014


ich hatte zu dem thema mal einen langen post geschrieben,
auf den es leider keinerlei reaktion gab:
"[vz-dev] doppelte timestamps im api-protokoll"
http://volkszaehler.org/pipermail/volkszaehler-dev/2012-December/002211.html
(vlt, kopiere ich den nochmal in die github issues?)

kaikrueger hatte da wohl schon vorher im c++-port einen workaround eingebaut,
den kannte ich noch garnicht:
https://github.com/volkszaehler/vzlogger/commit/aad16d5e24e2ec7c8ad69a88db03984db8dc8eac
(bei gemeldetem duplicate key den _ersten_ wert zu entfernen)

im prinzip ist's halt ein design-problem in der api, dass nicht gemeldet wird
(werden kann!) _welcher_ wert (aus einem request mit mehreren) fehlerhaft war.

der workaround den ersten zu verwerfen behebt das problem dann notfalls
dadurch, dass irgendwann der puffer ganz leer wird.
(sofern falsche werte nicht schneller hinzukommen, als eintrage verworfen werden)

wird da eigentlich mit transkationen gearbeitet, so dass bei einem fehler dann
garnichts eingetragen wird? oder wird ein teil eingetragen, so dass die dann
schon eingetragenen werte beim naechsten request wieder jeweils einen fehler
verursachen?

- Thorben

On Sat, 01 Feb 2014 22:21:53 +0100
Andreas Brus <andreas at brus.name> wrote:
> Moin
> 
> leider ist die neue Middleware doch nicht zu 100% gleich was die 
> Rückmeldungen betrifft.
> Bisher war die Meldung bei "Duplicate Entry" die in 
> src/api/Volkszaehler.cpp behandelt wird:
> 
> CURL Error from middleware: 'PDOException': 'SQLSTATE[23000]: Integrity 
> constraint violation: 1062 Duplicate entry '2-1375860463105' for key 
> 'ts_uniq''
> 
> Dies wurde folgendermaßen behandelt:
> 
>        if( err_type == "PDOException") {
>          if( err_message.find("Duplicate entry") ) {
>            print(log_warning, "middle says duplicated value. removing 
> first entry!", channel()->name());
>            _values.pop_front();
>          }
>        }
> Nun wird aber stattdessen DBALException zurückgegeben:
> CURL Error from middleware: 'DBALException': 'An exception occurred 
> while executing 'INSERT INTO data (timestamp, value, channel_id) VALUES 
> (?, ?, ?)' with params [1391043674905,...
> 
> Daher habe ich folgende Zeilen zusätzlich eingefügt.
> 
>        if( err_type == "DBALException") {
>          if( err_message.find("Duplicate entry") ) {
>            print(log_warning, "middle says duplicated value. removing 
> first entry!", channel()->name());
>            _values.pop_front();
>          }
>        }
> Jemand mit c++ Kenntnissen würde sicher sinngemäß sowas wie:
> 
> if( err_type == "PDOException" || err_type == "DBALException") {
> 
> einfügen und damit ein paar Zeilen Code sparen.
> 
> Ich bittte um baldige Aufnahme ins git Repository, damit vzlogger sowohl 
> mit alter als auch neuer Middleware bei Verbindungsproblemen nicht aus 
> dem Tritt kommt.
> 
> Gruß
> A. Brus


More information about the volkszaehler-dev mailing list