risingwavelabs/risingwave · error · BackupError
overwrite_hummock_storage_endpoint, overwrite_backup_storage
Error message
overwrite_hummock_storage_endpoint, overwrite_backup_storage_url, overwrite_backup_storage_directory must be set simultaneously
What it means
dispatch validates restore options: if `overwrite_hummock_storage_endpoint` is true, both `overwrite_backup_storage_url` and `overwrite_backup_storage_directory` must also be provided, since the snapshot's stored endpoints will be overwritten and need replacement values. Partial specification is rejected.
Source
Thrown at src/meta/src/backup_restore/restore.rs:216
)
.await?;
}
Ok(())
}
async fn dispatch<L: Loader<S>, W: Writer<S>, S: Metadata>(
target_id: MetaSnapshotId,
opts: &RestoreOpts,
loader: L,
writer: W,
) -> BackupResult<()> {
// Validate parameters.
if opts.overwrite_hummock_storage_endpoint
&& (opts.overwrite_backup_storage_url.is_none()
|| opts.overwrite_backup_storage_directory.is_none())
{
return Err(BackupError::Other(anyhow::anyhow!("overwrite_hummock_storage_endpoint, overwrite_backup_storage_url, overwrite_backup_storage_directory must be set simultaneously".to_owned())));
}
// Restore meta store.
let target_snapshot = loader.load(target_id).await?;
if !opts.overwrite_hummock_storage_endpoint {
let storage_url = target_snapshot.metadata.storage_url()?;
if storage_url != opts.hummock_storage_url {
return Err(BackupError::Other(anyhow::anyhow!(
"storage_url mismatch: {} {}",
storage_url,
opts.hummock_storage_url
)));
}
let storage_directory = target_snapshot.metadata.storage_directory()?;
if storage_directory != opts.hummock_storage_directory {
return Err(BackupError::Other(anyhow::anyhow!(
"storage_directory mismatch: {} {}",
storage_directory,View on GitHub (pinned to 6469eb736d)
Solutions
- Provide all three options together: overwrite_hummock_storage_endpoint=true plus explicit overwrite_backup_storage_url and overwrite_backup_storage_directory
- Or set overwrite_hummock_storage_endpoint=false to reuse the snapshot's stored endpoints
- Review the restore command/config so all override flags are consistent
Example fix
// before
RestoreOpts { overwrite_hummock_storage_endpoint: true, overwrite_backup_storage_url: None, .. }
// after
RestoreOpts { overwrite_hummock_storage_endpoint: true, overwrite_backup_storage_url: Some(url), overwrite_backup_storage_directory: Some(dir), .. } Defensive patterns
Strategy: validation
Validate before calling
if opts.overwrite_hummock_storage_endpoint
&& (opts.overwrite_backup_storage_url.is_none() || opts.overwrite_backup_storage_directory.is_none()) {
return Err(anyhow!("must set overwrite_backup_storage_url and overwrite_backup_storage_directory together"));
} Prevention
- Treat the three overwrite options as an all-or-nothing group in tooling
- Use wrapper scripts that validate restore flag combinations
- Document DR override flags in restore runbooks
When it happens
Trigger: Running a restore with overwrite_hummock_storage_endpoint enabled but omitting overwrite_backup_storage_url and/or overwrite_backup_storage_directory.
Common situations: Disaster-recovery restore into a different cloud environment where only some of the three override flags were supplied; typos in long CLI flag names.
Understand the failure class
Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.
Related errors
- storage_url mismatch: {} {}
- storage_directory mismatch: {} {}
- secret_store_private_key is not configured
- snapshot id {} not found
- not supported: write model V1 to meta store V2
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/f15f2f793bbecbc6.
Report an issue: GitHub.