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-clKindprozesse 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