tokio-rs / axum

Ergonomic and modular web framework built with Tokio, Tower, and Hyper
19.22k stars 1.06k forks source link

Fallback panics on CONNECT requests #1955

Closed Power2All closed 1 year ago

Power2All commented 1 year ago

Bug Report

Version

├── axum v0.6.16
│   ├── async-trait v0.1.68 (proc-macro) (*)
│   ├── axum-core v0.3.4
│   │   ├── async-trait v0.1.68 (proc-macro) (*)
│   │   ├── bytes v1.4.0
│   │   ├── futures-util v0.3.28
│   │   │   ├── futures-channel v0.3.28
│   │   │   │   ├── futures-core v0.3.28
│   │   │   │   └── futures-sink v0.3.28
│   │   │   ├── futures-core v0.3.28
│   │   │   ├── futures-io v0.3.28
│   │   │   ├── futures-macro v0.3.28 (proc-macro)
│   │   │   │   ├── proc-macro2 v1.0.56 (*)
│   │   │   │   ├── quote v1.0.26 (*)
│   │   │   │   └── syn v2.0.15 (*)
│   │   │   ├── futures-sink v0.3.28
│   │   │   ├── futures-task v0.3.28
│   │   │   ├── memchr v2.5.0
│   │   │   ├── pin-project-lite v0.2.9
│   │   │   ├── pin-utils v0.1.0
│   │   │   └── slab v0.4.8 (*)
│   │   ├── http v0.2.9
│   │   │   ├── bytes v1.4.0
│   │   │   ├── fnv v1.0.7
│   │   │   └── itoa v1.0.6
│   │   ├── http-body v0.4.5
│   │   │   ├── bytes v1.4.0
│   │   │   ├── http v0.2.9 (*)
│   │   │   └── pin-project-lite v0.2.9
│   │   ├── mime v0.3.17
│   │   ├── tower-layer v0.3.2
│   │   └── tower-service v0.3.2
│   │   [build-dependencies]
│   │   └── rustversion v1.0.12 (proc-macro)
│   ├── bitflags v1.3.2
│   ├── bytes v1.4.0
│   ├── futures-util v0.3.28 (*)
│   ├── http v0.2.9 (*)
│   ├── http-body v0.4.5 (*)
│   ├── hyper v0.14.26
│   │   ├── bytes v1.4.0
│   │   ├── futures-channel v0.3.28 (*)
│   │   ├── futures-core v0.3.28
│   │   ├── futures-util v0.3.28 (*)
│   │   ├── h2 v0.3.18
│   │   │   ├── bytes v1.4.0
│   │   │   ├── fnv v1.0.7
│   │   │   ├── futures-core v0.3.28
│   │   │   ├── futures-sink v0.3.28
│   │   │   ├── futures-util v0.3.28 (*)
│   │   │   ├── http v0.2.9 (*)
│   │   │   ├── indexmap v1.9.3
│   │   │   │   └── hashbrown v0.12.3
│   │   │   │       └── ahash v0.7.6
│   │   │   │           ├── getrandom v0.2.9
│   │   │   │           │   ├── cfg-if v1.0.0
│   │   │   │           │   └── libc v0.2.142
│   │   │   │           └── once_cell v1.17.1
│   │   │   │           [build-dependencies]
│   │   │   │           └── version_check v0.9.4
│   │   │   │   [build-dependencies]
│   │   │   │   └── autocfg v1.1.0
│   │   │   ├── slab v0.4.8 (*)
│   │   │   ├── tokio v1.27.0
│   │   │   │   ├── bytes v1.4.0
│   │   │   │   ├── libc v0.2.142
│   │   │   │   ├── mio v0.8.6
│   │   │   │   │   ├── libc v0.2.142
│   │   │   │   │   └── log v0.4.17 (*)
│   │   │   │   ├── num_cpus v1.15.0
│   │   │   │   │   └── libc v0.2.142
│   │   │   │   ├── parking_lot v0.12.1
│   │   │   │   │   ├── lock_api v0.4.9
│   │   │   │   │   │   └── scopeguard v1.1.0
│   │   │   │   │   │   [build-dependencies]
│   │   │   │   │   │   └── autocfg v1.1.0
│   │   │   │   │   └── parking_lot_core v0.9.7
│   │   │   │   │       ├── cfg-if v1.0.0
│   │   │   │   │       ├── libc v0.2.142
│   │   │   │   │       └── smallvec v1.10.0
│   │   │   │   ├── pin-project-lite v0.2.9
│   │   │   │   ├── signal-hook-registry v1.4.1
│   │   │   │   │   └── libc v0.2.142
│   │   │   │   ├── socket2 v0.4.9 (*)
│   │   │   │   └── tokio-macros v2.0.0 (proc-macro)
│   │   │   │       ├── proc-macro2 v1.0.56 (*)
│   │   │   │       ├── quote v1.0.26 (*)
│   │   │   │       └── syn v2.0.15 (*)
│   │   │   │   [build-dependencies]
│   │   │   │   └── autocfg v1.1.0
│   │   │   ├── tokio-util v0.7.7
│   │   │   │   ├── bytes v1.4.0
│   │   │   │   ├── futures-core v0.3.28
│   │   │   │   ├── futures-sink v0.3.28
│   │   │   │   ├── pin-project-lite v0.2.9
│   │   │   │   ├── tokio v1.27.0 (*)
│   │   │   │   └── tracing v0.1.37
│   │   │   │       ├── cfg-if v1.0.0
│   │   │   │       ├── log v0.4.17 (*)
│   │   │   │       ├── pin-project-lite v0.2.9
│   │   │   │       └── tracing-core v0.1.30
│   │   │   │           └── once_cell v1.17.1
│   │   │   └── tracing v0.1.37 (*)
│   │   ├── http v0.2.9 (*)
│   │   ├── http-body v0.4.5 (*)
│   │   ├── httparse v1.8.0
│   │   ├── httpdate v1.0.2
│   │   ├── itoa v1.0.6
│   │   ├── pin-project-lite v0.2.9
│   │   ├── socket2 v0.4.9 (*)
│   │   ├── tokio v1.27.0 (*)
│   │   ├── tower-service v0.3.2
│   │   ├── tracing v0.1.37 (*)
│   │   └── want v0.3.0
│   │       ├── log v0.4.17 (*)
│   │       └── try-lock v0.2.4
│   ├── itoa v1.0.6
│   ├── matchit v0.7.0
│   ├── memchr v2.5.0
│   ├── mime v0.3.17
│   ├── percent-encoding v2.2.0
│   ├── pin-project-lite v0.2.9
│   ├── serde v1.0.160
│   │   └── serde_derive v1.0.160 (proc-macro)
│   │       ├── proc-macro2 v1.0.56 (*)
│   │       ├── quote v1.0.26 (*)
│   │       └── syn v2.0.15 (*)
│   ├── serde_json v1.0.96
│   │   ├── itoa v1.0.6
│   │   ├── ryu v1.0.13
│   │   └── serde v1.0.160 (*)
│   ├── serde_path_to_error v0.1.11
│   │   └── serde v1.0.160 (*)
│   ├── serde_urlencoded v0.7.1
│   │   ├── form_urlencoded v1.1.0
│   │   │   └── percent-encoding v2.2.0
│   │   ├── itoa v1.0.6
│   │   ├── ryu v1.0.13
│   │   └── serde v1.0.160 (*)
│   ├── sync_wrapper v0.1.2
│   ├── tokio v1.27.0 (*)
│   ├── tower v0.4.13
│   │   ├── futures-core v0.3.28
│   │   ├── futures-util v0.3.28 (*)
│   │   ├── pin-project v1.0.12
│   │   │   └── pin-project-internal v1.0.12 (proc-macro)
│   │   │       ├── proc-macro2 v1.0.56 (*)
│   │   │       ├── quote v1.0.26 (*)
│   │   │       └── syn v1.0.109 (*)
│   │   ├── pin-project-lite v0.2.9
│   │   ├── tokio v1.27.0 (*)
│   │   ├── tower-layer v0.3.2
│   │   ├── tower-service v0.3.2
│   │   └── tracing v0.1.37 (*)
│   ├── tower-layer v0.3.2
│   └── tower-service v0.3.2
│   [build-dependencies]
│   └── rustversion v1.0.12 (proc-macro)
├── axum-client-ip v0.4.0
│   ├── axum v0.6.16 (*)
│   ├── forwarded-header-value v0.1.1
│   │   ├── nonempty v0.7.0
│   │   └── thiserror v1.0.40
│   │       └── thiserror-impl v1.0.40 (proc-macro)
│   │           ├── proc-macro2 v1.0.56 (*)
│   │           ├── quote v1.0.26 (*)
│   │           └── syn v2.0.15 (*)
│   └── serde v1.0.160 (*)
├── axum-server v0.4.7
│   ├── arc-swap v1.6.0
│   ├── bytes v1.4.0
│   ├── futures-util v0.3.28 (*)
│   ├── http v0.2.9 (*)
│   ├── http-body v0.4.5 (*)
│   ├── hyper v0.14.26 (*)
│   ├── pin-project-lite v0.2.9
│   ├── rustls v0.20.8
│   │   ├── log v0.4.17 (*)
│   │   ├── ring v0.16.20
│   │   │   ├── libc v0.2.142
│   │   │   ├── once_cell v1.17.1
│   │   │   ├── spin v0.5.2
│   │   │   └── untrusted v0.7.1
│   │   │   [build-dependencies]
│   │   │   └── cc v1.0.79
│   │   ├── sct v0.7.0
│   │   │   ├── ring v0.16.20 (*)
│   │   │   └── untrusted v0.7.1
│   │   └── webpki v0.22.0
│   │       ├── ring v0.16.20 (*)
│   │       └── untrusted v0.7.1
│   ├── rustls-pemfile v1.0.2
│   │   └── base64 v0.21.0
│   ├── tokio v1.27.0 (*)
│   ├── tokio-rustls v0.23.4
│   │   ├── rustls v0.20.8 (*)
│   │   ├── tokio v1.27.0 (*)
│   │   └── webpki v0.22.0 (*)
│   └── tower-service v0.3.2

