{"record":{"id":"65cc3a2f3c19f5b8","repo":"risingwavelabs/risingwave","slug":"connectorerror","errorCode":null,"errorMessage":"ConnectorError","messagePattern":"ConnectorError","errorType":"exception","errorClass":"SchedulerError","httpStatus":null,"severity":"error","filePath":"src/frontend/src/scheduler/error.rs","lineNumber":58,"sourceCode":"    TaskRunningOutOfMemory,\n\n    /// Used when receive cancel request for some reason, such as user cancel or timeout.\n    #[error(\"Query cancelled: {0}\")]\n    QueryCancelled(String),\n\n    #[error(\n        \"Reject query: the {0} query number reaches the limit: {1}. Use `SHOW PROCESSLIST` to check for hanging queries and cancel them if needed.\"\n    )]\n    QueryReachLimit(QueryMode, u64),\n\n    #[error(transparent)]\n    BatchError(\n        #[from]\n        #[backtrace]\n        BatchError,\n    ),\n\n    #[error(transparent)]\n    Connector(\n        #[from]\n        #[backtrace]\n        ConnectorError,\n    ),\n\n    #[error(transparent)]\n    Internal(\n        #[from]\n        #[backtrace]\n        anyhow::Error,\n    ),\n}\n\nimpl From<SchedulerError> for RwError {\n    fn from(s: SchedulerError) -> Self {\n        ErrorCode::SchedulerError(Box::new(s)).into()\n    }","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/frontend/src/scheduler/error.rs#L40-L76","documentation":"This is the transparent wrapper variant of RisingWave's scheduler BatchError enum that converts any ConnectorError (raised inside a source connector) into a scheduler error. It carries no extra message — the display output is exactly the underlying connector error. It is thrown automatically via `#[from]` whenever connector code invoked from the batch scheduler pipeline fails, e.g. while listing or acquiring splits for a source.","triggerScenarios":"Any `?` conversion from `ConnectorError` into `BatchError` during query scheduling, such as when the plan fragmenter or distributed scheduler calls into the connector SDK to enumerate splits, validate a source, or read external system properties.","commonSituations":"Querying a table backed by Kafka/Nexmark/Datagen where the broker is unreachable, topic missing, auth credentials rejected, or where the connector SDK returns a property error. Also seen when a source's connector settings were changed after creation.","solutions":["Read the underlying connector error message (it is transparent) and fix the root cause in the source/connector configuration.","Verify the source's connector properties (broker address, topic, auth, region) with `SHOW SOURCE <name>` and test external connectivity from the RisingWave node.","Recreate the source or table with corrected `WITH` options if the connector config is stale.","Check network/DNS/firewall from the RisingWave compute nodes to the external system."],"exampleFix":"// before: failing to connect to Kafka with wrong broker\nCREATE SOURCE s (...) WITH (connector='kafka', properties.broker='wrong:9092');\n// after\nCREATE SOURCE s (...) WITH (connector='kafka', properties.broker='kafka:9092');","handlingStrategy":"try-catch","validationCode":"-- verify the source is reachable/healthy before querying\nSELECT * FROM rw_catalog.rw_sources WHERE name = 'my_source';","typeGuard":null,"tryCatchPattern":"match scheduler_result {\n    Err(e) if matches!(e, BatchError::Connector(_)) => {\n        log::error!(\"connector failure: {e}\"); // handle root connector cause\n    }\n    r => r?,\n}","preventionTips":["Validate connector WITH options against the connector SDK before creating sources.","Monitor broker/topic health and credentials expiry.","Test connectivity from RisingWave nodes to external systems in deployment checks."],"tags":["scheduler","connector","source"],"backgroundTag":"incompatible-source-type","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"}