nats-io / nats.rs

Rust client for NATS, the cloud native messaging system.
Apache License 2.0
980 stars 159 forks source link

Panic in client.rs, unwrapping None server version. #1271

Closed ajlane closed 1 month ago

ajlane commented 1 month ago

Observed behavior

While creating a consumer with create_consumer_on_stream, I get a panic from the client library.

RUST_BACKTRACE=full

    Finished dev [unoptimized + debuginfo] target(s) in 0.15s
2024-05-27T07:27:33.977198Z  INFO myproject_workers: Connected to NATS server at nats://connect.ngs.global:4222
2024-05-27T07:27:34.015994Z  INFO myproject_capture: Subscribing to messages
thread 'tokio-runtime-worker' panicked at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/async-nats-0.35.1/src/client.rs:131:74:
called `Option::unwrap()` on a `None` value
stack backtrace:
   0:     0x5c7c8ee76d06 - std::backtrace_rs::backtrace::libunwind::trace::hbee8a7973eeb6c93
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/../../backtrace/src/backtrace/libunwind.rs:104:5
   1:     0x5c7c8ee76d06 - std::backtrace_rs::backtrace::trace_unsynchronized::hc8ac75eea3aa6899
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x5c7c8ee76d06 - std::sys_common::backtrace::_print_fmt::hc7f3e3b5298b1083
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x5c7c8ee76d06 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hbb235daedd7c6190
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x5c7c8eea6aa0 - core::fmt::rt::Argument::fmt::h76c38a80d925a410
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/fmt/rt.rs:142:9
   5:     0x5c7c8eea6aa0 - core::fmt::write::h3ed6aeaa977c8e45
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/fmt/mod.rs:1120:17
   6:     0x5c7c8ee72eaf - std::io::Write::write_fmt::h78b18af5775fedb5
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/io/mod.rs:1810:15
   7:     0x5c7c8ee76ae4 - std::sys_common::backtrace::_print::h5d645a07e0fcfdbb
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x5c7c8ee76ae4 - std::sys_common::backtrace::print::h85035a511aafe7a8
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x5c7c8ee784f7 - std::panicking::default_hook::{{closure}}::hcce8cea212785a25
  10:     0x5c7c8ee78259 - std::panicking::default_hook::hf5fcb0f213fe709a
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:292:9
  11:     0x5c7c8ee78988 - std::panicking::rust_panic_with_hook::h095fccf1dc9379ee
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:779:13
  12:     0x5c7c8ee78829 - std::panicking::begin_panic_handler::{{closure}}::h032ba12139b353db
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:649:13
  13:     0x5c7c8ee77206 - std::sys_common::backtrace::__rust_end_short_backtrace::h9259bc2ff8fd0f76
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:171:18
  14:     0x5c7c8ee785c0 - rust_begin_unwind
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:645:5
  15:     0x5c7c8c9e3495 - core::panicking::panic_fmt::h784f20a50eaab275
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:72:14
  16:     0x5c7c8c9e3553 - core::panicking::panic::hb837a5ebbbe5b188
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:144:5
  17:     0x5c7c8e639497 - core::option::Option<T>::unwrap::h57b89a122b816d6b
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/option.rs:931:21
  18:     0x5c7c8e59c307 - async_nats::client::Client::is_server_compatible::hee6d1f30cabb5f4a
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/async-nats-0.35.1/src/client.rs:131:39
  19:     0x5c7c8d0c4883 - async_nats::jetstream::context::Context::create_consumer_on_stream_action::{{closure}}::h49b10c21e846daff
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/async-nats-0.35.1/src/jetstream/context.rs:1006:16
  20:     0x5c7c8d0c457c - async_nats::jetstream::context::Context::create_consumer_on_stream::{{closure}}::hee337bae8b57b9ba
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/async-nats-0.35.1/src/jetstream/context.rs:914:14
  21:     0x5c7c8cd1ec83 - myproject_workers::Worker::run_consumer::{{closure}}::inner_run_consumer::{{closure}}::{{closure}}::h2c818a1511b4e564
                               at /home/aaron/Projects/myproject/workers/core_lib/src/lib.rs:347:30
  22:     0x5c7c8ceb373c - <core::pin::Pin<P> as core::future::future::Future>::poll::h786379542d387c84
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/future/future.rs:124:9
  23:     0x5c7c8d27367c - tokio::runtime::task::core::Core<T,S>::poll::{{closure}}::h65e3d2ca3ab19b0d
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/core.rs:328:17
  24:     0x5c7c8d268bb5 - tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut::h533a096784ede138
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/loom/std/unsafe_cell.rs:16:9
  25:     0x5c7c8d268bb5 - tokio::runtime::task::core::Core<T,S>::poll::hf80869e02a3c24cb
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/core.rs:317:13
  26:     0x5c7c8cf8f146 - tokio::runtime::task::harness::poll_future::{{closure}}::h6439425dcd35f76b
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:485:19
  27:     0x5c7c8d5ed89c - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h58f852ac87debfad
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panic/unwind_safe.rs:272:9
  28:     0x5c7c8d5ab04d - std::panicking::try::do_call::hb04768802778848a
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  29:     0x5c7c8d5e88eb - __rust_try
  30:     0x5c7c8d55e263 - std::panicking::try::h0be4a25da01185c1
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  31:     0x5c7c8d4b1a5b - std::panic::catch_unwind::h1077e0bc1b1b2438
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  32:     0x5c7c8cf6d975 - tokio::runtime::task::harness::poll_future::h70415be7de4a0ecc
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:473:18
  33:     0x5c7c8cfb4a09 - tokio::runtime::task::harness::Harness<T,S>::poll_inner::hd1660a4bdf21281f
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:208:27
  34:     0x5c7c8cff0eb7 - tokio::runtime::task::harness::Harness<T,S>::poll::hdfd7c55c43b90d26
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:153:15
  35:     0x5c7c8d47eb1d - tokio::runtime::task::raw::poll::hc2a829e217bdf267
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/raw.rs:271:5
  36:     0x5c7c8ed8aba7 - tokio::runtime::task::raw::RawTask::poll::h38d6ca48eb33bec3
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/raw.rs:201:18
  37:     0x5c7c8edc57b2 - tokio::runtime::task::LocalNotified<S>::run::h52336663c3ab89ce
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/mod.rs:427:9
  38:     0x5c7c8eda0295 - tokio::runtime::scheduler::multi_thread::worker::Context::run_task::{{closure}}::hd2a0868f29f172a8
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/multi_thread/worker.rs:639:17
  39:     0x5c7c8ed9fa94 - tokio::runtime::coop::with_budget::hcdff3d7694ecfd8b
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/coop.rs:107:5
  40:     0x5c7c8ed9fa94 - tokio::runtime::coop::budget::h4b992313e606a3a7
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/coop.rs:73:5
  41:     0x5c7c8ed9fa94 - tokio::runtime::scheduler::multi_thread::worker::Context::run_task::h4932390b722b072c
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/multi_thread/worker.rs:575:9
  42:     0x5c7c8ed9f131 - tokio::runtime::scheduler::multi_thread::worker::Context::run::h51e1ae54c59f0414
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/multi_thread/worker.rs:526:24
  43:     0x5c7c8ed9ed89 - tokio::runtime::scheduler::multi_thread::worker::run::{{closure}}::{{closure}}::h6d50990162fdcedd
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/multi_thread/worker.rs:491:21
  44:     0x5c7c8edb77e0 - tokio::runtime::context::scoped::Scoped<T>::set::h95ab975518735d2b
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context/scoped.rs:40:9
  45:     0x5c7c8ed9a9eb - tokio::runtime::context::set_scheduler::{{closure}}::h0bc1a4c2e64b5689
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context.rs:176:26
  46:     0x5c7c8edad342 - std::thread::local::LocalKey<T>::try_with::h75b9282374510950
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/thread/local.rs:270:16
  47:     0x5c7c8edac55b - std::thread::local::LocalKey<T>::with::h5ea4f923ace2080c
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/thread/local.rs:246:9
  48:     0x5c7c8ed9a9b4 - tokio::runtime::context::set_scheduler::h9ac9dd782c5c6cfa
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context.rs:176:9
  49:     0x5c7c8ed9ec91 - tokio::runtime::scheduler::multi_thread::worker::run::{{closure}}::hd49f0a27ad668b00
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/multi_thread/worker.rs:486:9
  50:     0x5c7c8edab328 - tokio::runtime::context::runtime::enter_runtime::ha883d24b2bfaa199
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context/runtime.rs:65:16
  51:     0x5c7c8ed9ea2c - tokio::runtime::scheduler::multi_thread::worker::run::hfd939623ae29edcc
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/multi_thread/worker.rs:478:5
  52:     0x5c7c8ed9e89b - tokio::runtime::scheduler::multi_thread::worker::Launch::launch::{{closure}}::heafbe4daa83cf391
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/multi_thread/worker.rs:447:45
  53:     0x5c7c8edc5e4e - <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll::h649890447dce8187
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/blocking/task.rs:42:21
  54:     0x5c7c8edb985d - tokio::runtime::task::core::Core<T,S>::poll::{{closure}}::hc3db144c9d29edb4
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/core.rs:328:17
  55:     0x5c7c8edb8f4f - tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut::h6a8fb5d0bb0988b1
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/loom/std/unsafe_cell.rs:16:9
  56:     0x5c7c8edb8f4f - tokio::runtime::task::core::Core<T,S>::poll::h45d82a5acd2db7d6
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/core.rs:317:13
  57:     0x5c7c8edc0405 - tokio::runtime::task::harness::poll_future::{{closure}}::h624dbce12f4db745
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:485:19
  58:     0x5c7c8ed71454 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::headf68088798efc2
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panic/unwind_safe.rs:272:9
  59:     0x5c7c8eda9d46 - std::panicking::try::do_call::h68e7a4b2564c772e
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  60:     0x5c7c8edab97b - __rust_try
  61:     0x5c7c8eda8d78 - std::panicking::try::h3bc9735d4260b09f
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  62:     0x5c7c8ed71c2b - std::panic::catch_unwind::hcf57b09b86766647
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  63:     0x5c7c8edbfbff - tokio::runtime::task::harness::poll_future::h82d2af1b7234b376
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:473:18
  64:     0x5c7c8edbdb09 - tokio::runtime::task::harness::Harness<T,S>::poll_inner::h1a909249ea60db87
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:208:27
  65:     0x5c7c8edbd7e7 - tokio::runtime::task::harness::Harness<T,S>::poll::h613e48bfcf8c9336
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:153:15
  66:     0x5c7c8ed8ae9d - tokio::runtime::task::raw::poll::h1ce64f5721e6354d
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/raw.rs:271:5
  67:     0x5c7c8ed8aba7 - tokio::runtime::task::raw::RawTask::poll::h38d6ca48eb33bec3
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/raw.rs:201:18
  68:     0x5c7c8edc5877 - tokio::runtime::task::UnownedTask<S>::run::ha7339827f3a12f51
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/mod.rs:464:9
  69:     0x5c7c8ed8fa27 - tokio::runtime::blocking::pool::Task::run::h94447b30aec1049d
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/blocking/pool.rs:159:9
  70:     0x5c7c8ed92b99 - tokio::runtime::blocking::pool::Inner::run::h09e92bff037b0390
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/blocking/pool.rs:513:17
  71:     0x5c7c8ed928d4 - tokio::runtime::blocking::pool::Spawner::spawn_thread::{{closure}}::h4df47d8a5f8b4e66
                               at /home/aaron/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/blocking/pool.rs:471:13
  72:     0x5c7c8ed7f8e6 - std::sys_common::backtrace::__rust_begin_short_backtrace::h36ef78eb0606bbcc
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys_common/backtrace.rs:155:18
  73:     0x5c7c8ed65d82 - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h748c89200ba43d97
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/thread/mod.rs:529:17
  74:     0x5c7c8ed711a2 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h4a32be33db37964e
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panic/unwind_safe.rs:272:9
  75:     0x5c7c8eda9f73 - std::panicking::try::do_call::h91fa2312d026fb8a
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:552:40
  76:     0x5c7c8edab97b - __rust_try
  77:     0x5c7c8eda8bb1 - std::panicking::try::h235d06e9e2af1d40
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:516:19
  78:     0x5c7c8ed65b8f - std::panic::catch_unwind::he77c4bcb8621c0cb
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panic.rs:142:14
  79:     0x5c7c8ed65b8f - std::thread::Builder::spawn_unchecked_::{{closure}}::hb3ac2baf38c6ff0f
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/thread/mod.rs:528:30
  80:     0x5c7c8ed722af - core::ops::function::FnOnce::call_once{{vtable.shim}}::ha7f1f05c3ecd1729
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
  81:     0x5c7c8ee7e0b5 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h12de4fc57affb195
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/alloc/src/boxed.rs:2015:9
  82:     0x5c7c8ee7e0b5 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h3c619f45059d5cf1
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/alloc/src/boxed.rs:2015:9
  83:     0x5c7c8ee7e0b5 - std::sys::unix::thread::Thread::new::thread_start::hbac657605e4b7389
                               at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/sys/unix/thread.rs:108:17
  84:     0x7ec831094ac3 - start_thread
                               at ./nptl/pthread_create.c:442:8
  85:     0x7ec831126850 - __GI___clone3
                               at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
  86:                0x0 - <unknown>

The line in question seems to be:

    pub fn is_server_compatible(&self, major: i64, minor: i64, patch: i64) -> bool {
        let info = self.server_info();

        let server_version_captures = VERSION_RE.captures(&info.version).unwrap();

Expected behavior

No panics, even if misconfigured.

Server and client version

async-nats 0.35.1, connnecting to connect.ngs.global

Host environment

Ubuntu, x86_64

Steps to reproduce

No response

Jarema commented 1 month ago

Thanks for the info. I think I know what it is - a NGS having deployed a version with a suffix in semver that makes our regex unhappy. Will confirm soon and issue a fix followed up by a patch release.

Jarema commented 1 month ago

@ajlane This will happen only in one codepath:

This is caused by the fact that that call checks semver of the server which might not be available yet. Workaround until patch is realeased is to walk standard path:

let stream = jetstream.get_stream()
let consumer = stream.create_consumer()
ajlane commented 1 month ago

Thanks. That workaround works for me.