Q4M の DELETE (あるいはメッセージの消費) の実装について

rev. 32 の段階では行のヘッダを write -> fdatasync してるけどこれは良くない。理由は

  • fdatasync 中に他スレッドの read をブロックしてはいけない
    • rev. 30 で、このように実装
  • そうなると、DELETE の fdatasync が完了する以前に、他スレッドから削除完了したように見えてしまう

やっぱりいったんヘッダ (あるいは別ファイル) に削除予定の行リストをガリっと書いて、それをあとから適用するしかないっぽい。そのほうがパフォーマンスも上がるだろうし。なんか普通になってくなぁ。

追記: はっ。もしかして O_SYNC の誘惑? てか O_SYNC において、ディスク同期が完了するまでの間に他スレッドから読み込み要求が会った場合、どういう動作をするんだろう。