Ed X: Was passiert bei flock() und http-Zugriff?

Hi,

da ich gerade dabei bin ein nicht DB-gestütztes Forum zu programmieren
und die Dateizugriffe mit flock() abzufangen, frage ich mich gerade,
was passiert eigentlich bei einem exklisiven Filelock und einem http-
Zugriff. Normalerweise würde es der Server wieder versuchen und sicher
auch irgendwie eine "Lücke" abpassen. Aber angenommen der (eher) hypo-
thetische Fall, der Filelock würde länger anhalten, was bekomme ich
dann? Server-Timeout, 404....
ist nur interssehalber.

bye eddie

  1. hallo eddie,

    je nachdem - warum probierst Du es nicht einfach mal mit einem CGI aus, das nach dem HTTP-Header enfach nur ein ein "sleep 600" enthält(oder wie lange der Teimeout bei deinem Server auch immer eingestellt ist).

    Grüße
       K@rl

  2. Hallo,

    da ich gerade dabei bin ein nicht DB-gestütztes Forum zu programmieren
    und die Dateizugriffe mit flock() abzufangen, frage ich mich gerade,
    was passiert eigentlich bei einem exklisiven Filelock und einem http-
    Zugriff. Normalerweise würde es der Server wieder versuchen und sicher
    auch irgendwie eine "Lücke" abpassen. Aber angenommen der (eher) hypo-
    thetische Fall, der Filelock würde länger anhalten, was bekomme ich
    dann? Server-Timeout, 404....

    Diese Frage kann so nicht gestellt werden. Einen Server-Timeout wirst Du hier nicht so schnell bekommen. TCP/IP ist verbindungsorientiert und streamfähig. Das hat nichts mit einem Filelock zu tun, das ist eine andere Sache. Realtimefähigkeit erlangst Du eh nur via UDP, aber auch da ist die Sache mit dem Filelock eine andere Geschichte. Angenommen die Verbindung steht, da gepuffert, und das File ist geblockt (intern, der Verbindung egal), dann lautet die Frage "Wie lange dauern die Versuche für einen Zugriff auf eine blockierte Datei an?". Nun... das kann ich Dir nicht beantworten... leider *1 ... die Verbindung sollte jedenfalls nach dem Fehlschlagen gekappt werden, sprich ein Gelingen bzw. nicht Gelingen des Öffnens einer Datei ist gesichert, die Verbindung via TCP/IP auch, da davon unabhängig.

    micha

    *1) Es ist mir nicht bekannt, dass dafür (Öffnen einer Datei) Zeitangaben gesetzt werden können. Die Teilung von Resourcen ist imho von deren Verfügbarkeit (Datei) unabhängig, spricht das Progi hängt für die Zeit, in der auf die entspr. Res. nicht zugegriffen werden kann. (So ist jedenfalls meine Erfahrung)

    1. Hi,

      Jo, danke erstmal. Ich kanns nur leider erstmal nicht ausprobieren,
      da mein lokaler Apache das Kriegsbeil ausgegraben hat. Argghhh...

      Dank auch an K@rl.

      bye eddie

  3. hi!

    da ich gerade dabei bin ein nicht DB-gestütztes Forum zu
    programmieren und die Dateizugriffe mit flock() abzufangen, frage
    ich mich gerade, was passiert eigentlich bei einem exklisiven
    Filelock und einem http-Zugriff. Normalerweise würde es der Server
    wieder versuchen und sicher auch irgendwie eine "Lücke" abpassen.
    Aber angenommen der (eher) hypothetische Fall, der Filelock würde
    länger anhalten, was bekomme ich dann? Server-Timeout, 404....

    Also wenn du flock() verwendest, das wartet bei einer gelockten Datei
    IMHO bis sie wieder frei ist. In dem Fall würde es wohl irgendwann
    zu einem Time-Out kommen -- entweder auf seiten des Servers oder des
    Clients, weil ja nicht passiert.

    Daher verwenden wir hier im Forum zum Locken von Dateien auch kein
    flock(), sondern ein eigens dafür entwickeltes Locking-Modul: das
    versucht eine betimmte Zeit lang und mehrmals hintereinander eine
    Datei zu locken; wenn das nicht klappt, bekommt der Benutzer hier
    im Forum irgendwann eine Fehlermeldung, dass er es in ein paar
    Minuten noch mal versuchen soll -- ist dir vielleicht auch schon mal
    passiert... ;)

    Falls es dich interessiert, den Source des hier verwendeten Locking-
    Modules findest du im CVS Repository bei Sourceforge:
      http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/selfforum/selfforum-cgi/shared/Lock.pm?rev=1.12&content-type=text/vnd.viewcvs-markup
    und das zugehörige Verzeichnis
      http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/selfforum/selfforum-cgi/shared/Lock/

    bye, Frank!