テストステ論

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

(writeboost report) dm-cacheのtableはバグってるとのこと

最近, ライトブーストのctrとtableの実装について非常に悩んでいる. 真の意味で正しいソフトウェアを書くというのは, 簡単なことではない. 骨だ. 一連の議論を紹介する.

http://akiradeveloper.hatenadiary.com/entry/2013/11/23/121525

において,

加えて, 以下のような問題も生む. ctrで設定されたチューニングがのちに動的に変更された場合, tableからの出力はこれを反映すべきか?dm-cacheは, していないように思う. 現在の値はstatusで得られるが, これは必ずしもtableとは同一でない. そんなアホな設計があるか!と思うのだが... tableはあくまでも初期化時の保存であるという考え方なのだろうか?

と書いた. ライトブーストのtable設計がよくわからないので, ジョーに質問した(http://www.redhat.com/archives/dm-devel/2013-November/msg00149.html). こういうユーザインターフェイスを本当に正しく実装するのは, 多くの考察が必要になる. とても難しいところだ. プラグインの開発者がこうやって問題提起をしていくことによって, フレームワークは洗練されていく. コミュニティ活動の価値はここにもある.

要点は,

  • ctr_argsを保存してそのままtableで返すのはactual valueとinconsistentじゃない?
  • もしその設計が正しいのであれば, フレームワーク側で実装すればいいだろJK

一つ目の質問に関するジョーの回答は「それはバグだ」であった(http://www.redhat.com/archives/dm-devel/2013-November/msg00150.html). 二つ目の質問に関しては, 「以前に検討したことがある. しかし色々な理由で難しい」ということである.

私はすかさず, 「では, tableが満たす性質は〜〜なのか?」という質問をした(http://www.redhat.com/archives/dm-devel/2013-November/msg00184.html).

すると今度はカーゴンから返事がきた(http://www.redhat.com/archives/dm-devel/2013-November/msg00185.html). カーゴンの英語はいつも難解だが, 言ってることは以下である.

  • 要件はそれだけない.
  • とあるユーザランドツールは, 何かtable line inputをreloadしようとするとき, それが本当にreloadされるべきか, table outputとの文字列比較によって判定するというバカな実装をしている.
  • 従って, 何か内部状態に基づくtable line outputはユニークである必要がある. table line input以外に(例えばmessageのようなもので)内部状態を変化させることが出来る場合は特にである.
  • これは以下の2つを意味する.
    • unordered listで提供されるarbitraryなオプションなどについて, inputしたものを覚えておき, outputする.
    • or, (ふつうこっちの方がいいけど) outputは常に(inputのいかんによらず), スタンダードなフォーマットで出力される(例えば, unorderedなinputはorderedで出力される). こうすることによって, ユーザランドツールがフォーマットの定義を知っているとするとこれを解釈することが出来, 今から入力しようとしているtable lineと等価のものであるか判定が出来る(そんなことしなくても出来るような気がするけど, なぜかそう言ってる). しかし, カジュアルなユーザはこのような任意の制約には従わないね.

ここまで踏まえると, ライトブーストは, とにかく出力フォーマットを決めた上で出力すればいいと分かる. もともとそうする気だし,そうすることが自然となるようにctrを実装している. 自然な設計だと思うし受け入れられるだろうと思う. 議論をした形跡を残しておくことも, あざといが, 理解をしているということを示す上では重要だ.


私が提案したいのは, .equalメソッドの追加. これは文字列をとって, 現在のテーブルを等価であるか判定する. この手の話は, ターゲットが実装した方がいい. デフォルトの動作としては, tableの文字列比較で出来る. ターゲットによる実装は任意とすればいい. とりあえず提案してみようと思う. 実装案を示した方がいいかも知れない.