{"record":{"id":"61461f6a6679aeb7","repo":"risingwavelabs/risingwave","slug":"legacy-s3-connector-is-fully-deprecated-since-v2-4","errorCode":null,"errorMessage":"legacy s3 connector is fully deprecated since v2.4.0, please DROP and recreate the s3 source.\nexecutor: {:?}","messagePattern":"legacy s3 connector is fully deprecated since v2\\.4\\.0, please DROP and recreate the s3 source\\.\nexecutor: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/stream/src/from_proto/source/trad_source.rs","lineNumber":218,"sourceCode":"\n                let is_legacy_fs_connector = source.with_properties.is_legacy_fs_connector();\n                let is_fs_v2_connector = source.with_properties.is_new_fs_connector();\n                let is_s3_connector = source\n                    .with_properties\n                    .get_connector()\n                    .map(|c| {\n                        c.eq_ignore_ascii_case(risingwave_connector::source::OPENDAL_S3_CONNECTOR)\n                    })\n                    .unwrap_or(false);\n                let is_gcs_connector = source\n                    .with_properties\n                    .get_connector()\n                    .map(|c| c.eq_ignore_ascii_case(risingwave_connector::source::GCS_CONNECTOR))\n                    .unwrap_or(false);\n\n                if is_legacy_fs_connector {\n                    // Changed to default since v2.0 https://github.com/risingwavelabs/risingwave/pull/17963\n                    bail!(\n                        \"legacy s3 connector is fully deprecated since v2.4.0, please DROP and recreate the s3 source.\\nexecutor: {:?}\",\n                        params\n                    );\n                } else if is_full_reload_refresh && is_s3_connector {\n                    BatchOpendalFsListExecutor::<_, OpendalS3>::new(\n                        params.actor_context.clone(),\n                        stream_source_core,\n                        params.executor_stats.clone(),\n                        barrier_receiver,\n                        system_params,\n                        source.rate_limit,\n                        params.local_barrier_manager.clone(),\n                        associated_table_id,\n                    )\n                    .boxed()\n                } else if is_full_reload_refresh && is_gcs_connector {\n                    BatchOpendalFsListExecutor::<_, OpendalGcs>::new(\n                        params.actor_context.clone(),","sourceCodeStart":200,"sourceCodeEnd":236,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/stream/src/from_proto/source/trad_source.rs#L200-L236","documentation":"The legacy filesystem-based S3 connector (`connector = 's3'` without `s3_v2`) was removed; since v2.4.0 creating its stream executor bails with this message telling the user to DROP and recreate the source. It exists to force migration to the opendal-based `s3_v2` connector.","triggerScenarios":"Starting a stream fragment whose source still references the deprecated `s3` (or legacy fs) connector — typically a source created before v2.0/v2.4.0 that survived an upgrade and is now being recovered/rebuilt.","commonSituations":"Upgrading a RisingWave cluster from an older version with existing s3 sources; a `CREATE SOURCE` copied from pre-v2.0 docs using `connector='s3'`.","solutions":["DROP the legacy s3 source and recreate it with `connector = 's3_v2'` (the executor message says DROP and recreate).","Migrate source options to the s3_v2/opendal schema (e.g. `s3.region.name`, `s3.credentials.access`).","Recreate downstream MVs/sinks that depend on the source after recreating it.","Check `SHOW SOURCES` after upgrade to find sources still using `s3`."],"exampleFix":"// before\nCREATE SOURCE s WITH (connector = 's3', ...);\n// after\nCREATE SOURCE s WITH (connector = 's3_v2', s3.region.name = 'us-east-1', ...);","handlingStrategy":"validation","validationCode":"-- before creating/after upgrading, check connector type\nSHOW SOURCES; -- recreate any source with connector = 's3' using 's3_v2'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use connector = 's3_v2' in all new source definitions.","Audit sources after major upgrades for deprecated connector names.","Update team docs/templates that still reference legacy 's3' connector."],"tags":["s3","deprecated","source","migration"],"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-23T08:17:48.524Z"}