[epgd] nach Update auf mariadb 10.2.15 -> Felddefinitionen werden bei *jedem* Start angemault

  • Hi *,


    nach Update auf die openSUSE Leap 15.0 und damit auf mariadb 10.2.15 werden alle (?) Felddefinitionen bei *jedem* Start angemault:

    Code
    1. Sep 01 15:04:29 boston epgd[22516]: Checking table structure and indices ...
    2. Sep 01 15:04:29 boston epgd[22516]: Checking table 'analyse'
    3. Sep 01 15:04:29 boston epgd[22516]: Info: Definition of field 'analyse.VDRMASTERID' modified, try to alter table
    4. Sep 01 15:04:29 boston epgd[22516]: Execute [alter table analyse modify column vdr_masterid INT(11) unsigned comment '' ]
    5. Sep 01 15:04:29 boston epgd[22516]: Info: Definition of field 'analyse.VDRSTARTTIME' modified, try to alter table
    6. Sep 01 15:04:29 boston epgd[22516]: Execute [alter table analyse modify column vdr_starttime INT(10) comment '' ]


    Es kommen keine Fehler ansonsten und danach scheint epgd auch zu laufen, aber beim nächsten Start geht dasselbe Spiel wieder los.

    Auch beim Starten von epghttpd passiert dasselbe.


    Ist das eine Inkompatibilät zu dieser MariaDB Version oder hab ich was übersehen?


    Danke und ciao.

    Michael.

  • Ich hab mal ein wenig "printf debugging" eingebaut:


    Code
    1. Sep 02 11:14:47 boston epghttpd[26881]: before alterModifyField: vdrs.VIDEOFREE
    2. Sep 02 11:14:47 boston epghttpd[26881]: colDef >NULL<-><
    3. Sep 02 11:14:47 boston epghttpd[26881]: Type >1< Primary >2<
    4. Sep 02 11:14:47 boston epghttpd[26881]: Info: Definition of field 'vdrs.VIDEOFREE' modified, try to alter table
    5. Sep 02 11:14:47 boston epghttpd[26881]: Execute [alter table vdrs modify column videofree INT(11) unsigned comment '' ]

    Sieht aus, als läge es an der Zeile 953 in lib/db.c:

    Code
    1. ( strcasecmp(fieldInfo->def.c_str(), getField(i)->getDefault()) != 0 && !(getField(i)->getType() & ftPrimary))


    Wobei ich mangels Ahnung von mariadb nicht weiß, was da auf einmal anders als vorher ist.

    Kann es sein, dass NULL unerwartet ist für fieldInfo->def.c_str()?


    Ciao.

    Michael.

  • Ok, da kommt tatsächlich der String "NULL" zurück.

    Ich hab mal Zeile 927in lib/db.c geändert auf:


    Code
    1. fields[row[0]].def = (row[6] && strcmp(row[6], "NULL") != 0) ? row[6] : "";


    Jetzt kommen nur noch zwei Meldungen:

    Code
    1. Sep 02 13:40:27 boston epghttpd[19574]: before alterModifyField: timers.STATE
    2. Sep 02 13:40:27 boston epghttpd[19574]: colDef >'u'<->u<
    3. Sep 02 13:40:27 boston epghttpd[19574]: Type & Primary >0<
    4. Sep 02 13:40:27 boston epghttpd[19574]: Info: Definition of field 'timers.STATE' modified, try to alter table
    5. Sep 02 13:40:27 boston epghttpd[19574]: Execute [alter table timers modify column state VARCHAR(1) comment '\'D\'eleted, \'R\'unning, \'F\'inished' default 'u']
    6. Sep 02 13:40:27 boston epghttpd[19574]: before alterModifyField: timers.ACTION
    7. Sep 02 13:40:27 boston epghttpd[19574]: colDef >'a'<->a<
    8. Sep 02 13:40:27 boston epghttpd[19574]: Type & Primary >0<
    9. Sep 02 13:40:27 boston epghttpd[19574]: Info: Definition of field 'timers.ACTION' modified, try to alter table
    10. Sep 02 13:40:27 boston epghttpd[19574]: Execute [alter table timers modify column action VARCHAR(1) comment '' default 'a']


    Und da stehen als Defaultwerte in der Datenbank wirklich 'a' und 'u' inkl. der Hochkommata.


    Soll das so?

  • mit 10.1.34-MariaDB-0ubuntu0.18.04.1 habe ich den Effekt noch nicht.

    Mit dem String 'NULL' haben die m.E. aber was merkwürdiges "geschraubt" :o


    /Edit:

    Das mit den Defaults sollte bei "show create table timers" z.B. so aussehen:

    `action` varchar(1) DEFAULT 'a',


    Ansonsten mal zum Test die ' hier weglassen:

    Code
    1. asprintf(&statement, "alter table %s modify column %s %s comment '%s' %s%s%s",
    2. TableName(),
    3. def->getDbName(),
    4. def->toColumnFormat(colType),
    5. def->getDbDescription(),
    6. !isEmpty(def->getDefault()) ? "default '" : "",
    7. !isEmpty(def->getDefault()) ? def->getDefault() : "",
    8. !isEmpty(def->getDefault()) ? "'" : ""
  • Versuche ich mal, wenn ich wieder vom Urlaub daheim bin - danke für den Hinweis.

  • ja gibt es. Scheint an einem leicht anderen Verhalten der mysql Lib zu liegen, teste gerade mit Alexanders Hilfe einen Fix (beim mir tritt es nicht auf)

  • wenn jemand testen will, es muss nur diese eine Zeile geändert werden:


    Code
    1. lib/db.c:926      fields[row[0]].description = row[2] ? row[2] : "";
  • wenn jemand testen will, es muss nur diese eine Zeile geändert werden:


    Code
    1. lib/db.c:926      fields[row[0]].description = row[2] ? row[2] : "";

    Ich hab die Änderung gerade eingespielt. Ich konnte aber keine Änderung feststellen. Die Fehlermeldungen in den Logfiles sind weiterhin vorhanden.

  • Code
    1. db.c:927      fields[row[0]].def = row[6] ? strcasecmp(row[6], "NULL") == 0 ? "" : row[6] : "";
  • Mit der neusten Version aus dem Git sind jetzt ein Großteil der Meldungen weg. Ein paar hab ich aber noch.


    Code
    1. Feb 10 14:45:15 europa epgd[42200]: Checking table 'timers'
    2. Feb 10 14:45:15 europa epgd[42200]: Info: Definition of field 'timers.STATE' modified, try to alter table
    3. Feb 10 14:45:15 europa epgd[42200]: Execute [alter table timers modify column state VARCHAR(1) comment '\'D\'eleted, \'R\'unning, \'F\'inished' default 'u']
    4. Feb 10 14:45:15 europa epgd[42200]: Info: Definition of field 'timers.ACTION' modified, try to alter table
    5. Feb 10 14:45:15 europa epgd[42200]: Execute [alter table timers modify column action VARCHAR(1) comment '' default 'a']


    Außerdem bekomme ich seit meinen Test noch die Meldung


    Code
    1. SQL-Error in 'execute(stmt_execute)' - Prepared statement needs to be re-prepared (1615) 'Prepared statement needs to be re-prepared' [select eventid, title, scrsp, season, part, number, shorttext from thetvdbview]
  • zu 1.) habe noch eine weitere Debug Meldung eingebaut (ist jetzt im git). aktualisiere doch bitte nochmal und lass den epgd in LogLevel 5 laufen. Interessant sind dann die Meldungen rund um das altern -die bitte posten.


    zu 2.) Gibt es weitere Fehlermeldungen im Log, hatte er die Verbindung zum DB Server verloren? Wann passiert das?

  • merkwürdige Anführungszeichen, die sollten ja nicht in der Tabelle stehen.

    Kannst du mal bitte das Ergebnis von

    Code
    1. select table_schema, column_name, column_type, column_comment, data_type, is_nullable, character_maximum_length, column_default, numeric_precision from information_schema.columns where table_name = 'timers';

    posten

  • das mit dem einzelnen ' um die default Werte ist sehr schräg! Wäre interessant ob er die dann auch so übernimmt oder ob das nur eine Art Anzeigeproblem ist.

    Was wird denn als default in die Spalte übernommen wenn du einen Datensatz anlegst?


    und schau mal ob das fehlerfrei geht:

    Code
    1. alter table timers modify column state VARCHAR(1) comment '\'D\'eleted, \'R\'unning, \'F\'inished' default 'u';



    Und was danach das hier ergibt:

    Code
    1. select table_schema, column_name, column_type, column_comment, data_type, is_nullable, character_maximum_length, column_default, numeric_precision from information_schema.columns where table_name = 'timers' and column_name = 'state';
  • horchi

    das sieht so aus: