テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(writeboost report) ライトバックが正常に出来るかのテストケース

ライトブーストにバグが見つかった. バグを修正しなければ, あらゆるダーティデータが, 再起動後のwrite back時に消滅することとなる. 再起動後というのが味噌だ. 問題は, 再起動時にメタデータをディスクから読み込むとき, in-memoryのデータ構造をきちんと再現出来てしないことにある. 小さなバグだが, この機会にここら周りの実装を少し変更してもいいかなと思うので検討中である.

ところで, このバグは非常に見つかりにくい. しかし, 効果的に見つけ出す方法がある.

  1. キャッシュディスクを1GB用意して仮想ディスクを作る. 自動ライトバックは完全に止める.
  2. Rubyのアーカイブをコピーする.
  3. 仮想ディスクを削除して再度作る.
  4. 今度は自動ライトバックを積極的に行って, ダーティが全部マイグレートされるのを待つ. この時点でRubyアーカイブはbackingとページキャッシュに存在する(バグってたらなくなってしまうかも知れんが).
  5. ここで, ページキャッシュを全部落とす. 仮想デバイスのstatも落とす(clear_stat).
  6. Rubyアーカイブを読み出して(読み出せるか分からんが), 展開する. もしライトブーストのコードがバグってたらたぶん展開出来ない.

このテストは自動化出来る. testingに作ろうと思う. メタデータのディスクからの復元もテスト出来るので, 結構良いテストだと思う. dirtyの数はカウントしていて, dmsetup statusで見ることは出来るが, これをいちいちパースするのはめんどくさい(ジョーのテストと併せるために, Rubyのコードを何か書いても良いとは思う. 統合する上では, PythonよりRubyでコードを書いていくべきだろうとは思う. Statusクラスを作ってアクセスが簡単にしておくと, ホワイトボックステストが出来るような気がする). messageに, wait_for_all_migratedみたいなものを作っても良い気がする. この操作は結構使うから.