{"record":{"id":"fc7c052b631ae027","repo":"risingwavelabs/risingwave","slug":"version-delta-not-found","errorCode":null,"errorMessage":"version delta {} not found","messagePattern":"version delta (.+?) not found","errorType":"exception","errorClass":"TimeTravel","httpStatus":null,"severity":"error","filePath":"src/meta/src/hummock/manager/time_travel.rs","lineNumber":314,"sourceCode":"            Ok(())\n        }\n        for delta_id_batch in delta_ids_to_delete.chunks(delta_fetch_batch_size) {\n            let mut delta_to_delete_by_id: HashMap<_, _> =\n                hummock_time_travel_delta::Entity::find()\n                    .filter(\n                        hummock_time_travel_delta::Column::VersionId\n                            .is_in(delta_id_batch.iter().copied()),\n                    )\n                    .all(&txn)\n                    .await?\n                    .into_iter()\n                    .map(|delta| (delta.version_id, delta))\n                    .collect();\n            for &delta_id_to_delete in delta_id_batch {\n                let delta_to_delete = delta_to_delete_by_id\n                    .remove(&delta_id_to_delete)\n                    .ok_or_else(|| {\n                        Error::TimeTravel(anyhow!(format!(\n                            \"version delta {} not found\",\n                            delta_id_to_delete\n                        )))\n                    })?;\n                let delta_to_delete = IncompleteHummockVersionDelta::from_persisted_protobuf_owned(\n                    delta_to_delete.version_delta.to_protobuf(),\n                );\n                let new_sst_ids = delta_to_delete.newly_added_sst_ids();\n                // The SST ids added and then deleted by compaction between the 2 versions.\n                sst_ids_to_delete.extend(&new_sst_ids - &retained_snapshot_sst_ids);\n                if sst_ids_to_delete.len() >= delete_sst_batch_size {\n                    delete_sst_in_batch(\n                        &txn,\n                        std::mem::take(&mut sst_ids_to_delete),\n                        delete_sst_batch_size,\n                    )\n                    .await?;\n                }","sourceCodeStart":296,"sourceCodeEnd":332,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/src/hummock/manager/time_travel.rs#L296-L332","documentation":"While truncating time-travel metadata, each version delta ID scheduled for deletion must be present in the set of deltas loaded in the same transaction. If a delta ID to delete is missing from the in-transaction map (delta_to_delete_by_id), the code returns Error::TimeTravel(\"version delta {} not found\"), an internal invariant violation indicating the metadata table is inconsistent with the deletion plan.","triggerScenarios":"Calling delete_time_travel_metadata (via version GC / hummock admin) when a hummock_version_delta row referenced by the deletion batch has already been deleted or never existed — typically from concurrent metadata truncation, corrupted meta store state, or a partial prior cleanup.","commonSituations":"Concurrent time-travel GC tasks racing; a previous failed truncation left inconsistent state; manual cleanup of hummock_version_delta rows in the meta store DB.","solutions":["Verify meta store consistency: check hummock_version_delta rows for the reported delta_id.","Ensure no concurrent delete_time_travel_metadata / GC tasks run simultaneously; serialize version GC.","If metadata is inconsistent, restore the meta store from backup or rebuild time-travel metadata.","Capture meta node logs and report the error, as it usually indicates an internal bug (file an issue with the delta_id)."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// confirm the delta rows still exist before deleting\nlet missing: Vec<_> = delta_ids.iter()\n    .filter(|id| !existing_delta_ids.contains(id))\n    .collect();\nif !missing.is_empty() { /* abort plan: metadata inconsistent */ }","typeGuard":null,"tryCatchPattern":"// match the typed TimeTravel error\nmatch meta.delete_time_travel_metadata(...).await {\n    Err(Error::TimeTravel(e)) if e.to_string().contains(\"not found\") => {\n        // mark metadata inconsistent; stop GC, alert, consider restore\n    }\n    other => other,\n}","preventionTips":["Run a single serialized version-GC worker; never truncate time-travel metadata concurrently.","Never manually delete rows from hummock_version_delta.","Back up the meta store before version GC operations.","Alert on any TimeTravel internal errors — they indicate inconsistent metadata."],"tags":["time-travel","hummock","metadata","risingwave-meta"],"backgroundTag":"record-not-found","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}