ロックしない操作による問題
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/06/05 08:00 UTC 版)
「Maildir」の記事における「ロックしない操作による問題」の解説
ダニエル・バーンスタインは、たとえNFS上でも、複数のプロセスがロックせずに同時に書き込もうとしても大丈夫なようにMaildirを設計した。大抵の場合、これがうまく機能しているが、バーンスタインはファイルシステムの実装上の制限を考慮していなかった。ディレクトリをプロセスが読み込む場合 readdir() を使うが、これは一度に全体を読み込むわけではなく、ディレクトリエントリ毎に読み込む。このため一連の readdir() でディレクトリを読み取っている最中に別のプロセスがファイル名の変更を行った場合、タイミングによってはそのファイルのエントリが読み取れないことがある。これは例えば受信メールの一覧を表示させたときにメッセージが消えたように見えることになる(実際にはフラグを付加していただけである)。そして、もう一度一覧表示させると、消えたはずのメッセージが再度出現する。このような問題を回避するため、Maildirのトップを独自にロックする方式を採用しているものもある。例えば、DovecotはMaildirに対して独自のロック機構を使っている。 macOSのHFS Plus(ZFSではない)では、この問題が起きないように見える[要出典]。Linuxの場合、inotifyでMaildirの変化を監視することで問題を防ぐことができる。例えば、readdirを行った後で、inotifyで新たなファイルが追加されていないかを調べればよい[要出典]。
※この「ロックしない操作による問題」の解説は、「Maildir」の解説の一部です。
「ロックしない操作による問題」を含む「Maildir」の記事については、「Maildir」の概要を参照ください。
- ロックしない操作による問題のページへのリンク