TimelyDataflow / TimelyDataflow/timely-dataflow
Timely panics when not connecting Feedback operator
Open
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 3.6k
- Forks
- 293
- Avg merge
- 14h 46m
- Merged PRs (30d)
- 4
Description
As title says, timely dataflow panics when not connecting a Feedback operator with connect_loop. It will die as shown.
➜ timely-dataflow git:(feedback_panic) ✗ cargo run --example bfs 10 50
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
Running `target/debug/examples/bfs 10 50`
thread 'worker thread 0' panicked at 'assertion failed: self.children.iter().enumerate().all(|(i, x)| i == x.index)', src/progress/nested/subgraph.rs:148:9
note: Run with `RUST_BACKTRACE=1` for a backtrace.
thread 'main' panicked at 'Worker panic: Any', src/libcore/result.rs:1009:5
➜ timely-dataflow git:(feedback_panic) ✗ RUST_BACKTRACE=1 cargo run --example bfs 10 50
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
Running `target/debug/examples/bfs 10 50`
thread 'worker thread 0' panicked at 'assertion failed: self.children.iter().enumerate().all(|(i, x)| i == x.index)', src/progress/nested/subgraph.rs:148:9
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
at src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::_print
at src/libstd/sys_common/backtrace.rs:71
2: std::panicking::default_hook::{{closure}}
at src/libstd/sys_common/backtrace.rs:59
at src/libstd/panicking.rs:211
3: std::panicking::default_hook
at src/libstd/panicking.rs:227
4: std::panicking::rust_panic_with_hook
at src/libstd/panicking.rs:491
5: std::panicking::begin_panic
at /rustc/9fda7c2237db910e41d6a712e9a2139b352e558b/src/libstd/panicking.rs:425
6: <timely::progress::nested::subgraph::SubgraphBuilder<TOuter, TInner>>::build
at ./<::std::macros::panic macros>:3
7: <timely::worker::Worker<A>>::dataflow_core
at ./src/worker.rs:368
8: <timely::worker::Worker<A>>::dataflow
at ./src/worker.rs:318
9: bfs::main::{{closure}}
at examples/bfs.rs:44
10: timely::execute::execute::{{closure}}
at ./src/execute.rs:180
11: timely_communication::initialize::initialize_from::{{closure}}
at ./communication/src/initialize.rs:262
thread 'main' panicked at 'Worker panic: Any', src/libcore/result.rs:1009:5
stack backtrace:
0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
at src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::_print
at src/libstd/sys_common/backtrace.rs:71
2: std::panicking::default_hook::{{closure}}
at src/libstd/sys_common/backtrace.rs:59
at src/libstd/panicking.rs:211
3: std::panicking::default_hook
at src/libstd/panicking.rs:227
4: std::panicking::rust_panic_with_hook
at src/libstd/panicking.rs:491
5: std::panicking::continue_panic_fmt
at src/libstd/panicking.rs:398
6: rust_begin_unwind
at src/libstd/panicking.rs:325
7: core::panicking::panic_fmt
at src/libcore/panicking.rs:95
8: core::result::unwrap_failed
at /rustc/9fda7c2237db910e41d6a712e9a2139b352e558b/src/libcore/macros.rs:26
9: <core::result::Result<T, E>>::expect
at /rustc/9fda7c2237db910e41d6a712e9a2139b352e558b/src/libcore/result.rs:835
10: <timely_communication::initialize::WorkerGuards<T> as core::ops::drop::Drop>::drop
at ./communication/src/initialize.rs:288
11: core::ptr::real_drop_in_place
at /rustc/9fda7c2237db910e41d6a712e9a2139b352e558b/src/libcore/ptr.rs:204
12: bfs::main
at examples/bfs.rs:143
13: std::rt::lang_start::{{closure}}
at /rustc/9fda7c2237db910e41d6a712e9a2139b352e558b/src/libstd/rt.rs:74
14: std::panicking::try::do_call
at src/libstd/rt.rs:59
at src/libstd/panicking.rs:310
15: __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:102
16: std::rt::lang_start_internal
at src/libstd/panicking.rs:289
at src/libstd/panic.rs:398
at src/libstd/rt.rs:58
17: std::rt::lang_start
at /rustc/9fda7c2237db910e41d6a712e9a2139b352e558b/src/libstd/rt.rs:74
18: main
19: __libc_start_main
20: _start
This is what I changed:
From c28481d0b4f02007be3893d5ff51231dcbf601f3 Mon Sep 17 00:00:00 2001
From: Moritz Hoffmann <moritz.hoffmann@inf.ethz.ch>
Date: Wed, 20 Feb 2019 12:30:29 +0100
Subject: [PATCH] Demonstrate panics when not connecting feedback operators
Signed-off-by: Moritz Hoffmann <moritz.hoffmann@inf.ethz.ch>
---
examples/bfs.rs | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/examples/bfs.rs b/examples/bfs.rs
index 78e3facd..17c5ef5c 100644
--- a/examples/bfs.rs
+++ b/examples/bfs.rs
@@ -138,8 +138,7 @@ fn main() {
});
}
)
- .concat(&(0..1).map(|x| (x,x)).to_stream(scope))
- .connect_loop(handle);
+ .concat(&(0..1).map(|x| (x,x)).to_stream(scope));
});
}).unwrap(); // asserts error-free execution;
}
--
2.20.1
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the failure with cargo run --example bfs 10 50 after reviewing the change in examples/bfs.rs. Start at the assertion in src/progress/nested/subgraph.rs:148 and the dataflow path shown in the backtrace. Done should mean the example no longer panics when the Feedback operator is not connected with connect_loop.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100