{"record":{"id":"ac383f957e98bb72","repo":"risingwavelabs/risingwave","slug":"not-implemented","errorCode":null,"errorMessage":"not implemented","messagePattern":"not implemented","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/connector/src/source/iceberg/mod.rs","lineNumber":668,"sourceCode":"    DataChunk::from_parts(columns.into(), visibility)\n}\n\n#[derive(Debug)]\npub struct IcebergFileReader {}\n\n#[async_trait]\nimpl SplitReader for IcebergFileReader {\n    type Properties = IcebergProperties;\n    type Split = IcebergSplit;\n\n    async fn new(\n        _props: IcebergProperties,\n        _splits: Vec<IcebergSplit>,\n        _parser_config: ParserConfig,\n        _source_ctx: SourceContextRef,\n        _columns: Option<Vec<Column>>,\n    ) -> ConnectorResult<Self> {\n        unimplemented!()\n    }\n\n    fn into_stream(self) -> BoxSourceChunkStream {\n        unimplemented!()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use std::collections::HashMap;\n    use std::sync::Arc;\n\n    use iceberg::scan::FileScanTask;\n    use iceberg::spec::{\n        FormatVersion, MAIN_BRANCH, NestedField, Operation, PrimitiveType, Schema, Snapshot,\n        SortOrder, Struct, Summary, TableMetadataBuilder, Type, UnboundPartitionSpec,\n    };\n","sourceCodeStart":650,"sourceCodeEnd":686,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/source/iceberg/mod.rs#L650-L686","documentation":"The `IcebergSource` implementation's `new` constructor is intentionally left `unimplemented!()`. Iceberg data is not read through this streaming-source reader path (it goes through the batch/file-scan planner instead), so calling this constructor always panics. It exists only to satisfy the source reader trait interface.","triggerScenarios":"Any code path that constructs a streaming source reader via `IcebergSource::new` with the given properties/splits/parser config — e.g. registering Iceberg as a regular streaming connector source instead of using the Iceberg table scan path.","commonSituations":"Attempting `CREATE SOURCE` with the iceberg connector for continuous streaming ingestion; misconfiguring a MV/source to consume iceberg as a push-based source; code regression calling the wrong reader factory.","solutions":["Do not use iceberg as a streaming source; create an Iceberg table or batch query instead of a source/MV.","Use the iceberg scan/planner path (list_scan_tasks -> splits -> batch executors) rather than the source reader.","If continuous ingestion is needed, use the appropriate external streaming source and periodically query Iceberg.","Update the job to use batch query semantics (e.g. MV on iceberg is not supported via this path)."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if connector == \"iceberg\" && job_type == Source {\n    return Err(\"iceberg is only supported as a table/batch scan, not a streaming source\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never register iceberg as a push-based streaming source","Route iceberg reads through the batch scan planner","Check connector capability matrix before CREATE SOURCE"],"tags":["rust","iceberg","unimplemented","source-reader"],"backgroundTag":"method-not-implemented","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"}