Skip to content

[index] index/ ディレクトリへの masstree_wrapper 移設とインデックスエイリアス層の導入 #88

Description

@thawk105

親イシュー: #27 / #27「MasstreeWrapper をトップレベルの index/ ディレクトリに移動する」を分割したうちの 1 つ (旧ステップ1+2)。

目的

全 CC プロトコルが include/masstree_wrapper.hhMasstreeWrapper<Tuple> をハードコードしている現状を、トップレベル index/ ディレクトリに移し、薄いエイリアス層 DefaultIndex<T> を挟む。第2インデックス (yakushima, #89) を切り替え可能にするための地ならし。API 変更・パフォーマンス影響なし。

現状 (2026-05-15 検証済み)

  • include/masstree_wrapper.hhMasstreeWrapper<Tuple> (テンプレートクラス、struct insert_info_t を内包)。index/ ディレクトリは存在しない。
  • MasstreeWrapper を直接名指ししているファイルは cc/<protocol>/ 配下 (cicada/d2pl/ermia/mocc/mvto/oze/si/silo/ss2pl/tictoc の common.hh / util.cc / 各ワークロード .cc / transaction.cc 等) と include/ 配下 (bomb.hh bomb_pessimistic.hh workload.hh ycsb.hh tpcc/tpcc_initializer.hh tpcc/tpcc_tx_payment.hh)。
    • 注: 旧 cc_format/ (新プロトコルテンプレート) と cc/occ/ は master 上で削除済みのため対象外。
  • masstree 固有の概念が漏れているのは 7 プロトコル (cicada / ermia / mocc / oze / si / silo / tictoc):
    • cc/<p>/include/scan_callback.hhMasstreeWrapper<Tuple>::ScanCallback を継承、on_resp_node(const MasstreeWrapper<Tuple>::node_type*, uint64_t) を実装。
    • cc/<p>/include/transaction.hhstd::unordered_map<void*, uint64_t> node_map_ を tx ローカルに保持。
    • cc/<p>/transaction.ccinsert_info_t を受け取りコミット時に node_map_ を再検証。
    • d2pl / mvto / ss2pl は MasstreeWrapper の基本 API は使うが node-version phantom 回避は使っていない (scan_callback.hh / node_map_ なし)。
  • C++20 (cmake/CompileOptions.cmakeCMAKE_CXX_STANDARD 20)。
  • masstree は git submodule (third_party/masstree = thawk105/masstree-beta)。build_tools/bootstrap.shlibkohler_masstree_json.a を生成し、CMakeLists.txt:39-41ccbench::masstree IMPORTED ターゲット経由で cmake/ProtocolHelpers.cmake が各プロトコルにリンク。
  • CCBENCH_INDEX / DefaultIndex / index/index.hh はいずれも未存在。

やること

フェーズ1: ファイル移動のみ (低リスク・約1時間)

  • include/masstree_wrapper.hhindex/masstree/wrapper.hh
  • 全ての #include "masstree_wrapper.hh" パスを更新 (cc/ 配下・include/ 配下)。
  • include ディレクトリ設定 (cmake/ProtocolHelpers.cmake 等) に index/ を追加。
  • index/README.md を追加してディレクトリの意図 (プロトコルが選択できるインデックス層、デフォルト masstree、将来 yakushima) を宣言。
  • API 変更なし・パフォーマンス影響なし。全プロトコルのビルドが通ることを確認。

フェーズ2: 薄いエイリアス層 (中リスク・約半日)

  • index/index.hh を追加し DefaultIndex<T> (= MasstreeWrapper<T> の alias) を公開。
  • 各プロトコルの MasstreeWrapper<Tuple> 直書きを DefaultIndex<Tuple> に置換。
  • -DCCBENCH_INDEX=masstree を cmake オプションとして用意 (この時点では masstree のみ。値の検証と DefaultIndex の解決だけ)。
  • 7 プロトコルの scan_callback.hh / transaction.hh がまだ MasstreeWrapper<Tuple>::node_type / ::ScanCallback / insert_info_t を直接名指ししているので、DefaultIndex<T>::node_type 等の typedef 経由に寄せる ([index] インデックス層の真の抽象化(C++20 concept IndexConcept / PhantomStrategy) #90 concept 化の地ならし)。

スコープ外

リスク / 注意

  • 編集ファイル種別の規約は docs/coding-conventions_ja.md を参照 (CMake / C++)。
  • #include パス更新漏れがあるとビルドエラー。grep で masstree_wrapper を網羅的に潰す。

完了条件

  • index/masstree/wrapper.hhindex/index.hh index/README.md が存在。
  • include/masstree_wrapper.hh が消えている。
  • 全プロトコルがビルド・テスト通過、性能影響なし。
  • プロトコルコードが DefaultIndex<Tuple> 経由でインデックスを参照している。

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