2015-06-06 15 views
8

Mit C, läuft unter Linux, ich versuche herauszufinden, wie 2 verschiedene Prozesse Zugriff auf die gleiche Datei in einem NFSv4-Dateisystem haben. Insbesondere möchte ich, dass ein Programm eine Datei zum Lesen öffnet und ein zweites Programm die Datei zum Schreiben öffnet. Ich beabsichtige, das neue EFS (Elastic File System) von AWS zu verwenden, und EFS ist nur NFSv4.Concurrent-Dateizugriff in nfsv4 linux c

Die Art der Programme ist so, dass der Schreiber im Wesentlichen nur an die Datei anhängen wird. Der Leser wird niemals auf die neu angehängten Informationen zugreifen, bis der Schreiber fertig ist und fflush aufgerufen hat.

Unterstützt NFSv4 dieses Szenario?

Oder gibt es insgesamt eine bessere Möglichkeit, einen solchen NFSv4-Dateizugriff zu erreichen?

+0

* Unterstützt NFSv4 dieses Szenario? * Ich habe keine Ahnung. Warum verwenden Sie nicht gemeinsam genutzten Speicher mit [ipcs] (http://en.wikipedia.org/wiki/Ipcs)? –

+0

@ElliottFrisch: Ich könnte Shared Memory mit ipcs verwenden, aber es gibt eine riesige Menge an Daten (> 500 Terabyte) in einer riesigen Anzahl von Dateien (> 40 Millionen). Und wächst. – PaeneInsula

+0

Dann klingt es so, als müssten Sie sich [HDFS] ansehen (https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Overview). –

Antwort

2

NFS v4 tut Unterstützung Bytebereich Verriegelungs auf Dateien (wie von RFC 3530 "NFS version 4 protocol" in diesem Auszug umrandet):

1.4.5. Dateiverriegelung

Mit dem NFS Version 4-Protokoll ist die Unterstützung für das Sperren von Bytebereichsdateien Teil des NFS-Protokolls. Die Dateisperrungsunterstützung ist so strukturiert, dass ein RPC-Rückrufmechanismus nicht erforderlich ist. Dies ist eine Abkehr von den früheren Versionen des NFS-Dateisperrprotokolls Network Lock Manager (NLM). Der Status der Dateisperren wird auf dem Server unter einem lease-basierten Modell verwaltet. Der Server definiert einen einzigen Leasingzeitraum für alle von einem NFS-Client gehaltenen Status. Wenn der Client seinen Leasingvertrag nicht innerhalb des festgelegten Zeitraums erneuert, kann der Zustand, der mit dem Lease des Clients verknüpft ist, vom Server freigegeben werden. Der Kunde kann seinen Vertrag unter Verwendung des Vorgangs RENEW oder implizit durch Verwendung anderer Vorgänge verlängern (in erster Linie).

Weitere Informationen zum Sperren und zum lease-basierten Modell finden Sie in Abschnitt 8 desselben RFC.

Ihr Programm muss fcntl verwenden, um die Sperrung zu verwalten. Mein Rat ist, einen Test zu schreiben, um zu überprüfen, ob die tatsächliche Implementierung von NFS v4 von EFS das Sperren wie erwartet unterstützt (einige Aspekte sind in der Spezifikation optional). Sie können auf den Quellcode this lock testing suite verweisen, der Multi-Client-Tests unterstützt.