[Allegro] if-Befehl bei Flex

Anando Eger a.eger at aneg-dv.de
Mi Dez 17 16:27:56 CET 2014


Liebe Listenleserinnen und -leser,
Hallo Herr Wolf

"if usr" versucht die ?.tbl-Datei in RRRR.rrr umzubenennen.
Wenn das gelingt, wird diese wieder zurück-umbenannt und die 
gewünschte Aktion ausgeführt (bzw. logisch negiert bei if not usr)

Bekannte Nebenwirkungen:

1. Es gibt ein Zeitfenster, während dessen die ?.tbl "nicht da"
   ist - dann gibt's einen crash, wenn von einem zweiten
   Netzwerk-Platz aus in dem Moment ein Datenbankzugriff erfolgt

2. bei aktivem File-Caching irgendwo auf dem Weg zum 
   Netzwerk-Speicher wird oft etwas Falsches erkannt

3. Nach einem Crash bleibt manchmal die RRRR.rrr stehen - dann
   hilft nur noch ein manuelles Löschen dieser Datei

Meine Empfehlung: Diesen Befehl im Netzwerk nicht nutzen, sondern
eine eigene Erkennung bauen - etwa so:

Im _Start.Flx wird in einer Semaphoren-Datei im Datenbank-
Verzeichnis ein Zähler hochgezählt, im _endflx dieser wieder 
zurückgesetzt.

Als Mutex für den Zugriff läßt sich irgend ein Datensatz in der 
Datenbank benutzen - vorzugsweise ein spezielle Systemsatz.

Mögliche Umsetzung:

_start.flx:
- Datensatz verriegeln
- wenn Erfolg, Zähler in Semaphore erhöhen
- wenn kein Erfolg, Abbruch
- Datensatz entriegeln

_endflx.flx:
- Datensatz verriegeln
- wenn Erfolg, Zähler in Semaphore veringern
- wenn kein Erfolg, Meldung "Schwerer Fehler" mit Hinweis
  auf Ursache
- Datensatz entriegeln

Um zu ermitteln, ob weitere Anwender die gleiche DB benutzen,
genügt es dann, den Zähler in der Datei zu lesen.

Nachteile dieser Variante:
- Falls a99 mal "abgeschossen wird", muss die Semaphoren-Datei
  händisch wieder korrigiert werden.
- funktioniert nicht zusammen mit acon-Zugriffen, die nicht von
  a99 gestartet werden

Viele Grüße
Anando Eger



Lieber Herr Eversberg,

wir (Allers und Wolf) verwenden seit Jahren den Befehl

if use ... um zu verhindern, daß bestimmte Aktionen von den Nutzern
durchgeführt werden solange noch jemand zweites mit der Datenbank 
arbeitet.

Nun ist der Befehl if use ... gar nicht in der Flex-Doku enthalten.

Viele wichtiger ist aber: was genau prüft 'if use' ? 

Hintergrund: Ich habe ein etwas merkwürdig konstruiertes VPN-
Netzwerk
zwischen Rabat und Casablanca in Marokko und die allegro Datenbank 
ist immer
in Gebrauch.

Viele Grüße

Andreas Wolf

_______________________________________________
Allegro mailing list
Allegro at biblio.tu-bs.de
http://sunny5.biblio.etc.tu-bs.de/mailman/listinfo/allegro



Mehr Informationen über die Mailingliste Allegro