Platform

Ubuntu 22.04

Description

There is a bug it seems in the Axum code of 0.6.16 where it reaches unreachable code, and panic errors.

thread 'tokio-runtime-worker' panicked at 'internal error: entered unreachable code', /root/.cargo/registry/src/github.com-1ecc6299db9ec823/axum-0.6.16/src/routing/mod.rs:312:45

I tried to cleanup the registry and re-download and re-compile the code, but it still happens. Going to downgrade it a minor version, and see if it happens on former versions. Will report and edit this post if I got any.

Power2All commented 1 year ago

@davidpdrsn No issues anymore, your fix solved it permanently, thanks ! Shall I close the ticket, so you can make a merge request or something ?

davidpdrsn commented 1 year ago

Great!

I'd like to close the issue by merging the PR. That way GitHub links them together.

davidpdrsn commented 1 year ago

I guess the PR didn't close this 😅 anyways fixed in https://github.com/tokio-rs/axum/pull/1958 and released in 0.6.17 🎉

Power2All commented 1 year ago

I think there is still a performance problem with the latest version. Will check with v0.6.12 again to see if it still has a performance problem eventually. Loading from the service is very slow eventually, so something seems to be up.

[Edit] First trying to see if it's a SQLite3 lock issue. Noticed this when I shut it down, might be my own connect string ;)

davidpdrsn commented 1 year ago

I did a bunch of benchmarking for another issue and nesting is faster in 0.6.13+ whereas fallbacks are a bit slower. Otherwise performance should be the same.