From 9e51116da21c3c1320fc9f2fd65b4c79332dc138 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 01:53:03 +0000 Subject: [PATCH 1/7] chore: remove unusable re-export --- actix-web/src/response/mod.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/actix-web/src/response/mod.rs b/actix-web/src/response/mod.rs index 11fd28301..16bdc619c 100644 --- a/actix-web/src/response/mod.rs +++ b/actix-web/src/response/mod.rs @@ -5,8 +5,6 @@ mod responder; #[allow(clippy::module_inception)] mod response; -#[cfg(feature = "cookies")] -pub use self::response::CookieIter; pub use self::{ builder::HttpResponseBuilder, customize_responder::CustomizeResponder, responder::Responder, response::HttpResponse, From d3d0208cbd6cbbd7c92f1b1bcbf6784662de6a0a Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 01:56:10 +0000 Subject: [PATCH 2/7] chore: fmt workflows --- .github/workflows/bench.yml | 2 +- .github/workflows/upload-doc.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index 910cb24b9..fd6bc6d73 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -5,7 +5,7 @@ on: branches: [master] permissions: - contents: read # to fetch code (actions/checkout) + contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/.github/workflows/upload-doc.yml b/.github/workflows/upload-doc.yml index 2037e34f5..7dcc8255c 100644 --- a/.github/workflows/upload-doc.yml +++ b/.github/workflows/upload-doc.yml @@ -6,6 +6,7 @@ on: permissions: contents: read + concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true From ce18f35e0344bee88d4422b5ccb81c23523ddb75 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Sun, 29 Oct 2023 18:48:03 +0000 Subject: [PATCH 3/7] docs: improve HttpServer docs on worker / bind relationship wrt factory instantiations --- actix-web/src/server.rs | 53 ++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/actix-web/src/server.rs b/actix-web/src/server.rs index e92985d39..2cc00cb9f 100644 --- a/actix-web/src/server.rs +++ b/actix-web/src/server.rs @@ -99,6 +99,12 @@ where B: MessageBody + 'static, { /// Create new HTTP server with application factory + /// + /// # Worker Count + /// + /// The `factory` will be instantiated multiple times in most configurations. See + /// [`bind()`](Self::bind()) docs for more on how worker count and bind address resolution + /// causes multiple server factory instantiations. pub fn new(factory: F) -> Self { HttpServer { factory, @@ -119,7 +125,18 @@ where /// Sets number of workers to start (per bind address). /// - /// By default, the number of available physical CPUs is used as the worker count. + /// The default worker count is the determined by [`std::thread::available_parallelism()`]. See + /// its documentation to determine what behavior you should expect when server is run. + /// + /// Note that the server factory passed to [`new`](Self::new()) will be instantiated **at least + /// once per worker**. See [`bind()`](Self::bind()) docs for more on how worker count and bind + /// address resolution causes multiple server factory instantiations. + /// + /// `num` must be greater than 0. + /// + /// # Panics + /// + /// Panics if `num` is 0. pub fn workers(mut self, num: usize) -> Self { self.builder = self.builder.workers(num); self @@ -319,23 +336,41 @@ where /// Resolves socket address(es) and binds server to created listener(s). /// /// # Hostname Resolution - /// When `addr` includes a hostname, it is possible for this method to bind to both the IPv4 and - /// IPv6 addresses that result from a DNS lookup. You can test this by passing `localhost:8080` - /// and noting that the server binds to `127.0.0.1:8080` _and_ `[::1]:8080`. To bind additional - /// addresses, call this method multiple times. + /// + /// When `addrs` includes a hostname, it is possible for this method to bind to both the IPv4 + /// and IPv6 addresses that result from a DNS lookup. You can test this by passing + /// `localhost:8080` and noting that the server binds to `127.0.0.1:8080` _and_ `[::1]:8080`. To + /// bind additional addresses, call this method multiple times. /// /// Note that, if a DNS lookup is required, resolving hostnames is a blocking operation. /// + /// # Worker Count + /// + /// The `factory` will be instantiated multiple times in most scenarios. The number of + /// instantiations is number of [`workers`](Self::workers()) × number of sockets resolved by + /// `addrs`. + /// + /// For example, if you've manually set [`workers`](Self::workers()) to 2, and use `127.0.0.1` + /// as the bind `addrs`, then `factory` will be instantiated twice. However, using `localhost` + /// as the bind `addrs` can often resolve to both `127.0.0.1` (IPv4) _and_ `::1` (IPv6), causing + /// the `factory` to be instantiated 4 times (2 workers × 2 bind addresses). + /// + /// Using a bind address of `0.0.0.0`, which signals to use all interfaces, may also multiple + /// the number of instantiations in a similar way. + /// /// # Typical Usage + /// /// In general, use `127.0.0.1:` when testing locally and `0.0.0.0:` when deploying /// (with or without a reverse proxy or load balancer) so that the server is accessible. /// /// # Errors + /// /// Returns an `io::Error` if: /// - `addrs` cannot be resolved into one or more socket addresses; /// - all the resolved socket addresses are already bound. /// /// # Example + /// /// ``` /// # use actix_web::{App, HttpServer}; /// # fn inner() -> std::io::Result<()> { @@ -356,6 +391,8 @@ where /// Resolves socket address(es) and binds server to created listener(s) for plaintext HTTP/1.x /// or HTTP/2 connections. + /// + /// See [`bind()`](Self::bind()) for more details on `addrs` argument. #[cfg(feature = "http2")] pub fn bind_auto_h2c(mut self, addrs: A) -> io::Result { let sockets = bind_addrs(addrs, self.backlog)?; @@ -370,7 +407,7 @@ where /// Resolves socket address(es) and binds server to created listener(s) for TLS connections /// using Rustls v0.20. /// - /// See [`bind()`](Self::bind) for more details on `addrs` argument. + /// See [`bind()`](Self::bind()) for more details on `addrs` argument. /// /// ALPN protocols "h2" and "http/1.1" are added to any configured ones. #[cfg(feature = "rustls-0_20")] @@ -389,7 +426,7 @@ where /// Resolves socket address(es) and binds server to created listener(s) for TLS connections /// using Rustls v0.21. /// - /// See [`bind()`](Self::bind) for more details on `addrs` argument. + /// See [`bind()`](Self::bind()) for more details on `addrs` argument. /// /// ALPN protocols "h2" and "http/1.1" are added to any configured ones. #[cfg(feature = "rustls-0_21")] @@ -408,7 +445,7 @@ where /// Resolves socket address(es) and binds server to created listener(s) for TLS connections /// using OpenSSL. /// - /// See [`bind()`](Self::bind) for more details on `addrs` argument. + /// See [`bind()`](Self::bind()) for more details on `addrs` argument. /// /// ALPN protocols "h2" and "http/1.1" are added to any configured ones. #[cfg(feature = "openssl")] From 32ddf972c6be7221b190dbdff43d5d082a334cbd Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Mon, 30 Oct 2023 00:03:22 +0000 Subject: [PATCH 4/7] docs: add guarded-listings example --- actix-files/Cargo.toml | 1 + actix-files/examples/guarded-listing.rs | 33 +++++++++++++++++++++++++ actix-files/src/files.rs | 2 +- 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 actix-files/examples/guarded-listing.rs diff --git a/actix-files/Cargo.toml b/actix-files/Cargo.toml index 80c609d1d..efecb0889 100644 --- a/actix-files/Cargo.toml +++ b/actix-files/Cargo.toml @@ -47,4 +47,5 @@ actix-server = { version = "2.2", optional = true } # ensure matching tokio-urin actix-rt = "2.7" actix-test = "0.1" actix-web = "4" +env_logger = "0.10" tempfile = "3.2" diff --git a/actix-files/examples/guarded-listing.rs b/actix-files/examples/guarded-listing.rs new file mode 100644 index 000000000..e8cde0c85 --- /dev/null +++ b/actix-files/examples/guarded-listing.rs @@ -0,0 +1,33 @@ +use actix_files::Files; +use actix_web::{get, guard, middleware, App, HttpServer, Responder}; + +const EXAMPLES_DIR: &str = concat![env!("CARGO_MANIFEST_DIR"), "/examples"]; + +#[get("/")] +async fn index() -> impl Responder { + "Hello world!" +} + +#[actix_web::main] +async fn main() -> std::io::Result<()> { + env_logger::init_from_env(env_logger::Env::new().default_filter_or("info")); + + log::info!("starting HTTP server at http://localhost:8080"); + + HttpServer::new(|| { + App::new() + .service(index) + .service( + Files::new("/assets", EXAMPLES_DIR) + .show_files_listing() + .guard(guard::Header("show-listing", "?1")), + ) + .service(Files::new("/assets", EXAMPLES_DIR)) + .wrap(middleware::Compress::default()) + .wrap(middleware::Logger::default()) + }) + .bind(("127.0.0.1", 8080))? + .workers(2) + .run() + .await +} diff --git a/actix-files/src/files.rs b/actix-files/src/files.rs index e34b5f26a..cfd3b9c22 100644 --- a/actix-files/src/files.rs +++ b/actix-files/src/files.rs @@ -235,7 +235,7 @@ impl Files { /// request starts being handled by the file service, it will not be able to back-out and try /// the next service, you will simply get a 404 (or 405) error response. /// - /// To allow `POST` requests to retrieve files, see [`Files::use_guards`]. + /// To allow `POST` requests to retrieve files, see [`Files::method_guard()`]. /// /// # Examples /// ``` From 40196f16be819e58c185069b4b1b3fd24f97694c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 00:05:50 +0000 Subject: [PATCH 5/7] build(deps): bump taiki-e/cache-cargo-install-action from 1.2.2 to 1.3.0 (#3167) Bumps [taiki-e/cache-cargo-install-action](https://github.com/taiki-e/cache-cargo-install-action) from 1.2.2 to 1.3.0. - [Release notes](https://github.com/taiki-e/cache-cargo-install-action/releases) - [Changelog](https://github.com/taiki-e/cache-cargo-install-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/taiki-e/cache-cargo-install-action/compare/v1.2.2...v1.3.0) --- updated-dependencies: - dependency-name: taiki-e/cache-cargo-install-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/clippy-fmt.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/clippy-fmt.yml b/.github/workflows/clippy-fmt.yml index 084b88b24..854944995 100644 --- a/.github/workflows/clippy-fmt.yml +++ b/.github/workflows/clippy-fmt.yml @@ -70,7 +70,7 @@ jobs: with: toolchain: nightly-2023-08-25 - - uses: taiki-e/cache-cargo-install-action@v1.2.2 + - uses: taiki-e/cache-cargo-install-action@v1.3.0 with: tool: cargo-public-api From 3b8d4de0e04dcd97bd430868fe697d0ba713235a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 01:12:42 +0000 Subject: [PATCH 6/7] build(deps): bump taiki-e/install-action from 2.20.14 to 2.21.3 (#3179) Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.20.14 to 2.21.3. - [Release notes](https://github.com/taiki-e/install-action/releases) - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/taiki-e/install-action/compare/v2.20.14...v2.21.3) --- updated-dependencies: - dependency-name: taiki-e/install-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-post-merge.yml | 6 +++--- .github/workflows/ci.yml | 2 +- .github/workflows/coverage.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-post-merge.yml b/.github/workflows/ci-post-merge.yml index 6db41efdd..cb3ea77ca 100644 --- a/.github/workflows/ci-post-merge.yml +++ b/.github/workflows/ci-post-merge.yml @@ -45,7 +45,7 @@ jobs: toolchain: ${{ matrix.version.version }} - name: Install cargo-hack - uses: taiki-e/install-action@v2.20.14 + uses: taiki-e/install-action@v2.21.3 with: tool: cargo-hack @@ -85,7 +85,7 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 - name: Install cargo-hack - uses: taiki-e/install-action@v2.20.14 + uses: taiki-e/install-action@v2.21.3 with: tool: cargo-hack @@ -106,7 +106,7 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 - name: Install nextest - uses: taiki-e/install-action@v2.20.14 + uses: taiki-e/install-action@v2.21.3 with: tool: nextest diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 418ca5a73..ca9673da4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: toolchain: ${{ matrix.version.version }} - name: Install cargo-hack - uses: taiki-e/install-action@v2.20.14 + uses: taiki-e/install-action@v2.21.3 with: tool: cargo-hack diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index ddfc2fe03..73931c238 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -23,7 +23,7 @@ jobs: components: llvm-tools-preview - name: Install cargo-llvm-cov - uses: taiki-e/install-action@v2.20.14 + uses: taiki-e/install-action@v2.21.3 with: tool: cargo-llvm-cov From b78f6da05f16de9c8f6bf20b377daa964904ef3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 01:18:45 +0000 Subject: [PATCH 7/7] build(deps): update zstd requirement from 0.12 to 0.13 (#3165) * build(deps): update zstd requirement from 0.12 to 0.13 Updates the requirements on [zstd](https://github.com/gyscos/zstd-rs) to permit the latest version. - [Release notes](https://github.com/gyscos/zstd-rs/releases) - [Commits](https://github.com/gyscos/zstd-rs/compare/v0.12.0...v0.13.0) --- updated-dependencies: - dependency-name: zstd dependency-type: direct:production ... Signed-off-by: dependabot[bot] * chore: update changelogs --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Rob Ede --- actix-http/CHANGES.md | 4 ++++ actix-http/Cargo.toml | 2 +- actix-web/CHANGES.md | 4 ++++ actix-web/Cargo.toml | 2 +- awc/CHANGES.md | 1 + awc/Cargo.toml | 2 +- 6 files changed, 12 insertions(+), 3 deletions(-) diff --git a/actix-http/CHANGES.md b/actix-http/CHANGES.md index 860ee3b6c..318df5a4d 100644 --- a/actix-http/CHANGES.md +++ b/actix-http/CHANGES.md @@ -2,6 +2,10 @@ ## Unreleased +### Changed + +- Updated `zstd` dependency to `0.13`. + ## 3.4.0 ### Added diff --git a/actix-http/Cargo.toml b/actix-http/Cargo.toml index c19ce0161..9e116c964 100644 --- a/actix-http/Cargo.toml +++ b/actix-http/Cargo.toml @@ -103,7 +103,7 @@ actix-tls = { version = "3.1", default-features = false, optional = true } # compress-* brotli = { version = "3.3.3", optional = true } flate2 = { version = "1.0.13", optional = true } -zstd = { version = "0.12", optional = true } +zstd = { version = "0.13", optional = true } [dev-dependencies] actix-http-test = { version = "3", features = ["openssl"] } diff --git a/actix-web/CHANGES.md b/actix-web/CHANGES.md index 6ed97b671..50728a839 100644 --- a/actix-web/CHANGES.md +++ b/actix-web/CHANGES.md @@ -2,6 +2,10 @@ ## Unreleased +### Changed + +- Updated `zstd` dependency to `0.13`. + ## 4.4.0 ### Added diff --git a/actix-web/Cargo.toml b/actix-web/Cargo.toml index 0f874d3f8..994f6359f 100644 --- a/actix-web/Cargo.toml +++ b/actix-web/Cargo.toml @@ -122,7 +122,7 @@ static_assertions = "1" tls-openssl = { package = "openssl", version = "0.10.55" } tls-rustls = { package = "rustls", version = "0.21" } tokio = { version = "1.24.2", features = ["rt-multi-thread", "macros"] } -zstd = "0.12" +zstd = "0.13" [[test]] name = "test_server" diff --git a/awc/CHANGES.md b/awc/CHANGES.md index 1032e196c..3a1996cba 100644 --- a/awc/CHANGES.md +++ b/awc/CHANGES.md @@ -3,6 +3,7 @@ ## Unreleased - Update `trust-dns-resolver` dependency to `0.23`. +- Updated `zstd` dependency to `0.13`. ## 3.2.0 diff --git a/awc/Cargo.toml b/awc/Cargo.toml index 027bb161e..90f68e4c4 100644 --- a/awc/Cargo.toml +++ b/awc/Cargo.toml @@ -111,7 +111,7 @@ static_assertions = "1.1" rcgen = "0.11" rustls-pemfile = "1" tokio = { version = "1.24.2", features = ["rt-multi-thread", "macros"] } -zstd = "0.12" +zstd = "0.13" [[example]] name = "client"