[Allegro] Frage zu acon und "put"

Thomas Berger ThB at Gymel.com
Mo Jan 9 11:44:51 CET 2012


Lieber Herr Eversberg,

> Das hat Hand und Fuß. In Ihrem Joh wird ja schon zuerst geprüft,
> ob der Satz gesperrt ist, dies aber nur als [WARN] ausgegeben und
> der Satz dann mit "put" gespeichert - was dann in der Tat klappt,
> aber nicht klappen soll.

Naja, nach 500 Warnings zu diesem Satz wird dann ein Error
protokolliert und der Satz uebersprungen:


if $DONT_WRITE jump assumereclocked
set lock
if ok jump reclockok
Write "[WARN] Satz " $rec.nr "/" i " gesperrt: " Err
var $sleep_did
z=
if z<500 var 500
ins $pause
:tryreclock
sleep $pause
set lock
if ok Write n;jump reclockok
Write "."
jump tryreclock

:reclockok
if not Lock var "Satz " $rec.nr "/" i " liess sich nicht sperren";jump loge

...

:loge
ins $errmsg
write "ERROR: " $errmsg " - Skipping record" n
Write "ERROR: " $errmsg " - Skipping record" n
z=1;var $cnt.err;z+;var "$cnt.err=" z;ins
jump didignore


Das ist unappetitlich genug: Das Update verbraet also locker 2h an diesem
Datensatz und es kann fatal sein, die spaeteren Datensaetze zu verarbeiten,
weil es wichtig ist, dass der fragliche Satz zuerst aktualisiert wurde.
Umgekehrt kann es aber auch fatal sein, das gesamte Update abzubrechen: Es ist
ja - fuer Anwender - nicht so einfach, in einer groesseren Datei die korrekte
Stelle zu finden, das erfolgreich verarbeitete zu loeschen und das Update
erneut auszufuehren. Daher wird dann oft lieber alles erneut versucht, so dass
im Fall expliziter Neusaetze schnell Dubletten entstehen.

Weil dieser "Error - Satz wurde ignoriert" aber im update.job verbucht wird,
gibt update.job als ganzes einen von 0 abweichenden Exitstatus zurueck, auf
den der acon-Aufrufer bei Bedarf reagieren kann:

// Enum: Status Code (Success)
// 0  - Update o.k.
// 10 - Kein Datensatz wurde geschrieben
// 11 - Kein Datensatz wurde verarbeitet
// 1  - Es gab ignorierte wg. Fehlerzustaenden
z=0
var $cnt.wri (f"0")
if "" z=10
var $cnt.prc (f"0")
if "" z=11
var $cnt.dbl (f"0")
if not "" z=2
var $cnt.err (f"0")
if not "" z=1
if $DEBUG Write "[Exit " z "]" newline
end

viele Gruesse
Thomas Berger




Mehr Informationen über die Mailingliste Allegro