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

YAMASAKI Hiroyuki yamasaki.hiroyuki @ sp.qnes.nec.co.jp
2009年 3月 5日 (木) 22:09:31 JST


山崎と申します。

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

>このあたりの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



samba-jp メーリングリストの案内