{"record":{"id":"e76d14e3afc6fb88","repo":"risingwavelabs/risingwave","slug":"missing-log-store-table-in-synclogstorenode","errorCode":null,"errorMessage":"missing log_store_table in SyncLogStoreNode","messagePattern":"missing log_store_table in SyncLogStoreNode","errorType":"error_code","errorClass":"StreamExecutorError","httpStatus":null,"severity":"error","filePath":"src/stream/src/executor/dispatch/dispatch_sync_log_store.rs","lineNumber":80,"sourceCode":"        actor_context: &ActorContextRef,\n        sync: &stream_plan::SyncLogStoreNode,\n        vnode_bitmap: Option<Bitmap>,\n        state_store: S,\n    ) -> StreamResult<Self> {\n        let chunk_size = actor_context.config.developer.chunk_size;\n        let fragment_id = actor_context.fragment_id;\n        let log_store_metrics = SyncedKvLogStoreMetrics::new(\n            &actor_context.streaming_metrics,\n            actor_context.id,\n            fragment_id,\n            \"sync_log_store_dispatch\",\n            \"sync_log_store_dispatch\",\n        );\n\n        let table = sync\n            .log_store_table\n            .as_ref()\n            .ok_or_else(|| anyhow!(\"missing log_store_table in SyncLogStoreNode\"))?;\n\n        let pause_duration_ms = actor_context\n            .config\n            .developer\n            .sync_log_store_pause_duration_ms;\n        let max_buffer_size = actor_context.config.developer.sync_log_store_buffer_size;\n\n        let serde =\n            LogStoreRowSerde::new(table, vnode_bitmap.map(Into::into), &KV_LOG_STORE_V2_INFO);\n        let log_store_context = SyncKvLogStoreContext {\n            table_id: table.id,\n            fragment_id,\n            serde,\n            state_store,\n            max_buffer_size,\n            pause_duration_ms: Duration::from_millis(pause_duration_ms as _),\n            aligned: sync.aligned,\n            chunk_size,","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/stream/src/executor/dispatch/dispatch_sync_log_store.rs#L62-L98","documentation":"Constructing a `SyncLogStoreDispatcher` requires the proto's `log_store_table` field, but the `SyncLogStoreNode` message arrived without it. This is a required protobuf field that the meta node must set when planning the actor's dispatcher.","triggerScenarios":"`new` is called with a `SyncLogStoreNode` whose `log_store_table` option is None — i.e. the fragment/dispatcher plan from meta omitted the log store table id, typically due to a version-skew between meta and stream binaries or a plan-serialization bug.","commonSituations":"Rolling upgrade where an older meta node produces plans for a newer stream binary that requires the field; corrupted/partial actor plan dispatch; internal bug in plan construction.","solutions":["Ensure meta and frontend/stream binaries are the same version — complete any in-progress rolling upgrade.","Inspect the actor plan sent by meta to confirm `log_store_table` is populated; if not, this is a meta-side plan generation bug — file an issue.","Restart the actor/cluster after aligning versions so plans are regenerated."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// before building the dispatcher\nif sync.log_store_table.is_none() { return Err(anyhow!(\"SyncLogStoreNode.log_store_table missing; check meta/stream version alignment\")); }","typeGuard":"fn has_log_store_table(n: &SyncLogStoreNode) -> bool { n.log_store_table.is_some() }","tryCatchPattern":"SyncLogStoreDispatcher::new(sync, &actor_context).await.map_err(|e| { error!(\"sync log store dispatcher init failed: {e}\"); e })?;","preventionTips":["Keep meta and stream node versions aligned during rolling upgrades","Validate required proto fields in plan generation on the meta side","Add plan-time schema checks before dispatching actors"],"tags":["protobuf","dispatcher","missing-field","log-store"],"backgroundTag":"missing-required-config-field","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"}