可動実験として commit を試してみたところ、
svn: Can't get exclusive lock on file '/foo/bar/reps/db/transactions/0-1.txn/rev-lock': Operation not supported
というメッセージが。しばし、悩んでしまいました。原因は、FreeBSD側で lockd/statd をあげていなかったこと。今まで、この NFS サーバは、暫定的試用でしか使っていなかったため、設定が漏れていたようです。うーん、間抜けだ。lockd に頼るのは危険、とは分かっていますが、意味なく完全 disable はマズイでしょう...。
/etc/rc.conf に
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
と書いたところ、無事 commit 出来るようになりました。良かった、良かった。ちなみに FreeBSD で、該当ファイルシステム上に exclusivelock 付きのファイルが作れるかどうかは、lockf(1) を使うのが簡単です。
lockf(1) では、open(2) にO_EXLOCK つけて lock の確認を行っています(rev 1.11.8.1)。apr-1.2.8 では、HAVE_FCNTL_H がenable されていれば、exclusive lock は fcntl(2) の F_WRLCKで行いますから、結果、同じになる、というわけです。
例えば上の状況だと、
% cd /foo/bar
% lockf foo test
lockf: cannot open foo: Operation not supported
という感じになりますから、あぁ、lockd 問題か、と簡単に気がつくことが出来ました。便利便利。
0 件のコメント:
コメントを投稿