2015-06-06 20 views
8

Sử dụng C, chạy dưới Linux, tôi đang cố gắng tìm ra cách để có 2 quy trình khác nhau truy cập cùng một tệp nằm trên hệ thống tệp NFSv4. Cụ thể, tôi muốn có một chương trình fopen một tập tin để đọc, và có một chương trình thứ hai fopen các tập tin để viết. Tôi đang có ý định sử dụng EFS mới (Elastic File System) từ AWS, và EFS chỉ là NFSv4.Truy cập tập tin đồng thời trong linux nfsv4 c

Bản chất của các chương trình là như vậy mà người viết sẽ, về bản chất, chỉ phụ thêm vào tệp. Người đọc sẽ không bao giờ truy cập thông tin mới được thêm vào cho đến khi người viết hoàn thành và gọi fflush.

NFSv4 có hỗ trợ trường hợp này không?

Hoặc có cách nào tốt hơn để đạt được quyền truy cập tệp NFSv4 đồng thời không?

+0

* NFSv4 có hỗ trợ kịch bản này không? * Tôi không biết. Tại sao không sử dụng bộ nhớ dùng chung với [ipcs] (http://en.wikipedia.org/wiki/Ipcs)? –

+0

@ElliottFrisch: Tôi có thể sử dụng bộ nhớ chia sẻ với ipcs, nhưng có một lượng lớn dữ liệu (> 500 terabyte) trong một số lượng lớn tệp (> 40 triệu). Và phát triển. – PaeneInsula

+0

Sau đó, có vẻ như bạn nên xem [HDFS] (https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Overview). –

Trả lời

2

NFS v4 làm nhiều khóa hỗ trợ byte trên các tập tin (như được nêu trong đoạn trích này từ RFC 3530 "NFS version 4 protocol"):

1.4.5. Khóa tệp

Với giao thức NFS phiên bản 4, hỗ trợ khóa tệp byte phạm vi là một phần của giao thức NFS. Hỗ trợ khóa tệp được cấu trúc sao cho không yêu cầu cơ chế gọi lại RPC. Đây là sự khởi đầu từ các phiên bản trước của giao thức khóa tệp NFS, Trình quản lý khóa mạng (NLM). Trạng thái kết hợp với khóa tệp được duy trì tại máy chủ theo mô hình dựa trên hợp đồng thuê. Máy chủ định nghĩa một khoảng thời gian thuê cho tất cả các trạng thái được giữ bởi một máy khách NFS. Nếu khách hàng không gia hạn hợp đồng thuê của mình trong khoảng thời gian được xác định, tất cả các tiểu bang liên quan đến việc cho thuê của khách hàng có thể được máy chủ phát hành. Khách hàng có thể gia hạn hợp đồng thuê với việc sử dụng hoạt động RENEW hoặc ngầm sử dụng các hoạt động khác (chủ yếu là READ).

Tham khảo mục 8 của cùng RFC để biết thêm chi tiết về khóa và mô hình dựa trên hợp đồng thuê.

Chương trình của bạn sẽ cần sử dụng fcntl để quản lý khóa. Lời khuyên của tôi là viết một bài kiểm tra để kiểm tra xem việc thực thi NFS v4 thực tế được cung cấp bởi EFS có hỗ trợ khóa như mong đợi hay không (một số khía cạnh là tùy chọn trong đặc tả). Bạn có thể tham khảo mã nguồn của this lock testing suite, hỗ trợ kiểm tra nhiều khách hàng.

Các vấn đề liên quan