親イシュー: #27 / #27 「MasstreeWrapper をトップレベルの index/ ディレクトリに移動する」を分割したうちの 1 つ (旧ステップ1+2)。
目的
全 CC プロトコルが include/masstree_wrapper.hh の MasstreeWrapper<Tuple> をハードコードしている現状を、トップレベル index/ ディレクトリに移し、薄いエイリアス層 DefaultIndex<T> を挟む。第2インデックス (yakushima, #89 ) を切り替え可能にするための地ならし。API 変更・パフォーマンス影響なし。
現状 (2026-05-15 検証済み)
include/masstree_wrapper.hh に MasstreeWrapper<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.hh — MasstreeWrapper<Tuple>::ScanCallback を継承、on_resp_node(const MasstreeWrapper<Tuple>::node_type*, uint64_t) を実装。
cc/<p>/include/transaction.hh — std::unordered_map<void*, uint64_t> node_map_ を tx ローカルに保持。
cc/<p>/transaction.cc — insert_info_t を受け取りコミット時に node_map_ を再検証。
d2pl / mvto / ss2pl は MasstreeWrapper の基本 API は使うが node-version phantom 回避は使っていない (scan_callback.hh / node_map_ なし)。
C++20 (cmake/CompileOptions.cmake で CMAKE_CXX_STANDARD 20)。
masstree は git submodule (third_party/masstree = thawk105/masstree-beta)。build_tools/bootstrap.sh が libkohler_masstree_json.a を生成し、CMakeLists.txt:39-41 の ccbench::masstree IMPORTED ターゲット経由で cmake/ProtocolHelpers.cmake が各プロトコルにリンク。
CCBENCH_INDEX / DefaultIndex / index/index.hh はいずれも未存在。
やること
フェーズ1: ファイル移動のみ (低リスク・約1時間)
include/masstree_wrapper.hh → index/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.hh と index/index.hh index/README.md が存在。
include/masstree_wrapper.hh が消えている。
全プロトコルがビルド・テスト通過、性能影響なし。
プロトコルコードが DefaultIndex<Tuple> 経由でインデックスを参照している。
親イシュー: #27 / #27「MasstreeWrapper をトップレベルの index/ ディレクトリに移動する」を分割したうちの 1 つ (旧ステップ1+2)。
目的
全 CC プロトコルが
include/masstree_wrapper.hhのMasstreeWrapper<Tuple>をハードコードしている現状を、トップレベルindex/ディレクトリに移し、薄いエイリアス層DefaultIndex<T>を挟む。第2インデックス (yakushima, #89) を切り替え可能にするための地ならし。API 変更・パフォーマンス影響なし。現状 (2026-05-15 検証済み)
include/masstree_wrapper.hhにMasstreeWrapper<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.hhbomb_pessimistic.hhworkload.hhycsb.hhtpcc/tpcc_initializer.hhtpcc/tpcc_tx_payment.hh)。cc_format/(新プロトコルテンプレート) とcc/occ/は master 上で削除済みのため対象外。cc/<p>/include/scan_callback.hh—MasstreeWrapper<Tuple>::ScanCallbackを継承、on_resp_node(const MasstreeWrapper<Tuple>::node_type*, uint64_t)を実装。cc/<p>/include/transaction.hh—std::unordered_map<void*, uint64_t> node_map_を tx ローカルに保持。cc/<p>/transaction.cc—insert_info_tを受け取りコミット時にnode_map_を再検証。MasstreeWrapperの基本 API は使うが node-version phantom 回避は使っていない (scan_callback.hh / node_map_ なし)。cmake/CompileOptions.cmakeでCMAKE_CXX_STANDARD 20)。third_party/masstree=thawk105/masstree-beta)。build_tools/bootstrap.shがlibkohler_masstree_json.aを生成し、CMakeLists.txt:39-41のccbench::masstreeIMPORTED ターゲット経由でcmake/ProtocolHelpers.cmakeが各プロトコルにリンク。CCBENCH_INDEX/DefaultIndex/index/index.hhはいずれも未存在。やること
フェーズ1: ファイル移動のみ (低リスク・約1時間)
include/masstree_wrapper.hh→index/masstree/wrapper.hh#include "masstree_wrapper.hh"パスを更新 (cc/配下・include/配下)。cmake/ProtocolHelpers.cmake等) にindex/を追加。index/README.mdを追加してディレクトリの意図 (プロトコルが選択できるインデックス層、デフォルト masstree、将来 yakushima) を宣言。フェーズ2: 薄いエイリアス層 (中リスク・約半日)
index/index.hhを追加しDefaultIndex<T>(=MasstreeWrapper<T>の alias) を公開。MasstreeWrapper<Tuple>直書きをDefaultIndex<Tuple>に置換。-DCCBENCH_INDEX=masstreeを cmake オプションとして用意 (この時点では masstree のみ。値の検証とDefaultIndexの解決だけ)。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 化の地ならし)。スコープ外
insert_info_tを wrapper 共通型に変更する設計 → [index] 第2インデックス yakushima の統合(ビルド統合 + YakushimaWrapper 実装) #89 (2 実装が要るため)リスク / 注意
docs/coding-conventions_ja.mdを参照 (CMake / C++)。#includeパス更新漏れがあるとビルドエラー。grep でmasstree_wrapperを網羅的に潰す。完了条件
index/masstree/wrapper.hhとindex/index.hhindex/README.mdが存在。include/masstree_wrapper.hhが消えている。DefaultIndex<Tuple>経由でインデックスを参照している。