2009年3月 5日

[samba-jp:20596] Re:Vista オフラインファイルでのおかしな動作 Samba がらみ


山崎と申します。

すみません、見落としていました。

>このあたりのlockの仕組みをよく知らないのですが、
>kernel oplockを無効にした場合の弊害はなんでしょうか。
>samba経由でlock中のファイルをUNIX側の他のソフトからいじったりしたとき、

>問題が発生するでしょうか。

先にCIFSがファイルを開いていて、後からNFS側から同じファイルをオープンし、両方から
読み書きしてもファイルが壊れないようにするには、以下のような処理が必要なはずです。
-----------------------------------------------------------------------------------------
(1)NFSからオープンする契機で、もしCIFSクライアントがoplockを持っていたら、
  CIFSクライアントのキャッシュのフラッシュ(キャッシュされていたレコードロックもサーバに
  コピー)。今後はクライアントキャッシュは無効化。(=oplock break)

*かつ*

(2)NFS側とCIFS側のアプリケーション間で協調して何らかの適切なロックを行う。
-----------------------------------------------------------------------------------------

kernel oplockで実現できるのは、上記(1)だけです。
(2)は、別途必要です。

よって、

>kernel oplockを無効にした場合の弊害はなんでしょうか。

の答えは、(2)の処理が存在するかどうか変わってきます。

(2)が存在する場合:元々ファイルが壊れない環境だったのに、ファイルが壊れるようになる。
(2)が存在しない場合:元々ファイルが壊れる環境だったが、より一層壊れやすくなる。

という感じです。

* * *

余談ですが、「oplock」は命名が非常に悪いです。「名が体を表す」の真逆です。
oplockは、全くロックではありません。
同様に、「level2 oplock」の「level2」や「oplock break」の「break」も意味がわかりづらい
です。色々な命名の悪さが、oplockを理解しづらくしている原因だと思います。

oplockが若干ロックのような挙動をする部分は、上記(1)の処理を行う期間、NFS側のオープン処理
をしばらく待たせることができる点だけです。注意が必要なのは、オープンを *待たせる* ことが
できるだけで、*拒否* はできません。一定時間でタイムアウトしてオープンが強行されてしまい
ます。よって、やはりロックではありません。

NFSv4にもoplockと似た機能があるのですが、そちらの命名の方がずっとわかりやすいです。
以下のような対応です。(NFSv4はあまりよく知らないので間違ってたらすみません)

================= =================
CIFS NFSv4
================= =================
oplock delegation
oplock break callback
exclusive oplock write delegation
level2 oplock read delegation
================= =================

NFSv4もパッと見で理解できるとはいえませんが、少なくともCIFSのように「lock」という理解
を妨げる単語が入っていないだけでもマシです。

もしかすると、oplockの理解をするには、NFSv4のdelegationの説明を見るほうがいいかも
しれません。NFSv4の良い日本語の文書の有無を知らないのですが、以下の文書の
「委譲によるクライアント側キャッシング」を読むと、どういう挙動をするのかわかるかも
しれません。

NFSバージョン4の新機能
http://www.netapp.jp/techontap/newsletter/0805/nfs4.html


投稿者 xml-rpc : 2009年3月 5日 22:09
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/82803
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。