TimelyDataflow / TimelyDataflow/timely-dataflow

Timely panics when not connecting Feedback operator

Open
#236 2 comments 0 reactions 0 assignees View on GitHub

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.