Skip to content

[P1] TxExecutorコントラクトをC++20 conceptで明示する #31

@thawk105

Description

@thawk105

親イシュー: #29
依存: #30 (P0)

概要

CLAUDE.md には各プロトコルの TxExecutor が実装すべきAPIが記載されているが、コード上の強制が一切ない。scan(..., int64_t limit) 実装漏れによるTPC-Cランタイムクラッシュや、Status::WARN_NOT_FOUND 時の未初期化ポインタ参照など、コンパイル時に捕捉できたはずのバグが過去に発生している。

やること

  • include/tx_executor_concept.hhTxExecutorLike concept を定義する
template <class T>
concept TxExecutorLike = requires(T t, Storage s, std::string_view k, TupleBody** b) {
    { t.read(s, k, b) } -> std::same_as<Status>;
    { t.write(s, k, std::declval<TupleBody&&>()) } -> std::same_as<Status>;
    { t.insert(s, k, std::declval<TupleBody&&>()) } -> std::same_as<Status>;
    { t.delete_record(s, k) } -> std::same_as<Status>;
    { t.scan(s, k, false, k, false,
        std::declval<std::vector<TupleBody*>&>()) } -> std::same_as<Status>;
    { t.scan(s, k, false, k, false,
        std::declval<std::vector<TupleBody*>&>(), int64_t{}) } -> std::same_as<Status>;
    { t.commit() } -> std::same_as<bool>;
    { t.abort() } -> std::same_as<void>;
};
  • ワークロードテンプレートの型パラメータを <TxExecutorLike Tx, ...> に変更する
  • 全プロトコルの TxExecutor が concept を満たすことを確認する
  • 以前なら scan(..., int64_t limit) の実装漏れが居たプロトコル(ss2pl, d2pl, mvto, si等)の実装を椚認する
  • CLAUDE.md の「注意点」リストから concept で夜える項目を削除/簡素化する

完了条件

  • scan(..., int64_t limit) の実装漏れがあるプロトコルはコンパイルエラーになること
  • 全プロトコルのビルドが通ること
  • CI が通ること

備考

  • P6(分離レベルチェッカー)と近住のタスクで、組み合わせると効果的

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions