From d8cee526377642ba156b4dd3ddcc5ac10530ae91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arpad=20M=C3=BCller?= Date: Thu, 3 Apr 2025 16:53:28 +0200 Subject: [PATCH] Update rust to 1.86.0 (#11431) We keep the practice of keeping the compiler up to date, pointing to the latest release. This is done by many other projects in the Rust ecosystem as well. [Announcement blog post](https://blog.rust-lang.org/2025/04/03/Rust-1.86.0.html). Prior update was in #10914. --- build-tools.Dockerfile | 2 +- compute_tools/src/spec_apply.rs | 2 +- libs/remote_storage/tests/test_real_s3.rs | 2 +- pageserver/src/task_mgr.rs | 3 +-- pageserver/src/tenant.rs | 2 +- pageserver/src/tenant/layer_map/layer_coverage.rs | 2 +- pageserver/src/tenant/mgr.rs | 2 +- pageserver/src/tenant/remote_timeline_client/index.rs | 2 +- pageserver/src/tenant/timeline.rs | 2 +- .../owned_buffers_io/aligned_buffer/buffer_mut.rs | 4 ++-- .../src/virtual_file/owned_buffers_io/aligned_buffer/raw.rs | 4 ++-- rust-toolchain.toml | 2 +- safekeeper/src/receive_wal.rs | 6 +++--- safekeeper/src/timeline.rs | 2 +- safekeeper/tests/misc_test.rs | 2 +- storage_controller/src/heartbeater.rs | 4 ++-- storage_controller/src/main.rs | 4 +--- storage_controller/src/tenant_shard.rs | 2 +- storage_scrubber/src/find_large_objects.rs | 2 +- 19 files changed, 24 insertions(+), 27 deletions(-) diff --git a/build-tools.Dockerfile b/build-tools.Dockerfile index c103ceaea5..7766991a0a 100644 --- a/build-tools.Dockerfile +++ b/build-tools.Dockerfile @@ -292,7 +292,7 @@ WORKDIR /home/nonroot # Rust # Please keep the version of llvm (installed above) in sync with rust llvm (`rustc --version --verbose | grep LLVM`) -ENV RUSTC_VERSION=1.85.0 +ENV RUSTC_VERSION=1.86.0 ENV RUSTUP_HOME="/home/nonroot/.rustup" ENV PATH="/home/nonroot/.cargo/bin:${PATH}" ARG RUSTFILT_VERSION=0.2.1 diff --git a/compute_tools/src/spec_apply.rs b/compute_tools/src/spec_apply.rs index 2be6458fb4..e7d67f6ac5 100644 --- a/compute_tools/src/spec_apply.rs +++ b/compute_tools/src/spec_apply.rs @@ -419,7 +419,7 @@ impl ComputeNode { .iter() .filter_map(|val| val.parse::().ok()) .map(|val| if val > 1 { val - 1 } else { 1 }) - .last() + .next_back() .unwrap_or(3) } } diff --git a/libs/remote_storage/tests/test_real_s3.rs b/libs/remote_storage/tests/test_real_s3.rs index 6996bb27ae..d38e13fd05 100644 --- a/libs/remote_storage/tests/test_real_s3.rs +++ b/libs/remote_storage/tests/test_real_s3.rs @@ -558,7 +558,7 @@ async fn upload_large_enough_file( ) -> usize { let header = bytes::Bytes::from_static("remote blob data content".as_bytes()); let body = bytes::Bytes::from(vec![0u8; 1024]); - let contents = std::iter::once(header).chain(std::iter::repeat(body).take(128)); + let contents = std::iter::once(header).chain(std::iter::repeat_n(body, 128)); let len = contents.clone().fold(0, |acc, next| acc + next.len()); diff --git a/pageserver/src/task_mgr.rs b/pageserver/src/task_mgr.rs index 9cc604f86d..d4873e60a1 100644 --- a/pageserver/src/task_mgr.rs +++ b/pageserver/src/task_mgr.rs @@ -219,8 +219,7 @@ pageserver_runtime!(MGMT_REQUEST_RUNTIME, "mgmt request worker"); pageserver_runtime!(WALRECEIVER_RUNTIME, "walreceiver worker"); pageserver_runtime!(BACKGROUND_RUNTIME, "background op worker"); // Bump this number when adding a new pageserver_runtime! -// SAFETY: it's obviously correct -const NUM_MULTIPLE_RUNTIMES: NonZeroUsize = unsafe { NonZeroUsize::new_unchecked(4) }; +const NUM_MULTIPLE_RUNTIMES: NonZeroUsize = NonZeroUsize::new(4).unwrap(); #[derive(Debug, Clone, Copy)] pub struct PageserverTaskId(u64); diff --git a/pageserver/src/tenant.rs b/pageserver/src/tenant.rs index 15853133d6..0384fcc39f 100644 --- a/pageserver/src/tenant.rs +++ b/pageserver/src/tenant.rs @@ -3689,7 +3689,7 @@ impl Tenant { } } } - TenantState::Active { .. } => { + TenantState::Active => { return Ok(()); } TenantState::Broken { reason, .. } => { diff --git a/pageserver/src/tenant/layer_map/layer_coverage.rs b/pageserver/src/tenant/layer_map/layer_coverage.rs index cf0085c071..a42ac92973 100644 --- a/pageserver/src/tenant/layer_map/layer_coverage.rs +++ b/pageserver/src/tenant/layer_map/layer_coverage.rs @@ -53,7 +53,7 @@ impl LayerCoverage { /// /// Complexity: O(log N) fn add_node(&mut self, key: i128) { - let value = match self.nodes.range(..=key).last() { + let value = match self.nodes.range(..=key).next_back() { Some((_, Some(v))) => Some(v.clone()), Some((_, None)) => None, None => None, diff --git a/pageserver/src/tenant/mgr.rs b/pageserver/src/tenant/mgr.rs index 61ad682a14..ac81b8e3d7 100644 --- a/pageserver/src/tenant/mgr.rs +++ b/pageserver/src/tenant/mgr.rs @@ -58,7 +58,7 @@ use crate::{InitializationOrder, TEMP_FILE_SUFFIX}; /// For a tenant that appears in TenantsMap, it may either be /// - `Attached`: has a full Tenant object, is elegible to service -/// reads and ingest WAL. +/// reads and ingest WAL. /// - `Secondary`: is only keeping a local cache warm. /// /// Secondary is a totally distinct state rather than being a mode of a `Tenant`, because diff --git a/pageserver/src/tenant/remote_timeline_client/index.rs b/pageserver/src/tenant/remote_timeline_client/index.rs index 5635cf3268..a5cd8989aa 100644 --- a/pageserver/src/tenant/remote_timeline_client/index.rs +++ b/pageserver/src/tenant/remote_timeline_client/index.rs @@ -130,7 +130,7 @@ impl IndexPart { /// Version history /// - 2: added `deleted_at` /// - 3: no longer deserialize `timeline_layers` (serialized format is the same, but timeline_layers - /// is always generated from the keys of `layer_metadata`) + /// is always generated from the keys of `layer_metadata`) /// - 4: timeline_layers is fully removed. /// - 5: lineage was added /// - 6: last_aux_file_policy is added. diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index d21a8752a8..80a23bfa94 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -2247,7 +2247,7 @@ impl Timeline { .await .expect("holding a reference to self"); } - TimelineState::Active { .. } => { + TimelineState::Active => { return Ok(()); } TimelineState::Broken { .. } | TimelineState::Stopping => { diff --git a/pageserver/src/virtual_file/owned_buffers_io/aligned_buffer/buffer_mut.rs b/pageserver/src/virtual_file/owned_buffers_io/aligned_buffer/buffer_mut.rs index df5c911e50..3ee1a3c162 100644 --- a/pageserver/src/virtual_file/owned_buffers_io/aligned_buffer/buffer_mut.rs +++ b/pageserver/src/virtual_file/owned_buffers_io/aligned_buffer/buffer_mut.rs @@ -25,8 +25,8 @@ impl AlignedBufferMut> { /// * `align` must be a power of two, /// /// * `capacity`, when rounded up to the nearest multiple of `align`, - /// must not overflow isize (i.e., the rounded value must be - /// less than or equal to `isize::MAX`). + /// must not overflow isize (i.e., the rounded value must be + /// less than or equal to `isize::MAX`). pub fn with_capacity(capacity: usize) -> Self { AlignedBufferMut { raw: RawAlignedBuffer::with_capacity(capacity), diff --git a/pageserver/src/virtual_file/owned_buffers_io/aligned_buffer/raw.rs b/pageserver/src/virtual_file/owned_buffers_io/aligned_buffer/raw.rs index 97a6c4049a..d273772411 100644 --- a/pageserver/src/virtual_file/owned_buffers_io/aligned_buffer/raw.rs +++ b/pageserver/src/virtual_file/owned_buffers_io/aligned_buffer/raw.rs @@ -37,8 +37,8 @@ impl RawAlignedBuffer> { /// * `align` must be a power of two, /// /// * `capacity`, when rounded up to the nearest multiple of `align`, - /// must not overflow isize (i.e., the rounded value must be - /// less than or equal to `isize::MAX`). + /// must not overflow isize (i.e., the rounded value must be + /// less than or equal to `isize::MAX`). pub fn with_capacity(capacity: usize) -> Self { let align = ConstAlign::; let layout = Layout::from_size_align(capacity, align.align()).expect("Invalid layout"); diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 591d60ea79..a0d5970bd5 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "1.85.0" +channel = "1.86.0" profile = "default" # The default profile includes rustc, rust-std, cargo, rust-docs, rustfmt and clippy. # https://rust-lang.github.io/rustup/concepts/profiles.html diff --git a/safekeeper/src/receive_wal.rs b/safekeeper/src/receive_wal.rs index 7967acde3f..9975153f6c 100644 --- a/safekeeper/src/receive_wal.rs +++ b/safekeeper/src/receive_wal.rs @@ -94,10 +94,10 @@ impl WalReceivers { /// Get reference to locked slot contents. Slot must exist (registered /// earlier). - fn get_slot<'a>( - self: &'a Arc, + fn get_slot( + self: &Arc, id: WalReceiverId, - ) -> MappedMutexGuard<'a, WalReceiverState> { + ) -> MappedMutexGuard<'_, WalReceiverState> { MutexGuard::map(self.mutex.lock(), |locked| { locked.slots[id] .as_mut() diff --git a/safekeeper/src/timeline.rs b/safekeeper/src/timeline.rs index d3c841ec09..d9ca58104e 100644 --- a/safekeeper/src/timeline.rs +++ b/safekeeper/src/timeline.rs @@ -699,7 +699,7 @@ impl Timeline { } /// Take a writing mutual exclusive lock on timeline shared_state. - pub async fn write_shared_state<'a>(self: &'a Arc) -> WriteGuardSharedState<'a> { + pub async fn write_shared_state(self: &Arc) -> WriteGuardSharedState<'_> { WriteGuardSharedState::new(self.clone(), self.mutex.write().await) } diff --git a/safekeeper/tests/misc_test.rs b/safekeeper/tests/misc_test.rs index 8e54d2bb86..3acf9f72c4 100644 --- a/safekeeper/tests/misc_test.rs +++ b/safekeeper/tests/misc_test.rs @@ -116,7 +116,7 @@ fn test_many_tx() -> anyhow::Result<()> { } None }) - .last() + .next_back() .unwrap(); let initdb_lsn = 21623024; diff --git a/storage_controller/src/heartbeater.rs b/storage_controller/src/heartbeater.rs index 524225c14a..732c4ea443 100644 --- a/storage_controller/src/heartbeater.rs +++ b/storage_controller/src/heartbeater.rs @@ -253,7 +253,7 @@ impl HeartBeat for HeartbeaterTask PageserverState::WarmingUp { .. } => { warming_up += 1; } - PageserverState::Offline { .. } => offline += 1, + PageserverState::Offline => offline += 1, PageserverState::Available { .. } => {} } } @@ -391,7 +391,7 @@ impl HeartBeat for HeartbeaterTask offline += 1, + SafekeeperState::Offline => offline += 1, SafekeeperState::Available { .. } => {} } } diff --git a/storage_controller/src/main.rs b/storage_controller/src/main.rs index 8c834f9acb..1aa9ae10ae 100644 --- a/storage_controller/src/main.rs +++ b/storage_controller/src/main.rs @@ -283,10 +283,8 @@ impl Secrets { fn load_secret(cli: &Option, env_name: &str) -> Option { if let Some(v) = cli { Some(v.clone()) - } else if let Ok(v) = std::env::var(env_name) { - Some(v) } else { - None + std::env::var(env_name).ok() } } } diff --git a/storage_controller/src/tenant_shard.rs b/storage_controller/src/tenant_shard.rs index f6b748844a..8424c65aba 100644 --- a/storage_controller/src/tenant_shard.rs +++ b/storage_controller/src/tenant_shard.rs @@ -622,7 +622,7 @@ impl TenantShard { .collect::>(); attached_locs.sort_by_key(|i| i.1); - if let Some((node_id, _gen)) = attached_locs.into_iter().last() { + if let Some((node_id, _gen)) = attached_locs.into_iter().next_back() { self.intent.set_attached(scheduler, Some(*node_id)); } diff --git a/storage_scrubber/src/find_large_objects.rs b/storage_scrubber/src/find_large_objects.rs index efb05fb55e..a4ca68d378 100644 --- a/storage_scrubber/src/find_large_objects.rs +++ b/storage_scrubber/src/find_large_objects.rs @@ -18,7 +18,7 @@ enum LargeObjectKind { impl LargeObjectKind { fn from_key(key: &str) -> Self { - let fname = key.split('/').last().unwrap(); + let fname = key.split('/').next_back().unwrap(); let Ok((layer_name, _generation)) = parse_layer_object_name(fname) else { return LargeObjectKind::Other;