From bf12a7b496fa099702334776cbafb0e85e945cf3 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 27 Apr 2023 11:01:26 +0200 Subject: [PATCH] Canoncialize dataflow path to determine working dir The path should also be valid on the receiving node, which might run in a different directory. --- binaries/cli/src/main.rs | 22 ++++++++++++---------- examples/multiple-daemons/run.rs | 21 +++++++++++++++++++-- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/binaries/cli/src/main.rs b/binaries/cli/src/main.rs index 1a71aa0c..13552802 100644 --- a/binaries/cli/src/main.rs +++ b/binaries/cli/src/main.rs @@ -128,9 +128,12 @@ fn main() -> eyre::Result<()> { Command::Check { dataflow } => match dataflow { Some(dataflow) => { let working_dir = dataflow + .canonicalize() + .context("failed to canonicalize dataflow path")? .parent() - .ok_or_else(|| eyre::eyre!("dataflow path has no parent dir"))?; - Descriptor::blocking_read(&dataflow)?.check(working_dir)?; + .ok_or_else(|| eyre::eyre!("dataflow path has no parent dir"))? + .to_owned(); + Descriptor::blocking_read(&dataflow)?.check(&working_dir)?; check::check_environment()? } None => check::check_environment()?, @@ -167,17 +170,16 @@ fn main() -> eyre::Result<()> { let dataflow_descriptor = Descriptor::blocking_read(&dataflow).wrap_err("Failed to read yaml dataflow")?; let working_dir = dataflow + .canonicalize() + .context("failed to canonicalize dataflow path")? .parent() - .ok_or_else(|| eyre::eyre!("dataflow path has no parent dir"))?; + .ok_or_else(|| eyre::eyre!("dataflow path has no parent dir"))? + .to_owned(); dataflow_descriptor - .check(working_dir) + .check(&working_dir) .wrap_err("Could not validate yaml")?; - let dataflow_id = start_dataflow( - dataflow_descriptor.clone(), - name, - working_dir.to_owned(), - &mut session, - )?; + let dataflow_id = + start_dataflow(dataflow_descriptor.clone(), name, working_dir, &mut session)?; if attach { attach_dataflow( diff --git a/examples/multiple-daemons/run.rs b/examples/multiple-daemons/run.rs index f8545b99..d7ec19eb 100644 --- a/examples/multiple-daemons/run.rs +++ b/examples/multiple-daemons/run.rs @@ -1,5 +1,8 @@ use dora_coordinator::{ControlEvent, Event}; -use dora_core::topics::{ControlRequest, ControlRequestReply, DataflowId}; +use dora_core::{ + descriptor::Descriptor, + topics::{ControlRequest, ControlRequestReply, DataflowId}, +}; use eyre::{bail, Context}; use futures::stream; use std::{ @@ -112,11 +115,25 @@ async fn start_dataflow( dataflow: &Path, coordinator_events_tx: &Sender, ) -> eyre::Result { + let dataflow_descriptor = Descriptor::read(dataflow) + .await + .wrap_err("failed to read yaml dataflow")?; + let working_dir = dataflow + .canonicalize() + .context("failed to canonicalize dataflow path")? + .parent() + .ok_or_else(|| eyre::eyre!("dataflow path has no parent dir"))? + .to_owned(); + dataflow_descriptor + .check(&working_dir) + .wrap_err("could not validate yaml")?; + let (reply_sender, reply) = oneshot::channel(); coordinator_events_tx .send(Event::Control(ControlEvent::IncomingRequest { request: ControlRequest::Start { - dataflow_path: dataflow.to_owned(), + dataflow: dataflow_descriptor, + local_working_dir: working_dir, name: None, }, reply_sender,