AW: Avanti 2.0 unter Windows

Martin Butkus m.butkus at tu-bs.de
Di Sep 2 13:55:01 CEST 2003


Liebe Liste, lieber Herr Schmidt,

> frisch aus dem Urlaub zurückgekehrt komme ich jetzt endlich dazu, mich
> auch zum neuen Avanti 2 zu melden. Zunächst finde ich es wirklich
> großartig, daß es bei Avanti endlich auch wirklich weitergeht. Avanti
> ist ein genialer Datenbankserver für eine geniale Datenbank und wenn der
> richtig funktioniert ist - zumindest für mich - Allegro gleich noch viel
> besser als es eh schon ist.

Vielen Dank für die Blumen. :))

> [Log-Funktion]

> > Fehlermeldungen:	1
> > Avanti-Eingang:	2
> > Avanti-Bearbeitung:	4
> > Avanti-Ergebnis:	8

> So eine selbst konfigurierbare Log-Funktion fände ich wirklich auch sehr
> gut, vor allem zum Debuggen eigener Anwendungen.

Das können wir einrichten, dann wäre ich aber eher dafür das so zu
regeln, wie jetzt schon beim Z39.50-Server: nämlich daß man
durch Komma getrennte Keywords angeben kann. Also z.B.
"loglevel=jobin,jobout,error". Diese würden dann programmintern in 
ein Bitfield umgesetzt, wie oben beschrieben.

> Wie ist das denn in der jetzigen Version mit den Log-Dateien? Wenn
> verschiedene Threads verschieden lang dauern, werden dann Log-Einträge,

Also, ein Job-Input bleibt zusammen (ein Stück, kein "Dazwischengebrabbel" 
durch andere Threads), ebenso wie ein Job-Output zusammenbleibt.  
Allerdings kann es passieren, daß in der Logdatei auf den Input zu 
Job X der Output zu Job Y folgt.  Im Moment kann man in so einer Situation
noch nicht auseinanderhalten, was zu welchem Job gehört, das ließe sich 
aber einfach einbauen. 

> Auch hier möchte ich mich anschließen. Ich weiß nicht, ob irgendjemand
> schon für seine Programme die XML-Ausgabe wirklich verwendet. Für mich

Ich muß mal gucken, ob und wie man dem avanti-cl die XML-Ausgabe auf 
einfache Weise abgewöhnen kann.  Den Standard-Error vom Avanti-CL 
mitzuloggen, wird ebenfalls kein Problem sein, dazu muß er aber 
noch etwas schweigsamer werden.

> > Am besten wäre ein kleines 
> > Programm, das die Avanti-W-Einstellungen aus dem Registry 
> > liest und daraus eine Avanti.conf macht. Wenn das nicht geht, 
> > wären Hinweise nützlich, wie das zu machen ist.
> 
> Solch ein Programm wäre wirklich sehr nützlich.

Schon schwieriger, da ich mich nicht wirklich mit der Programmierung des 
Registry-Zugriffs unter Windows auskenne. Zumal es ja auch noch dringendere 
Sachen gibt (Performance, verbessertes Logging) würde ich dieses Projekt 
eher unter "B-Prio" einsortieren.

> Daß die Registry nicht mehr gebraucht wird halte ich übrigens für eine
> sehr gute Neuerung! Allegro-Nutzer sind gewohnt, alles in
> Konfigurations- bzw. Parameterdateien regeln zu können...

Mir ist es halt aus der Unix-Welt vertraut. Unter Windows vielleicht 
ein wenig anachronistisch, aber dafür portabel. :)

> [Speicherlecks]

> Dem sollte wirklich noch nachgegangen werden. Das war ja wohl auch einer
> der Hauptfehler vom alten Avanti, daß irgendwann einfach der Speicher
> zulief. Wenn das der neue Avanti auch hat, dann wäre der Fortschritt nur

Das Frontend speichert eine ganze Menge Daten in dynamischen 
Speicherstrukturen (Listen), so daß der Speicherbedarf variieren 
kann. Für jede offene Connection gibt es einen Eintrag in die 
Liste, und dort wird dann u.a. der Job-Input und -Output 
zwischengespeichert. Sobald der Job abgearbeitet ist, wird 
das alles aber wieder gelöscht, und spätestens wenn die 
Connection stirbt, wird der gesamte Listeneintrag gelöscht 
(über eine Art Destruktor, die sich um das Niederreißen der 
Listeneinträge automatisch kümmert). 

Von daher sehe ich noch nicht, wie dort ein Speicherleck auftreten 
könnte. Sollten sich dennoch Hinweise darauf ergeben, würde es sich 
aber leicht finden lassen, denn malloc() und free() werden im Code 
grundsätzlich nur über Wrapper-Funktionen aufgerufen, die sich
einfach mit zusätzlichen Logging-Funktionen ausstatten lassen.

Zusätzlich haben wir hier auch Malloc-Debugging-Bibliotheken wie 
z.B. "Electric Fence" zur Verfügung, die solch ein Problem ebenfalls
eingrenzen können.

Dann sähe also die Todo-Liste für die 2.1'er wie folgt aus:

- Pre-Forking von avanti-cl-Prozessen
- "Log-Features" statt Log-Levels
- Logging in Normaltext statt XML ausgeben (avanti-cl)
- Standard-Error von Avanti-CL soll mitgeloggt werden
- Identifikation von einzelnen Jobs in Logdateien

Einen Fehler in der Unix-Variante von Avanti habe ich noch gefunden.
Er bewirkt, daß das Frontend sehr viel Prozessorzeit verbraucht, sobald 
einer der avanti-cl­Kindprozesse sich irregulär beendet hat (sprich:
abgestürzt ist). Dadurch wird der Rechner ziemlich langsam.

Die wahrscheinliche Ursache des Problem ist identifiziert und behoben,
aber noch nicht ausgetestet. Die Windows-Variante ist nicht betroffen. 

Vielleicht erklärt dies auch die Beobachtung mit den Performanceproblemen 
unter Linux. Das wird in der nächsten Version ebenfalls behoben, die für 
das Ende dieser Woche angepeilt ist. Falls es bis dahin nicht klappt,
gibt's wieder eine Bugfix-Zwischenversion.

Freundliche Grüße,
	Martin Butkus




Mehr Informationen über die Mailingliste Allegro