diff --git a/apis/rust/node/src/daemon_connection/communication/mod.rs b/apis/rust/node/src/daemon_connection/communication/mod.rs index 2a380aae..c7f7cf01 100644 --- a/apis/rust/node/src/daemon_connection/communication/mod.rs +++ b/apis/rust/node/src/daemon_connection/communication/mod.rs @@ -37,6 +37,7 @@ impl DaemonChannel { let msg = DaemonRequest::Register { dataflow_id, node_id, + dora_version: env!("CARGO_PKG_VERSION").to_owned(), }; let reply = self .request(&msg) diff --git a/binaries/daemon/src/listener/mod.rs b/binaries/daemon/src/listener/mod.rs index 4e8a2212..124f7cb4 100644 --- a/binaries/daemon/src/listener/mod.rs +++ b/binaries/daemon/src/listener/mod.rs @@ -133,14 +133,23 @@ impl Listener { DaemonRequest::Register { dataflow_id, node_id, + dora_version: node_api_version, } => { - let reply = DaemonReply::Result(Ok(())); - match connection - .send_reply(reply) + let daemon_version = env!("CARGO_PKG_VERSION"); + let result = if node_api_version == daemon_version { + Ok(()) + } else { + Err(format!( + "version mismatch: node API v{node_api_version} is not compatible \ + with daemon v{daemon_version}" + )) + }; + let send_result = connection + .send_reply(DaemonReply::Result(result.clone())) .await - .wrap_err("failed to send register reply") - { - Ok(()) => { + .wrap_err("failed to send register reply"); + match (result, send_result) { + (Ok(()), Ok(())) => { let mut listener = Listener { dataflow_id, node_id, @@ -158,8 +167,13 @@ impl Listener { Err(err) => tracing::error!("{err:?}"), } } - Err(err) => { - tracing::warn!("{err:?}"); + (Err(err), _) => { + tracing::warn!("failed to register node {dataflow_id}/{node_id}: {err}"); + } + (Ok(()), Err(err)) => { + tracing::warn!( + "failed send register reply to node {dataflow_id}/{node_id}: {err:?}" + ); } } } diff --git a/libraries/core/src/daemon_messages.rs b/libraries/core/src/daemon_messages.rs index fa36e4e1..b890098f 100644 --- a/libraries/core/src/daemon_messages.rs +++ b/libraries/core/src/daemon_messages.rs @@ -37,6 +37,7 @@ pub enum DaemonRequest { Register { dataflow_id: DataflowId, node_id: NodeId, + dora_version: String, }, Subscribe, SendMessage {