From cf76edbc5283642ad49c725549dbc04528511dda Mon Sep 17 00:00:00 2001 From: Xin Yin Date: Wed, 27 Dec 2023 10:39:59 +0800 Subject: [PATCH 1/2] dep: upgrade tokio to 1.35.1 Fix painc after all prefetch worker exit for fscache mode. Signed-off-by: Xin Yin --- Cargo.lock | 137 +++++++++++++++++++++++++++++++++++++++++------------ Cargo.toml | 2 +- 2 files changed, 107 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d41243dd05e..04da1334ec7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -498,7 +498,7 @@ dependencies = [ "cfg-if", "libc", "redox_syscall", - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -814,7 +814,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.4", "tokio", "tower-service", "tracing", @@ -908,7 +908,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -970,9 +970,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.147" +version = "0.2.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" [[package]] name = "libsqlite3-sys" @@ -1109,14 +1109,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.5" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "log", "wasi", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1525,7 +1525,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -1556,9 +1556,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -1794,7 +1794,7 @@ dependencies = [ "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -1809,7 +1809,7 @@ version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -1961,6 +1961,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "strsim" version = "0.10.0" @@ -2016,7 +2026,7 @@ dependencies = [ "fastrand", "redox_syscall", "rustix", - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -2077,31 +2087,30 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.25.0" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", - "memchr", "mio", "num_cpus", "pin-project-lite", - "socket2", + "socket2 0.5.5", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "1.8.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.98", + "syn 2.0.37", ] [[package]] @@ -2124,7 +2133,7 @@ dependencies = [ "libc", "scoped-tls", "slab", - "socket2", + "socket2 0.4.4", "tokio", ] @@ -2485,13 +2494,37 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.0", + "windows_aarch64_msvc 0.42.0", + "windows_i686_gnu 0.42.0", + "windows_i686_msvc 0.42.0", + "windows_x86_64_gnu 0.42.0", + "windows_x86_64_gnullvm 0.42.0", + "windows_x86_64_msvc 0.42.0", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -2500,42 +2533,84 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_msvc" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_i686_gnu" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_msvc" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_x86_64_gnu" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_msvc" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "winreg" version = "0.10.1" diff --git a/Cargo.toml b/Cargo.toml index c54f62c0564..fe729262beb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,7 +50,7 @@ rusqlite = { version = "0.30.0", features = ["bundled"] } serde = { version = "1.0.110", features = ["serde_derive", "rc"] } serde_json = "1.0.51" tar = "0.4.40" -tokio = { version = "1.24", features = ["macros"] } +tokio = { version = "1.35.1", features = ["macros"] } # Build static linked openssl library openssl = { version = "0.10.55", features = ["vendored"] } From f08587928bcb02725a8c94e76ecd2b40a76e07d5 Mon Sep 17 00:00:00 2001 From: Yadong Ding Date: Thu, 28 Dec 2023 15:18:52 +0800 Subject: [PATCH 2/2] rust: bump 1.72.1 and fix errors https://rust-lang.github.io/rust-clippy/master/index.html#non_minimal_cfg https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args https://rust-lang.github.io/rust-clippy/master/index.html#reserve_after_initializatio https://rust-lang.github.io/rust-clippy/master/index.html#/arc_with_non_send_sync https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec Signed-off-by: Yadong Ding --- .github/workflows/benchmark.yml | 4 ++-- .github/workflows/convert.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- .github/workflows/smoke.yml | 4 ++-- api/src/error.rs | 2 +- builder/src/core/context.rs | 2 +- builder/src/core/node.rs | 2 +- builder/src/core/tree.rs | 7 ++++--- builder/src/core/v6.rs | 9 ++------- misc/musl-static/Dockerfile | 2 +- rafs/src/lib.rs | 2 +- rafs/src/metadata/direct_v6.rs | 2 +- rafs/src/metadata/inode.rs | 4 ++-- rafs/src/metadata/layout/v6.rs | 3 +-- rust-toolchain.toml | 3 ++- service/src/blob_cache.rs | 4 ++-- service/src/block_device.rs | 24 ++++++++++++------------ service/src/fs_cache.rs | 6 +++--- src/bin/nydus-image/main.rs | 4 ++-- src/bin/nydus-image/unpack/pax.rs | 2 +- src/bin/nydusctl/commands.rs | 6 +++--- storage/src/backend/localdisk.rs | 2 +- storage/src/backend/localfs.rs | 2 +- storage/src/backend/oss.rs | 2 +- storage/src/backend/registry.rs | 2 +- storage/src/cache/filecache/mod.rs | 4 ++-- storage/src/device.rs | 2 +- storage/src/meta/chunk_info_v1.rs | 4 ++-- storage/src/meta/mod.rs | 2 +- storage/src/meta/zran.rs | 2 +- utils/src/compress/mod.rs | 4 ++-- utils/src/compress/zlib_random.rs | 12 ++++++------ utils/src/filemap.rs | 2 +- 33 files changed, 68 insertions(+), 72 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 3b11fe8b7a8..a3b40f23074 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -42,10 +42,10 @@ jobs: with: cache-on-failure: true shared-key: Linux-cargo-amd64 + - uses: dsherret/rust-toolchain-file@v1 - name: Build Nydus run: | - rustup component add rustfmt clippy - make + make release - name: Upload Nydus Binaries uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/convert.yml b/.github/workflows/convert.yml index f60a5730d14..2f588f1da1f 100644 --- a/.github/workflows/convert.yml +++ b/.github/workflows/convert.yml @@ -44,10 +44,10 @@ jobs: with: cache-on-failure: true shared-key: Linux-cargo-amd64 + - uses: dsherret/rust-toolchain-file@v1 - name: Build Nydus run: | - rustup component add rustfmt clippy - make + make release - name: Upload Nydus Binaries uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1e2349417b3..af9091dfd4e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,12 +25,12 @@ jobs: with: cache-on-failure: true shared-key: ${{ runner.os }}-cargo-${{ matrix.arch }} + - uses: dsherret/rust-toolchain-file@v1 - name: Build nydus-rs run: | declare -A rust_target_map=( ["amd64"]="x86_64-unknown-linux-musl" ["arm64"]="aarch64-unknown-linux-musl" ["ppc64le"]="powerpc64le-unknown-linux-gnu" ["riscv64"]="riscv64gc-unknown-linux-gnu") RUST_TARGET=${rust_target_map[${{ matrix.arch }}]} cargo install --locked --version 0.2.4 cross - rustup component add rustfmt clippy make -e RUST_TARGET_STATIC=$RUST_TARGET -e CARGO=cross static-release sudo mv target/$RUST_TARGET/release/nydusd nydusd sudo mv target/$RUST_TARGET/release/nydus-image . @@ -59,6 +59,7 @@ jobs: with: cache-on-failure: true shared-key: ${{ runner.os }}-cargo-${{ matrix.arch }} + - uses: dsherret/rust-toolchain-file@v1 - name: build run: | if [[ "${{matrix.arch}}" == "amd64" ]]; then @@ -68,7 +69,6 @@ jobs: fi cargo install --version 0.2.4 cross rustup target add ${RUST_TARGET} - rustup component add rustfmt clippy make -e RUST_TARGET_STATIC=$RUST_TARGET -e CARGO=cross static-release sudo mv target/$RUST_TARGET/release/nydusd nydusd sudo cp -r misc/configs . diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index 6ddfd0fd4e4..fbb1fc29c39 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -53,12 +53,12 @@ jobs: cache-on-failure: true shared-key: ${{ runner.os }}-cargo-${{ matrix.arch }} save-if: ${{ github.ref == 'refs/heads/master' }} + - uses: dsherret/rust-toolchain-file@v1 - name: Build Nydus run: | declare -A rust_target_map=( ["amd64"]="x86_64-unknown-linux-musl" ["arm64"]="aarch64-unknown-linux-musl" ["ppc64le"]="powerpc64le-unknown-linux-gnu" ["riscv64"]="riscv64gc-unknown-linux-gnu") RUST_TARGET=${rust_target_map[${{ matrix.arch }}]} cargo install --locked --version 0.2.4 cross - rustup component add rustfmt clippy make -e RUST_TARGET_STATIC=$RUST_TARGET -e CARGO=cross static-release sudo mv target/$RUST_TARGET/release/nydusd . sudo mv target/$RUST_TARGET/release/nydus-image . @@ -84,6 +84,7 @@ jobs: cache-on-failure: true shared-key: ${{ runner.os }}-cargo-${{ matrix.arch }} save-if: ${{ github.ref == 'refs/heads/master' }} + - uses: dsherret/rust-toolchain-file@v1 - name: build run: | if [[ "${{matrix.arch}}" == "amd64" ]]; then @@ -93,7 +94,6 @@ jobs: fi cargo install --version 0.2.4 cross rustup target add ${RUST_TARGET} - rustup component add rustfmt clippy make -e RUST_TARGET_STATIC=$RUST_TARGET -e CARGO=cross static-release nydus-integration-test: diff --git a/api/src/error.rs b/api/src/error.rs index ad7c391ac02..277c0cc00ba 100644 --- a/api/src/error.rs +++ b/api/src/error.rs @@ -11,7 +11,7 @@ pub fn make_error( _file: &str, _line: u32, ) -> std::io::Error { - #[cfg(all(feature = "error-backtrace"))] + #[cfg(feature = "error-backtrace")] { if let Ok(val) = std::env::var("RUST_BACKTRACE") { if val.trim() != "0" { diff --git a/builder/src/core/context.rs b/builder/src/core/context.rs index b9290d7015f..dceb066dc87 100644 --- a/builder/src/core/context.rs +++ b/builder/src/core/context.rs @@ -903,7 +903,7 @@ impl BlobManager { let iv = crypt::Cipher::generate_random_iv()?; let cipher_ctx = CipherContext::new(key, iv, false, ctx.cipher)?; ( - ctx.cipher.new_cipher().ok().unwrap_or(Default::default()), + ctx.cipher.new_cipher().ok().unwrap_or_default(), Some(cipher_ctx), ) } diff --git a/builder/src/core/node.rs b/builder/src/core/node.rs index 06fe9190971..dfd877c4f53 100644 --- a/builder/src/core/node.rs +++ b/builder/src/core/node.rs @@ -223,7 +223,7 @@ impl Node { chunk_data_buf: &mut [u8], ) -> Result { let mut reader = if self.is_reg() { - let file = File::open(&self.path()) + let file = File::open(self.path()) .with_context(|| format!("failed to open node file {:?}", self.path()))?; Some(file) } else { diff --git a/builder/src/core/tree.rs b/builder/src/core/tree.rs index cc86c2759b9..d701c2bbd9f 100644 --- a/builder/src/core/tree.rs +++ b/builder/src/core/tree.rs @@ -19,6 +19,7 @@ use std::ffi::OsString; use std::os::unix::ffi::OsStrExt; use std::path::{Path, PathBuf}; +use std::rc::Rc; use std::sync::{Arc, Mutex, MutexGuard}; use anyhow::{bail, Result}; @@ -34,7 +35,7 @@ use crate::core::overlay::OVERLAYFS_WHITEOUT_OPAQUE; use crate::{BuildContext, ChunkDict}; /// Type alias for tree internal node. -pub type TreeNode = Arc>; +pub type TreeNode = Rc>; /// An in-memory tree structure to maintain information and topology of filesystem nodes. #[derive(Clone)] @@ -52,7 +53,7 @@ impl Tree { pub fn new(node: Node) -> Self { let name = node.name().as_bytes().to_vec(); Tree { - node: Arc::new(Mutex::new(node)), + node: Rc::new(Mutex::new(node)), name, children: Vec::new(), } @@ -81,7 +82,7 @@ impl Tree { /// Set `Node` associated with the tree node. pub fn set_node(&mut self, node: Node) { - self.node = Arc::new(Mutex::new(node)); + self.node = Rc::new(Mutex::new(node)); } /// Get mutex guard to access the associated `Node` object. diff --git a/builder/src/core/v6.rs b/builder/src/core/v6.rs index f81e0b95432..9dd1091d1e2 100644 --- a/builder/src/core/v6.rs +++ b/builder/src/core/v6.rs @@ -86,17 +86,12 @@ impl Node { /// Update whether compact mode can be used for this inode or not. pub fn v6_set_inode_compact(&mut self) { - if self.info.v6_force_extended_inode + self.v6_compact_inode = !(self.info.v6_force_extended_inode || self.inode.uid() > u16::MAX as u32 || self.inode.gid() > u16::MAX as u32 || self.inode.nlink() > u16::MAX as u32 || self.inode.size() > u32::MAX as u64 - || self.path().extension() == Some(OsStr::new("pyc")) - { - self.v6_compact_inode = false; - } else { - self.v6_compact_inode = true; - } + || self.path().extension() == Some(OsStr::new("pyc"))); } /// Layout the normal inode (except directory inode) into the meta blob. diff --git a/misc/musl-static/Dockerfile b/misc/musl-static/Dockerfile index 7f6bd7e9520..5109c9634d0 100644 --- a/misc/musl-static/Dockerfile +++ b/misc/musl-static/Dockerfile @@ -1,4 +1,4 @@ -FROM clux/muslrust:1.68.2 +FROM clux/muslrust:1.72.1 ARG RUST_TARGET=x86_64-unknown-linux-musl diff --git a/rafs/src/lib.rs b/rafs/src/lib.rs index 0ab948030ac..4ef03c548ab 100644 --- a/rafs/src/lib.rs +++ b/rafs/src/lib.rs @@ -326,7 +326,7 @@ mod tests { let bootstrap = OpenOptions::new() .read(true) .write(false) - .open(&path) + .open(path) .unwrap(); let mut rs = RafsSuper { mode: RafsMode::Direct, diff --git a/rafs/src/metadata/direct_v6.rs b/rafs/src/metadata/direct_v6.rs index 0c8086bc76b..831e2ab41ca 100644 --- a/rafs/src/metadata/direct_v6.rs +++ b/rafs/src/metadata/direct_v6.rs @@ -1301,7 +1301,7 @@ impl RafsInodeExt for OndiskInodeWrapper { /// It depends on Self::validate() to ensure valid memory layout. fn name(&self) -> OsString { assert!(self.name.is_some()); - self.name.clone().unwrap_or_else(OsString::new) + self.name.clone().unwrap_or_default() } /// Get file name size of the inode. diff --git a/rafs/src/metadata/inode.rs b/rafs/src/metadata/inode.rs index 19332284818..938b058ae6d 100644 --- a/rafs/src/metadata/inode.rs +++ b/rafs/src/metadata/inode.rs @@ -583,10 +583,10 @@ impl InodeWrapper { if let Self::Ref(i) = self { let i = i.clone(); if self.is_v6() { - *self = Self::V6(RafsV6Inode::from(i.deref().deref())); + *self = Self::V6(RafsV6Inode::from(i.deref())); } else { assert!(self.is_v5()); - *self = Self::V5(RafsV5Inode::from(i.deref().deref())); + *self = Self::V5(RafsV5Inode::from(i.deref())); } } } diff --git a/rafs/src/metadata/layout/v6.rs b/rafs/src/metadata/layout/v6.rs index 59ba6e8a396..5099e4a722c 100644 --- a/rafs/src/metadata/layout/v6.rs +++ b/rafs/src/metadata/layout/v6.rs @@ -2473,8 +2473,7 @@ mod tests { let targets = vec![target1, target2, target3, target4, target5]; - let mut entries: Vec = Vec::new(); - entries.reserve(targets.len()); + let mut entries: Vec = Vec::with_capacity(targets.len()); for _i in 0..targets.len() { let mut entry = RafsV6XattrEntry::new(); reader.read_exact(entry.as_mut()).unwrap(); diff --git a/rust-toolchain.toml b/rust-toolchain.toml index a735428f1d1..b36fa2701c4 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,3 @@ [toolchain] -channel = "1.68.2" \ No newline at end of file +channel = "1.72.1" +components = ["rustfmt", "clippy"] diff --git a/service/src/blob_cache.rs b/service/src/blob_cache.rs index 1683657c12b..55ac1f27077 100644 --- a/service/src/blob_cache.rs +++ b/service/src/blob_cache.rs @@ -586,7 +586,7 @@ mod tests { fn test_blob_cache_entry() { let tmpdir = TempDir::new().unwrap(); let path = tmpdir.as_path().join("bootstrap1"); - std::fs::write(&path, "metadata").unwrap(); + std::fs::write(path, "metadata").unwrap(); let cfg = create_factory_config(); let content = cfg.replace("/tmp/nydus", tmpdir.as_path().to_str().unwrap()); let mut entry: BlobCacheEntry = serde_json::from_str(&content).unwrap(); @@ -629,7 +629,7 @@ mod tests { fn test_invalid_blob_id() { let tmpdir = TempDir::new().unwrap(); let path = tmpdir.as_path().join("bootstrap1"); - std::fs::write(&path, "metadata").unwrap(); + std::fs::write(path, "metadata").unwrap(); let config = create_factory_config(); let content = config.replace("/tmp/nydus", tmpdir.as_path().to_str().unwrap()); let mut entry: BlobCacheEntry = serde_json::from_str(&content).unwrap(); diff --git a/service/src/block_device.rs b/service/src/block_device.rs index 52c901808db..dcb72d2b6da 100644 --- a/service/src/block_device.rs +++ b/service/src/block_device.rs @@ -15,6 +15,7 @@ use std::cmp::{max, min}; use std::fs::OpenOptions; use std::io::Result; use std::path::PathBuf; +use std::rc::Rc; use std::sync::{Arc, Mutex}; use std::thread; use std::thread::JoinHandle; @@ -36,8 +37,8 @@ const BLOCK_DEVICE_EXPORT_BATCH_SIZE: usize = 0x80000; enum BlockRange { Hole, - MetaBlob(Arc), - DataBlob(Arc), + MetaBlob(Rc), + DataBlob(Rc), } /// A block device composed up from a RAFSv6 image. @@ -93,7 +94,7 @@ impl BlockDevice { }; let is_tarfs_mode = meta_blob_config.is_tarfs_mode(); let meta_blob = MetaBlob::new(meta_blob_config.path())?; - let meta_blob = Arc::new(meta_blob); + let meta_blob = Rc::new(meta_blob); let blocks = if is_tarfs_mode { meta_blob.blocks() * 8 } else { @@ -171,7 +172,7 @@ impl BlockDevice { blob_info.blob_id() )) })?; - ranges.update(&range, BlockRange::DataBlob(Arc::new(data_blob))); + ranges.update(&range, BlockRange::DataBlob(Rc::new(data_blob))); pos = extra_info.mapped_blkaddr + blocks as u32; } @@ -307,7 +308,7 @@ impl BlockDevice { verity: bool, ) -> Result<()> { let block_device = BlockDevice::new(blob_entry)?; - let block_device = Arc::new(block_device); + let block_device = Rc::new(block_device); let blocks = block_device.blocks(); let blob_id = block_device.meta_blob_id(); @@ -358,7 +359,7 @@ impl BlockDevice { e )) })?; - let output_file = Arc::new(tokio_uring::fs::File::from_std(output_file)); + let output_file = Rc::new(tokio_uring::fs::File::from_std(output_file)); let mut verity_offset = 0; let generator = if verity { @@ -420,7 +421,7 @@ impl BlockDevice { e )) })?; - let file = Arc::new(tokio_uring::fs::File::from_std(output_file)); + let file = Rc::new(tokio_uring::fs::File::from_std(output_file)); let block_device = BlockDevice::new_with_cache_manager(id, mgr).map_err(|e| { eother!(format!( @@ -428,7 +429,7 @@ impl BlockDevice { e )) })?; - let device = Arc::new(block_device); + let device = Rc::new(block_device); tokio_uring::start(async move { Self::do_export(device, file, pos, count, generator).await @@ -462,8 +463,7 @@ impl BlockDevice { let root_digest: String = root_digest .data .iter() - .map(|v| format!("{:02x}", v)) - .collect(); + .fold(String::new(), |acc, v| acc + &format!("{:02x}", v)); println!( "dm-verity options: --no-superblock --format=1 -s \"\" --hash=sha256 --data-block-size={} --hash-block-size=4096 --data-blocks {} --hash-offset {} {}", block_device.block_size(), blocks, verity_offset, root_digest @@ -474,8 +474,8 @@ impl BlockDevice { } async fn do_export( - block_device: Arc, - output_file: Arc, + block_device: Rc, + output_file: Rc, start: u32, mut blocks: u32, generator: Option>>, diff --git a/service/src/fs_cache.rs b/service/src/fs_cache.rs index 8f011733372..680e120e24b 100644 --- a/service/src/fs_cache.rs +++ b/service/src/fs_cache.rs @@ -808,7 +808,7 @@ impl FsCacheHandler { } } - env::set_current_dir(&cwd_old)?; + env::set_current_dir(cwd_old)?; if res { Ok(()) } else { @@ -879,7 +879,7 @@ impl FsCacheHandler { } fn inuse(&self, cookie_dir: &Path, cookie_name: &str) -> Result { - env::set_current_dir(&cookie_dir)?; + env::set_current_dir(cookie_dir)?; let msg = format!("inuse {}", cookie_name); let ret = unsafe { libc::write( @@ -902,7 +902,7 @@ impl FsCacheHandler { } fn cull(&self, cookie_dir: &Path, cookie_name: &str) -> Result<()> { - env::set_current_dir(&cookie_dir)?; + env::set_current_dir(cookie_dir)?; let msg = format!("cull {}", cookie_name); let ret = unsafe { libc::write( diff --git a/src/bin/nydus-image/main.rs b/src/bin/nydus-image/main.rs index 29dd8a0e072..feb17d0a0ca 100644 --- a/src/bin/nydus-image/main.rs +++ b/src/bin/nydus-image/main.rs @@ -219,7 +219,7 @@ fn prepare_cmd_args(bti_string: &'static str) -> App { .long("bootstrap") .short('B') .help("File path to save the generated RAFS metadata blob") - .required_unless_present_any(&["blob-dir", "blob-inline-meta"]) + .required_unless_present_any(["blob-dir", "blob-inline-meta"]) .conflicts_with("blob-inline-meta"), ) .arg( @@ -233,7 +233,7 @@ fn prepare_cmd_args(bti_string: &'static str) -> App { .long("blob") .short('b') .help("File path to save the generated RAFS data blob") - .required_unless_present_any(&["type", "blob-dir"]), + .required_unless_present_any(["type", "blob-dir"]), ) .arg( Arg::new("blob-inline-meta") diff --git a/src/bin/nydus-image/unpack/pax.rs b/src/bin/nydus-image/unpack/pax.rs index f9d1736d134..b35a411c4b8 100644 --- a/src/bin/nydus-image/unpack/pax.rs +++ b/src/bin/nydus-image/unpack/pax.rs @@ -560,7 +560,7 @@ impl PAXUtil { let max_len = header.as_old().linkname.len(); if path.as_os_str().len() <= max_len { return header - .set_link_name(&path) + .set_link_name(path) .with_context(|| "fail to set short link for pax header") .map(|_| None); } diff --git a/src/bin/nydusctl/commands.rs b/src/bin/nydusctl/commands.rs index 036518540cc..73ca54de546 100644 --- a/src/bin/nydusctl/commands.rs +++ b/src/bin/nydusctl/commands.rs @@ -162,7 +162,7 @@ impl CommandBackend { let latency_block_hits = metric_vec_delta(&last, ¤t, "read_count_block_size_dist"); - let sizes = vec!["<1K", "1K~", "4K~", "16K~", "64K~", "128K~", "512K~", "1M~"]; + let sizes = ["<1K", "1K~", "4K~", "16K~", "64K~", "128K~", "512K~", "1M~"]; print!( r#" @@ -208,7 +208,7 @@ Block Sizes/millis: if raw { println!("{}", metrics); } else { - let sizes = vec!["<1K", "1K~", "4K~", "16K~", "64K~", "128K~", "512K~", "1M~"]; + let sizes = ["<1K", "1K~", "4K~", "16K~", "64K~", "128K~", "512K~", "1M~"]; let m = metrics.as_object().unwrap(); print!( r#" @@ -300,7 +300,7 @@ impl CommandFsStats { if raw { println!("{}", metrics); } else { - let periods = vec![ + let periods = [ "<1ms", "~20ms", "~50ms", "~100ms", "~500ms", "~1s", "~2s", "2s~", ]; let latency_dist = m["read_latency_dist"].as_array().unwrap(); diff --git a/storage/src/backend/localdisk.rs b/storage/src/backend/localdisk.rs index 0c83bfba9db..4475797d5ad 100644 --- a/storage/src/backend/localdisk.rs +++ b/storage/src/backend/localdisk.rs @@ -161,7 +161,7 @@ impl LocalDisk { path, e )) })?; - let device_file = OpenOptions::new().read(true).open(&path_buf).map_err(|e| { + let device_file = OpenOptions::new().read(true).open(path_buf).map_err(|e| { einval!(format!( "localdisk: can not open disk device at {}, {}", path, e diff --git a/storage/src/backend/localfs.rs b/storage/src/backend/localfs.rs index 08df265f12f..6168a1903da 100644 --- a/storage/src/backend/localfs.rs +++ b/storage/src/backend/localfs.rs @@ -128,7 +128,7 @@ impl LocalFs { // Search blob file in dir and additionally in alt_dirs let is_valid = |dir: &PathBuf| -> bool { let blob = Path::new(&dir).join(blob_id); - if let Ok(meta) = std::fs::metadata(&blob) { + if let Ok(meta) = std::fs::metadata(blob) { meta.len() != 0 } else { false diff --git a/storage/src/backend/oss.rs b/storage/src/backend/oss.rs index 592a556f131..9ec08cfd71c 100644 --- a/storage/src/backend/oss.rs +++ b/storage/src/backend/oss.rs @@ -100,7 +100,7 @@ impl ObjectStorageState for OssState { .chain_update(data.as_bytes()) .finalize() .into_bytes(); - let signature = base64::engine::general_purpose::STANDARD.encode(&hmac); + let signature = base64::engine::general_purpose::STANDARD.encode(hmac); let authorization = format!("OSS {}:{}", self.access_key_id, signature); diff --git a/storage/src/backend/registry.rs b/storage/src/backend/registry.rs index 295e7ab1f95..a9947f49efb 100644 --- a/storage/src/backend/registry.rs +++ b/storage/src/backend/registry.rs @@ -662,7 +662,7 @@ impl RegistryReader { // The request has expired or has been denied, need to re-request if allow_retry - && vec![StatusCode::UNAUTHORIZED, StatusCode::FORBIDDEN].contains(&resp.status()) + && [StatusCode::UNAUTHORIZED, StatusCode::FORBIDDEN].contains(&resp.status()) { warn!( "The redirected link has expired: {}, will retry read", diff --git a/storage/src/cache/filecache/mod.rs b/storage/src/cache/filecache/mod.rs index d42ad388fcf..1e38f3b3072 100644 --- a/storage/src/cache/filecache/mod.rs +++ b/storage/src/cache/filecache/mod.rs @@ -226,7 +226,7 @@ impl FileCacheEntry { .create(false) .write(false) .read(true) - .open(&blob_file_path)?; + .open(blob_file_path)?; let chunk_map = Arc::new(BlobStateMap::from(NoopChunkMap::new(true))) as Arc; (file, None, chunk_map, true, true, false) @@ -250,7 +250,7 @@ impl FileCacheEntry { .create(true) .write(true) .read(true) - .open(&blob_data_file_path)?; + .open(blob_data_file_path)?; let file_size = file.metadata()?.len(); let cached_file_size = if mgr.cache_raw_data { blob_info.compressed_data_size() diff --git a/storage/src/device.rs b/storage/src/device.rs index 5151169e058..08c3ee5409a 100644 --- a/storage/src/device.rs +++ b/storage/src/device.rs @@ -554,7 +554,7 @@ impl BlobInfo { } guard.deref().clone() } else { - hex::encode(&self.blob_meta_digest) + hex::encode(self.blob_meta_digest) }; Ok(id) } diff --git a/storage/src/meta/chunk_info_v1.rs b/storage/src/meta/chunk_info_v1.rs index e41bd9f0aa4..8ad11275476 100644 --- a/storage/src/meta/chunk_info_v1.rs +++ b/storage/src/meta/chunk_info_v1.rs @@ -351,7 +351,7 @@ mod tests { .open(temp.as_path()) .unwrap(); - let chunks = vec![ + let chunks = [ BlobChunkInfoV1Ondisk { uncomp_info: 0x01ff_f000_0000_0000, comp_info: 0x00ff_f000_0000_0000, @@ -417,7 +417,7 @@ mod tests { .open(temp.as_path()) .unwrap(); - let chunks = vec![ + let chunks = [ BlobChunkInfoV1Ondisk { uncomp_info: 0x01ff_f000_0000_0000, comp_info: 0x00ff_f000_0000_0000, diff --git a/storage/src/meta/mod.rs b/storage/src/meta/mod.rs index eff935cda17..39d9b8beb27 100644 --- a/storage/src/meta/mod.rs +++ b/storage/src/meta/mod.rs @@ -531,7 +531,7 @@ impl BlobCompressionContextInfo { TocLocation::default() }; let toc_list = - TocEntryList::read_from_cache_file(&toc_path, reader.as_ref(), &location)?; + TocEntryList::read_from_cache_file(toc_path, reader.as_ref(), &location)?; toc_list.extract_from_blob(reader.clone(), None, Some(&digest_path))?; } if !digest_path.exists() { diff --git a/storage/src/meta/zran.rs b/storage/src/meta/zran.rs index 0375a41847f..f954e3b91a4 100644 --- a/storage/src/meta/zran.rs +++ b/storage/src/meta/zran.rs @@ -233,7 +233,7 @@ mod tests { fn test_generate_chunk_info() { let root_dir = &std::env::var("CARGO_MANIFEST_DIR").expect("$CARGO_MANIFEST_DIR"); let path = PathBuf::from(root_dir).join("../tests/texture/zran/zran-two-streams.tar.gz"); - let file = OpenOptions::new().read(true).open(&path).unwrap(); + let file = OpenOptions::new().read(true).open(path).unwrap(); let mut generator = ZranContextGenerator::new(file).unwrap(); let mut tar = Archive::new(generator.reader()); diff --git a/utils/src/compress/mod.rs b/utils/src/compress/mod.rs index a74e24901d1..665ae8b6486 100644 --- a/utils/src/compress/mod.rs +++ b/utils/src/compress/mod.rs @@ -498,7 +498,7 @@ mod tests { fn test_gzip_decoder() { let root_dir = &std::env::var("CARGO_MANIFEST_DIR").expect("$CARGO_MANIFEST_DIR"); let path = Path::new(root_dir).join("../tests/texture/zran/zlib_sample.txt.gz"); - let file = OpenOptions::new().read(true).open(&path).unwrap(); + let file = OpenOptions::new().read(true).open(path).unwrap(); let mut decoder = Decoder::new(file, Algorithm::GZip).unwrap(); let mut buf = [0u8; 8]; @@ -519,7 +519,7 @@ mod tests { fn test_zlib_decoder() { let root_dir = &std::env::var("CARGO_MANIFEST_DIR").expect("$CARGO_MANIFEST_DIR"); let path = Path::new(root_dir).join("../tests/texture/zran/zlib_sample.txt.gz"); - let file = OpenOptions::new().read(true).open(&path).unwrap(); + let file = OpenOptions::new().read(true).open(path).unwrap(); let mut decoder = ZlibDecoder::new(file); let mut buf = [0u8; 8]; diff --git a/utils/src/compress/zlib_random.rs b/utils/src/compress/zlib_random.rs index 27a9220be22..cccc0d24f50 100644 --- a/utils/src/compress/zlib_random.rs +++ b/utils/src/compress/zlib_random.rs @@ -780,7 +780,7 @@ mod tests { fn test_parse_single_gzip_object() { let root_dir = &std::env::var("CARGO_MANIFEST_DIR").expect("$CARGO_MANIFEST_DIR"); let path = PathBuf::from(root_dir).join("../tests/texture/zran/zran-single-stream.tar.gz"); - let file = OpenOptions::new().read(true).open(&path).unwrap(); + let file = OpenOptions::new().read(true).open(path).unwrap(); let mut files = 0; let mut objects = 0; @@ -803,7 +803,7 @@ mod tests { fn test_parse_first_gzip_object() { let root_dir = &std::env::var("CARGO_MANIFEST_DIR").expect("$CARGO_MANIFEST_DIR"); let path = PathBuf::from(root_dir).join("../tests/texture/zran/zran-two-streams.tar.gz"); - let file = OpenOptions::new().read(true).open(&path).unwrap(); + let file = OpenOptions::new().read(true).open(path).unwrap(); let mut files = 0; let mut objects = 0; @@ -827,7 +827,7 @@ mod tests { fn test_parse_two_gzip_objects() { let root_dir = &std::env::var("CARGO_MANIFEST_DIR").expect("$CARGO_MANIFEST_DIR"); let path = PathBuf::from(root_dir).join("../tests/texture/zran/zran-two-streams.tar.gz"); - let file = OpenOptions::new().read(true).open(&path).unwrap(); + let file = OpenOptions::new().read(true).open(path).unwrap(); let mut files = 0; let mut objects = 0; @@ -852,7 +852,7 @@ mod tests { fn test_parse_gzip_with_big_zero() { let root_dir = &std::env::var("CARGO_MANIFEST_DIR").expect("$CARGO_MANIFEST_DIR"); let path = PathBuf::from(root_dir).join("../tests/texture/zran/zran-zero-file.tar.gz"); - let file = OpenOptions::new().read(true).open(&path).unwrap(); + let file = OpenOptions::new().read(true).open(path).unwrap(); let reader = ZranReader::new(file).unwrap(); let mut tar = Archive::new(reader.clone()); let entries = tar.entries().unwrap(); @@ -881,7 +881,7 @@ mod tests { fn test_generate_comp_info() { let root_dir = &std::env::var("CARGO_MANIFEST_DIR").expect("$CARGO_MANIFEST_DIR"); let path = PathBuf::from(root_dir).join("../tests/texture/zran/zran-two-streams.tar.gz"); - let file = OpenOptions::new().read(true).open(&path).unwrap(); + let file = OpenOptions::new().read(true).open(path).unwrap(); let reader = ZranReader::new(file).unwrap(); let mut tar = Archive::new(reader.clone()); @@ -1001,7 +1001,7 @@ mod tests { fn test_zran_reader() { let root_dir = &std::env::var("CARGO_MANIFEST_DIR").expect("$CARGO_MANIFEST_DIR"); let path = PathBuf::from(root_dir).join("../tests/texture/zran/zran-two-streams.tar.gz"); - let file = OpenOptions::new().read(true).open(&path).unwrap(); + let file = OpenOptions::new().read(true).open(path).unwrap(); let reader = ZranReader::new(file).unwrap(); assert_eq!(reader.get_data_size(), 0); diff --git a/utils/src/filemap.rs b/utils/src/filemap.rs index 0ef4553f331..efa935d13c3 100644 --- a/utils/src/filemap.rs +++ b/utils/src/filemap.rs @@ -226,7 +226,7 @@ mod tests { let file = OpenOptions::new() .read(true) .write(false) - .open(&path) + .open(path) .unwrap(); let map = FileMapState::new(file, 0, 4096, false).unwrap();