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> 経由でインデックスを参照している。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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