Hallo Zusammen,

heute Früh ist mit glatt noch eine Idee gekommen. Da gibts doch im 
Datenbankumfeld das Tripel "Anlegen-Ändern-Löschen". Anlegen und Ändern einer 
Lock-Datei habe ich bei meinen Locking-Versuchen schon versucht - wie 
berichtet - mit Fehlschlag. Aber da gibts doch noch "Löschen"... Also kleines 
Testprogramm geschrieben das auf dem Worker eine Datei löscht sobald sie 
auftaucht und der 'Lock' durch das Löschen der Lock-Datei ohne Fehlermeldung 
erlangt wird. Das ganze aber gleich in einer Endlosschleife ohne Wartepause um 
Kollisionen zu provozieren, Also das Testprogramm auf allen 3 Workern jeweils 
2x gestartet und geschaut was passiert wenn ich die "noch-nicht-gelockt"-Datei 
auf dem Server anlege. Meist haben beide Prozesse auf dem selben Worker 
reagiert, aber nur einer davon konnte die Datei fehlerfrei löschen. In 
seltenen Fällen schafften es unterschiedliche Worker die Datei zu erspähen aber 
auch nur einer konnte sie fehlerfrei löschen. Das heißt, Vortest erfolgreich 
abgeschlossen. Bei nächster Gelegenheit muß ich dann mal einen Massentest mit 
Realdaten machen. Wenn auch der fehlschlägt (wovon ich im Moment nicht 
ausgehe) habe ich immer noch die Möglichkeit auf eine SQL-basierte 
Signalisierung umzustellen was ich aber für diesen Einsatzzweck eigentlich 
vermeiden wollte.

Ich halt' euch auf dem Laufenden.

@Pit/Wolfgang/Steve:
Zum einen war die letzte "On-Topic"-Frage vom 13.06.2013 und zum anderen hatte 
ich doch die Hoffnung hier einen Samba-Experten anzutreffen der sich mit 
Locking 
schon mal rumgeschlagen hat. Ein bisserl hatte ich da speziell an 2 Personen 
gedacht, Pit du warst einer davon...


Viele Grüße,

Robert

Am Dienstag, 28. Januar 2014, 22:05:37 schrieb Robert Zimmermann:
> Hallo Zusammen,
> 
> beginnen wir die zahlreichen Diskussionen in dieser Mailingliste ( ;-) )
> für dieses Jahr mit einem nicht-trivialen Samba/CIFS-Problem mit File
> Locking. Warnung, lange Mail, sehr technik- und detaillastig.
> 
> Folgende Situation:
> 
> Server (Linux - Samba)
> I
> I- - - - Worker 1 (Linux - Share über CIFS gemountet)
> I
> I- - - - Worker 2 (Linux - Share über CIFS gemountet)
> I
> I- - - - Worker 3 (Linux - Share über CIFS gemountet)
> 
> 1) Der Server legt als "Arbeitsauftrag" im Share ein Verzeichnis mit allen
> benötigten Daten/Dateien an
> 2) Ein gerade "freier" Worker legt in einem Verzeichnis eine Lock-Datei an
> und reserviert sich somit diesen "Arbeitsauftrag"
> 3) Der Worker arbeitet den Arbeitsauftrag ab und stellt das Ergebnis in ein
> Ausgabeverzeichnis
> 4) Der Worker löscht das Verzeichnis vom "Arbeitsauftrag"
> 
> Das ganze funktioniert super - solange nicht mehrere Worker am gleichen
> Arbeitsauftrag arbeiten, was ja die Lock-Datei eigentlich verhindern
> sollte. Leider überschneidet sich bei den Workern manchmal die Zeit
> zwischen dem Überprüfen ob eine Lock-Datei vorhanden ist und dem Anlegen
> der Lock-Datei. Auf den Workern läuft die mount-option "forcedirectio"
> damit der CIFS-Client die Dateioperationen nicht cachen sollte.
> Um ein sauberes Locking zu realisieren kennt ein Betriebssystem netterweise
> diverse Locking-Mechanismen. Dazu hätte ich auf dem Worker versucht per
> "flock" einen Exclusive Lock auf die Lock-Datei zu setzen. Das hat auch
> einwandfrei funktioniert - aber leider haben ab und zu immer noch mehrere
> Worker am selben Arbeitsauftrag gearbeitet was ja eigentlich verhindert
> werden sollte. In dem Zusammenhang habe ich festgestellt, daß der
> Exclusive Lock auf dem Worker korrekt gesetzt wurde (auf dem selben Worker
> konnte nichts anderes mehr auf die Lock-Datei zugreifen), der Lock wurde
> aber leider nicht über CIFS an Samba durchgereicht.
> 
> Und jetzt ging die große Googelei los. Soweit ich es verstanden habe kennt
> Samba mehrere Locking-Mechanismen:
> - Opportunistic Locking (Oplocks): halbschaurige vermurkste Locks die nur
> Windows-Clients kennen (aber meist sehr performant sind)
> - Deny Modes: die könnten das machen aber wie spreche ich das von Linux aus
> über CIFS an?
> - Byte Range Locking: das scheint mir das zu den Linux-Locks das ähnlichste
> zu sein
> 
> Es gibt im Internet zahlreiche Dokus _welche_ Locking-Mechnismen es Samba-
> seitig gibt und wie man sie verkonfiguriert, was ich aber leider überhaupt
> nicht gefunden habe, welche davon der CIFS-Client unter Linux wirklich
> unterstützt, welche Features dazu Server- und Clientseitig (Samba- und
> CIFS- seitig) aktiviert sein müssen (Unix-Extensions habe ich z.B.
> Samba-seitig deaktiviert was Posix Locks verhindert, aber ist das das
> selbe wie Byte Range Locking bzw. läuft Byte Range Locking über Posix
> Locking?) und wie man Programmiertechnisch die im CIFS-Client
> implementierten Locking-Mechanismen ansprechen kann. Idealerweise wäre das
> sowas wie [Client] "flock" -> Linux-Lock -> CIFS -> Samba und kein anderer
> Worker kann über CIFS auf die Lock-Datei zugreifen.
> 
> Kann mich hier netterweise irgendwer aufs richtige Gleis setzen wie ich
> über Samba/CIFS ein sauberes Locking hinkriege? Auf jeden Fall vorab schon
> mal besten Dank!
> 
> 
> Viele Grüße und noch einen schönen Abend,
> 
> Robert
> _______________________________________________
> lug-ts mailing list
> [email protected]
> http://www.lug-ts.de/mailman/listinfo/lug-ts

_______________________________________________
lug-ts mailing list
[email protected]
http://www.lug-ts.de/mailman/listinfo/lug-ts

Antwort per Email an