risingwave_stream/from_proto/
changelog.rs1use risingwave_pb::stream_plan::ChangeLogNode;
16use risingwave_storage::StateStore;
17
18use super::ExecutorBuilder;
19use crate::error::StreamResult;
20use crate::executor::{ChangeLogExecutor, Executor};
21use crate::task::ExecutorParams;
22
23pub struct ChangeLogExecutorBuilder;
24
25impl_stream_node_body!(Changelog(ChangeLogNode) => ChangeLogExecutorBuilder);
26
27impl ExecutorBuilder for ChangeLogExecutorBuilder {
28 type Node = ChangeLogNode;
29
30 async fn new_boxed_executor(
31 params: ExecutorParams,
32 node: &Self::Node,
33 _store: impl StateStore,
34 ) -> StreamResult<Executor> {
35 let [input]: [_; 1] = params.input.try_into().unwrap();
36
37 let vnodes = params
38 .vnode_bitmap
39 .expect("vnodes not set for changelog executor");
40 let vnode_count = params.actor_context.vnode_count;
41 let distribution_keys = node
42 .distribution_keys
43 .iter()
44 .map(|k| *k as usize)
45 .collect::<Vec<_>>();
46 let exec = ChangeLogExecutor::new(
47 params.actor_context,
48 input,
49 node.need_op,
50 vnode_count,
51 vnodes,
52 distribution_keys,
53 );
54 Ok((params.info, exec).into())
55 }
56}