Browse Source

Canoncialize dataflow path to determine working dir

The path should also be valid on the receiving node, which might run in a different directory.
tags/v0.2.3-rc
Philipp Oppermann 2 years ago
parent
commit
bf12a7b496
Failed to extract signature
2 changed files with 31 additions and 12 deletions
  1. +12
    -10
      binaries/cli/src/main.rs
  2. +19
    -2
      examples/multiple-daemons/run.rs

+ 12
- 10
binaries/cli/src/main.rs View File

@@ -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(


+ 19
- 2
examples/multiple-daemons/run.rs View File

@@ -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<Event>,
) -> eyre::Result<Uuid> {
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,


Loading…
Cancel
Save