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

Antwort per Email an