読者です 読者をやめる 読者になる 読者になる

テストステ論

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

(writeboost report) dm-flakeyがバグっとる

ライトブーストについてよく聞かれるのは「ディスクが壊れたらどういう挙動になるのか?」だ.

ちょっと前までは, それ以上の損害をなくすために閉塞させていた. 閉塞というのは, 言ってみればSSDもHDDも/dev/nullのようなものにすげ替えてしまい, それ以上本チャンのディスクに副作用が行かないようにすることだ. (もちろんそれはあくまでも概念的なことであり, 実装上は内部的に閉塞させる仕組みを実装していた) しかしこれは評判が悪かった. これをやると, dmsetup removeが出来なくなるというのだ.

そこで, ディスクがエラーを起こしても, エラーを起こしたなりに上位にデータを返すということにした. つまり, ライトブーストとしてはSSDやHDDがEIOを返したら, 上位にもEIOですと言ってあげるということだ. この方が挙動としてはよりsaneであるように思う.

では本当にそうなっているのか?ということを確かめる. ここで使うのがdm-flakeyだ. dm-flakeyは

(writeboost report) dm-flakeyを使ってみる - テストステ論

で紹介したように, ディスクが正常に動いたり壊れたように動いたりをエミュレートすることが出来る. これを障害注入(Fault Injection)という. なかなか起こり得ないケースに対していかにしてテストを書くかに対する解法の1つである.

これを使ってwriteboost-test-suiteにテストを書いたみたのだが, dm-flakeyがreadのエラーを返してないように見える.

ソースコードを読んでみると, どうもEIOを返すべきところでそうなっていないのがやばいという結論にいたり,

[dm-devel] dm-flakey NOT to return -EIO on READ?

間違ってんじゃねーか?直そうか?というメールを書いた.

すると, Lukasなるものから「それ間違っとるね. パッチを書いたった」とメールが返ってきた. LukasはRHチェコの人らしい. チェコというとMikulasもそうだ. チェコは世界一美しい街らしい. そんなチェコに住みながらRHでコードを書けるなんて, リア充すぎる. おれもチェコに住みたい住みたい!!!

https://www.redhat.com/archives/dm-devel/2016-July/msg00090.html

ほう・・おれがパッチを書く機会を失ったかファック・・・・. ということで, 再現テストを書いたったといいつつ, ちゃっかりwriteboost-test-suiteの宣伝をする作戦に出た. おれとしては, writeboost-test-suiteがDMのテストを書くためにどれだけ優れているかをナチュラルに主張出来れば十分だ.

https://www.redhat.com/archives/dm-devel/2016-July/msg00092.html