{"record":{"id":"f15f2f793bbecbc6","repo":"risingwavelabs/risingwave","slug":"overwrite-hummock-storage-endpoint-overwrite-back","errorCode":null,"errorMessage":"overwrite_hummock_storage_endpoint, overwrite_backup_storage_url, overwrite_backup_storage_directory must be set simultaneously","messagePattern":"overwrite_hummock_storage_endpoint, overwrite_backup_storage_url, overwrite_backup_storage_directory must be set simultaneously","errorType":"validation","errorClass":"BackupError","httpStatus":null,"severity":"error","filePath":"src/meta/src/backup_restore/restore.rs","lineNumber":216,"sourceCode":"        )\n        .await?;\n    }\n\n    Ok(())\n}\n\nasync fn dispatch<L: Loader<S>, W: Writer<S>, S: Metadata>(\n    target_id: MetaSnapshotId,\n    opts: &RestoreOpts,\n    loader: L,\n    writer: W,\n) -> BackupResult<()> {\n    // Validate parameters.\n    if opts.overwrite_hummock_storage_endpoint\n        && (opts.overwrite_backup_storage_url.is_none()\n            || opts.overwrite_backup_storage_directory.is_none())\n    {\n        return Err(BackupError::Other(anyhow::anyhow!(\"overwrite_hummock_storage_endpoint, overwrite_backup_storage_url, overwrite_backup_storage_directory must be set simultaneously\".to_owned())));\n    }\n\n    // Restore meta store.\n    let target_snapshot = loader.load(target_id).await?;\n    if !opts.overwrite_hummock_storage_endpoint {\n        let storage_url = target_snapshot.metadata.storage_url()?;\n        if storage_url != opts.hummock_storage_url {\n            return Err(BackupError::Other(anyhow::anyhow!(\n                \"storage_url mismatch: {} {}\",\n                storage_url,\n                opts.hummock_storage_url\n            )));\n        }\n        let storage_directory = target_snapshot.metadata.storage_directory()?;\n        if storage_directory != opts.hummock_storage_directory {\n            return Err(BackupError::Other(anyhow::anyhow!(\n                \"storage_directory mismatch: {} {}\",\n                storage_directory,","sourceCodeStart":198,"sourceCodeEnd":234,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/src/backup_restore/restore.rs#L198-L234","documentation":"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.","triggerScenarios":"Running a restore with overwrite_hummock_storage_endpoint enabled but omitting overwrite_backup_storage_url and/or overwrite_backup_storage_directory.","commonSituations":"Disaster-recovery restore into a different cloud environment where only some of the three override flags were supplied; typos in long CLI flag names.","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"],"exampleFix":"// before\nRestoreOpts { overwrite_hummock_storage_endpoint: true, overwrite_backup_storage_url: None, .. }\n// after\nRestoreOpts { overwrite_hummock_storage_endpoint: true, overwrite_backup_storage_url: Some(url), overwrite_backup_storage_directory: Some(dir), .. }","handlingStrategy":"validation","validationCode":"if opts.overwrite_hummock_storage_endpoint\n    && (opts.overwrite_backup_storage_url.is_none() || opts.overwrite_backup_storage_directory.is_none()) {\n    return Err(anyhow!(\"must set overwrite_backup_storage_url and overwrite_backup_storage_directory together\"));\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["rust","meta","restore","cli","config"],"backgroundTag":"conflicting-config-options","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"}