{"record":{"id":"6a854f90ca887bd3","repo":"risingwavelabs/risingwave","slug":"passing-s3-compatible-is-not-supported-please-mod","errorCode":null,"errorMessage":"Passing s3-compatible is not supported, please modify the environment variable and pass in s3.","messagePattern":"Passing s3-compatible is not supported, please modify the environment variable and pass in s3\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"src/object_store/src/object/mod.rs","lineNumber":1011,"sourceCode":"                )\n                .unwrap()\n                .monitored(metrics, config),\n            )\n        }\n        fs if fs.starts_with(\"fs://\") => {\n            let fs = fs.strip_prefix(\"fs://\").unwrap();\n            ObjectStoreImpl::Opendal(\n                OpendalObjectStore::new_fs_engine(fs.to_owned(), config.clone(), metrics.clone())\n                    .unwrap()\n                    .monitored(metrics, config),\n            )\n        }\n\n        s3_compatible if s3_compatible.starts_with(\"s3-compatible://\") => {\n            tracing::error!(\"The s3 compatible mode has been unified with s3.\");\n            tracing::error!(\"If you want to use s3 compatible storage, please set your access_key, secret_key and region to the environment variable AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION,\n            set your endpoint to the environment variable RW_S3_ENDPOINT.\");\n            panic!(\n                \"Passing s3-compatible is not supported, please modify the environment variable and pass in s3.\"\n            );\n        }\n        minio if minio.starts_with(\"minio://\") => {\n            if config.s3.developer.use_opendal {\n                tracing::info!(\"Using OpenDAL to access minio.\");\n                ObjectStoreImpl::Opendal(\n                    OpendalObjectStore::new_minio_engine(minio, config.clone(), metrics.clone())\n                        .unwrap()\n                        .monitored(metrics, config),\n                )\n            } else {\n                ObjectStoreImpl::S3(\n                    S3ObjectStore::new_minio_engine(minio, metrics.clone(), config.clone())\n                        .await\n                        .monitored(metrics, config),\n                )\n            }","sourceCodeStart":993,"sourceCodeEnd":1029,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/object_store/src/object/mod.rs#L993-L1029","documentation":"build_remote_object_store panics when a remote URL uses the legacy s3-compatible:// scheme. The s3-compatible mode has been unified into the s3 mode; s3 now handles compatible endpoints via RW_S3_ENDPOINT plus AWS credential/region environment variables.","triggerScenarios":"Passing a store URL starting with s3-compatible:// to build_remote_object_store (directly or via callers like get_object_store, create_sstable_store, restore_hummock_version) — typically from an old config or persisted state directory.","commonSituations":"Upgrading RisingWave from a version where s3-compatible:// was valid; copying store URLs from old documentation or older config files.","solutions":["Remove credentials/endpoint from the URL and change the scheme to s3:// in the config","Set AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION environment variables for credentials","Set RW_S3_ENDPOINT to the compatible-storage endpoint (e.g. for MinIO/R2/OSS-compatible gateways)","Restart with the updated URL and environment"],"exampleFix":"# before\nstate_store_url = \"s3-compatible://bucket/path?access_key=AK&secret=SK&endpoint=http://minio:9000\"\n# after\nstate_store_url = \"s3://bucket/path\"\n# plus environment:\n# AWS_ACCESS_KEY_ID=AK AWS_SECRET_ACCESS_KEY=SK AWS_REGION=us-east-1 RW_S3_ENDPOINT=http://minio:9000","handlingStrategy":"validation","validationCode":"// Validate the state store URL before starting/building the store\nlet url = config.system.state_store.as_str();\nif url.starts_with(\"s3-compatible://\") {\n    panic!(\"s3-compatible:// is removed; use s3:// with RW_S3_ENDPOINT + AWS_* env vars\");\n}","typeGuard":"fn is_supported_remote_url(url: &str) -> bool {\n    !url.starts_with(\"s3-compatible://\")\n        && (url.starts_with(\"s3://\") || url.starts_with(\"minio://\") || url.starts_with(\"gcs://\")\n            || url.starts_with(\"oss://\") || url.starts_with(\"cos://\") || url.starts_with(\"azblob://\")\n            || url.starts_with(\"hdfs://\") || url.starts_with(\"disk://\") || url.starts_with(\"memory://\")\n            || url.is_empty())\n}","tryCatchPattern":null,"preventionTips":["Migrate configs off s3-compatible:// before upgrading; use s3:// plus RW_S3_ENDPOINT","Keep credentials in AWS_* environment variables, not in the URL","Grep deployment manifests for `s3-compatible` during upgrade checklists"],"tags":["rust","object-store","s3","deprecated","panic"],"backgroundTag":"deprecated-api-usage","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"}