[erledigt] Race Condition bei der Icon-Ermittlung in FHEMWEB

Begonnen von Dr. Boris Neubert, 03 Mai 2021, 19:24:02

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Hallo,

auf zwei verschiedenen Instanzen von FHEM liefert

get myFHEMWEB icon cloudy

dies

/opt/fhem/www/images/default/weather/cloudy.png

bzw. das

/opt/fhem/www/images/default/weather/cloudy.png

Richtig wäre das erste, weil FW_readIconsFrom() die Icons vor dem Einlesen alphabetisch sortiert und immer das erste ausgegeben wird. Anscheinend werden auf der zweiten Instanz die Icons früher und anders geladen, so dass diese Logik zum Sortieren nicht zum Zuge kommt.

Das führt dazu, dass die Weather-Icons auf der zweiten Instanz gemischt PNG- und SVG-Icons sind.

Wie kann ich die Icon-Ladereihenfolge debuggen?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Otto123

Hi Boris,

ich finde den Unterschied nicht?  :-[

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Thorsten Pferdekaemper

Hi,

also bei mir gewinnt immer .svg, wenn die .svg-Dateien überhaupt vorhanden sind. Das ist auch kein Wunder:
Das hier wird für alle Dateien aus dem jeweiligen Verzeichnis ausgeführt:

       my $tag = $filename;     # Add it without extension too
        $tag =~ s/\.[^.]*$//;
        $FW_icons{$dir}{$tag} = $filename;

Vorher werden die Dateien sortiert. Dadurch kommt cloudy.svg nach cloudy.png und überschreibt den Eintrag für cloudy.

Aber das gilt natürlich nur, wenn es die .svg-Dateien auch gibt. Ich habe auch zwei Instanzen auf meiner Entwicklungskiste. Eine hat die .svg-Dateien, die andere nicht. Dadurch beobachte ich dasselbe Verhalten wie Du.

Was hat das eigentlich mit "Race Condition" zu tun?

Gruß,
   Thorsten
FUIP

rudolfkoenig

Race Condition sollte es nicht geben, da FHEMWEB nicht multithreaded ist und _eigentlich_ alle notwendigen Variablen am Anfang der HTTP-Request-Behandlung gesetzt werden. Ich will damit nicht ausschliessen, dass es Probleme gibt, von mir aus auch Race Condition, ich brauche aber was Konkretes zum Nachstellen, wenn ich die Ursache finden soll.

Dr. Boris Neubert

Zitat von: Thorsten Pferdekaemper am 03 Mai 2021, 20:26:04
also bei mir gewinnt immer .svg, wenn die .svg-Dateien überhaupt vorhanden sind. Das ist auch kein Wunder:
Das hier wird für alle Dateien aus dem jeweiligen Verzeichnis ausgeführt:

       my $tag = $filename;     # Add it without extension too
        $tag =~ s/\.[^.]*$//;
        $FW_icons{$dir}{$tag} = $filename;

Vorher werden die Dateien sortiert. Dadurch kommt cloudy.svg nach cloudy.png und überschreibt den Eintrag für cloudy.

Im Code von 01_FHEMWEB.pm wird ab Zeile 2937 per sub FW_iconPath($) das erste Icon, dessen Name (ohne Dateierweiterung) trifft, zurückgeliefert. An Zeile 2871 werden in sub FW_readIconsFrom($$) die Icons geladen und sortiert. Ich war der irrigen Meinung, dass das erste Icon (cloudy.png) gewinnt, aber es ist wie Du es schreibst so, dass das letzte Icon (cloudy.svg) alle anderen gleichen Namens überschreibt.

Zitat
Aber das gilt natürlich nur, wenn es die .svg-Dateien auch gibt. Ich habe auch zwei Instanzen auf meiner Entwicklungskiste. Eine hat die .svg-Dateien, die andere nicht. Dadurch beobachte ich dasselbe Verhalten wie Du.

Grmpf. Du hast Recht. Auf dem anderen System, das mir wie gewünscht das PNG-Icon liefert, fehlen die SVG-Icons. Ich war der irrigen Meinung, dass alle drei Systeme, die ich warte, auf dem gleichen Stand sind... Aber das für mich funktionierende System ohne SVG-Icons habe ich wohl vor dem 18.02.2019 aufgesetzt, dem Datum an dem Wuppi68 die SVG-Icons hinzugefügt hat.

Zitat
Was hat das eigentlich mit "Race Condition" zu tun?

... und dass eine Aufrufreihenfolge dafür verantwortlich ist, welche Icons zuerst in die Liste eingetragen werden. Ich habe falsch gedacht.

Muss mehr eigene Analysezeit in diese Themen stecken und weniger vorschnell vermuten (schäm).

Fazit:

  • FHEM tut was es soll.
  • Bei Icons, die sich nur in der Dateierweiterung unterscheiden, gewinnt das Icon mit dem höchsten Sortierwert.
  • Gleichnamige Icons mit unterschiedlicher Dateierweiterung im selben Verzeichnis im Dateisystem ergeben keinen Sinn, es sei denn, ich übersehe eine Einstellmöglichkeit in FHEM, SVG-Icons herunterzuprorisieren.

Sofern es keine andere Einstellmöglichkeit als den iconPath gibt, schlage ich vor, die von Wuppi68 in fhem/www/images/default/weather hinzugefügten SVG-Icons nach fhem/www/images/fhemSVG/weather zu verschieben.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Wuppi68

Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen