2008/05/17

NFS + FreeBSD で Subversion を使うときには、1.5.0 以降を利用しよう

Subversion のリポジトリをNFSサーバ上に置き、その領域を FreeBSD から mount して使う場合、1.4.x の Subversion が では問題が起きる場合があります。

具体的には、
  • Subversion のリポジトリが NFS サーバ上にあり、FreeBSD からは mount_nfs している。
  • mount_nfs をしている FreeBSD には、Subversion 1.4.x 以前がインストールされている。
  • 適当なクライアント(バージョン/OSは問わない)から、一定個数以上のファイルを commit する(schemeは、file、svn+ssh、httpを問わない)。
という条件がそろうと、
svn: Can't remove 'db/transactions/1-1.txn': Directory not empty 
というエラーメッセージが表示され、commit が fail してしまうことがあります。実際には commit 自体は成功し、ファイルの後片付けに失敗しているだけなのですが、ディレクトリ使用量が無駄に増加します (^^;。

原因は、FreeBSD の getdirentries(2) が、open されているディレクトリ内のエントリが削除された場合、それを上手くハンドリングできないためです。

この現象は、当初MacOS X上の問題として報告され、MacOS Xでのみ対策が施されました。

その後、同じ問題がFreeBSDでも発生することが報告され、それを受け、r20459では、修正範囲がOS非依存の形式へと拡張されました。但し、残念ながら、この修正は、当時の trunk へのみ commit されており、1.4.xには反映されていません。

幸いにして、上記修正の取り込まれたSubversion 1.5.0のリリースが間近に迫っています。もし上記現象で困っている場合には、1.5.0の利用を試してみてはいかがでしょうか?

0 件のコメント:

コメントを投稿