risingwavelabs/risingwave · error
legacy s3 connector is fully deprecated since v2.4.0…
Error message
legacy s3 connector is fully deprecated since v2.4.0, please DROP and recreate the s3 source.
executor: {:?} What it means
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.
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`.
Example fix
// before CREATE SOURCE s WITH (connector = 's3', ...); // after CREATE SOURCE s WITH (connector = 's3_v2', s3.region.name = 'us-east-1', ...);
Defensive patterns
Strategy: validation
Validate before calling
-- before creating/after upgrading, check connector type SHOW SOURCES; -- recreate any source with connector = 's3' using 's3_v2'
Prevention
- 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.
When it happens
Trigger: 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.
Common situations: Upgrading a RisingWave cluster from an older version with existing s3 sources; a `CREATE SOURCE` copied from pre-v2.0 docs using `connector='s3'`.
Understand the failure class
Background: "is deprecated and will be removed" — deprecation warnings for old API names, keywords, and options, and how to migrate before the removal release — this error's family across 29 libraries.
Related errors
- Passing s3-compatible is not supported, please modify the…
- AdbcSnowflake connector only supports FULL_RELOAD refresh…
- additional column is not supported for connector
- additional column type
- batch refresh materialized views must not depend on sources…
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/61461f6a6679aeb7.
Report an issue: GitHub.
Appendix: source
Thrown at src/stream/src/from_proto/source/trad_source.rs:218
let is_legacy_fs_connector = source.with_properties.is_legacy_fs_connector();
let is_fs_v2_connector = source.with_properties.is_new_fs_connector();
let is_s3_connector = source
.with_properties
.get_connector()
.map(|c| {
c.eq_ignore_ascii_case(risingwave_connector::source::OPENDAL_S3_CONNECTOR)
})
.unwrap_or(false);
let is_gcs_connector = source
.with_properties
.get_connector()
.map(|c| c.eq_ignore_ascii_case(risingwave_connector::source::GCS_CONNECTOR))
.unwrap_or(false);
if is_legacy_fs_connector {
// Changed to default since v2.0 https://github.com/risingwavelabs/risingwave/pull/17963
bail!(
"legacy s3 connector is fully deprecated since v2.4.0, please DROP and recreate the s3 source.\nexecutor: {:?}",
params
);
} else if is_full_reload_refresh && is_s3_connector {
BatchOpendalFsListExecutor::<_, OpendalS3>::new(
params.actor_context.clone(),
stream_source_core,
params.executor_stats.clone(),
barrier_receiver,
system_params,
source.rate_limit,
params.local_barrier_manager.clone(),
associated_table_id,
)
.boxed()
} else if is_full_reload_refresh && is_gcs_connector {
BatchOpendalFsListExecutor::<_, OpendalGcs>::new(
params.actor_context.clone(),View on GitHub (pinned to 6469eb736d)