risingwavelabs/risingwave · error
table id {} not exist
Error message
table id {} not exist What it means
The rw benchmark tool looked up the committed epoch at which a materialized-view table's data was committed in the pinned Hummock version, and the table ID had no committed epoch entry. This means the table's data is not present in the current pinned Hummock version, so benchmarking reads against it is impossible.
Source
Thrown at src/ctl/src/cmd_impl/bench.rs:104
match cmd {
BenchCommands::Scan {
mv_name,
threads,
data_dir,
use_new_object_prefix_strategy,
} => {
let (hummock, metrics) = context
.hummock_store_with_metrics(HummockServiceOpts::from_env(
data_dir,
use_new_object_prefix_strategy,
)?)
.await?;
let table = get_table_catalog(meta.clone(), mv_name).await?;
let committed_epoch = hummock
.inner()
.get_pinned_version()
.table_committed_epoch(table.id)
.ok_or_else(|| anyhow!("table id {} not exist", table.id))?;
let mut handlers = vec![];
for i in 0..threads {
let table = table.clone();
let next_cnt = next_cnt.clone();
let iter_cnt = iter_cnt.clone();
let hummock = hummock.clone();
let handler = spawn_okk(async move {
tracing::info!(thread = i, "starting scan");
let state_table = {
let mut tb = make_state_table(hummock, &table).await;
tb.init_epoch(EpochPair::new(u64::MAX, committed_epoch))
.await?;
tb
};
loop {
let sub_range: &(Bound<OwnedRow>, Bound<OwnedRow>) =
&(Unbounded, Unbounded);
let stream = state_tableView on GitHub (pinned to 6469eb736d)
Solutions
- Wait for or force a hummock commit/checkpoint so the table's data epoch is committed, then rerun the bench
- Verify the MV name passed to the bench command exists and has committed data (SELECT from it first)
- Use a hummock/meta data directory that matches the current catalog (re-run after a clean MV creation)
- Check that you are not pointing at an old/backup hummock version directory
Example fix
// before ./risedev ctl bench --mv-name just_created_mv // after # ensure the MV is committed (query it or wait for checkpoint) first ./risedev psql -c 'SELECT count(*) FROM just_created_mv;' ./risedev ctl bench --mv-name just_created_mv
Defensive patterns
Strategy: validation
Validate before calling
if hummock.inner().get_pinned_version().table_committed_epoch(table.id).is_none() {
eprintln!("table {} has no committed epoch; commit/checkpoint first", table.id);
return;
} Prevention
- Query the MV at least once before benchmarking to force/confirm committed data
- Keep catalog and hummock data directories from the same cluster generation
- Check hummock version/pinned state before running bench
When it happens
Trigger: Running `rw bench` against an MV name whose table id exists in the catalog but has no entry in table_committed_epoch of the pinned version — e.g. the MV was created but its data is not committed, or the meta/hummock version pinned is older than the table creation.
Common situations: Pointing the bench command at a freshly created MV before a checkpoint/commit; using a stale hummock data directory; catalog and hummock version out of sync after restore.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- invalid hummock context {0}
- Storage error: {0}
- only url starting with 'hummock+' is supported in risectl
- env variable `RW_HUMMOCK_URL` not found. * start the cluste
- only Hummock state store is supported in risectl
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/c85d5fe18426c345.
Report an issue: GitHub.