Merge tag 'tokio-1.45.1'

This commit is contained in:
Alice Ryhl
2025-05-24 07:32:44 -07:00
5 changed files with 53 additions and 19 deletions
+1 -1
View File
@@ -56,7 +56,7 @@ Make sure you activated the full features of the tokio crate on Cargo.toml:
```toml ```toml
[dependencies] [dependencies]
tokio = { version = "1.45.0", features = ["full"] } tokio = { version = "1.45.1", features = ["full"] }
``` ```
Then, on your main.rs: Then, on your main.rs:
+12
View File
@@ -1,3 +1,15 @@
# 1.45.1 (May 24th, 2025)
This fixes a regression on the wasm32-unknown-unknown target, where code that
previously did not panic due to calls to `Instant::now()` started failing. This
is due to the stabilization of the first time-based metric.
### Fixed
- Disable time-based metrics on wasm32-unknown-unknown ([#7322])
[#7322]: https://github.com/tokio-rs/tokio/pull/7322
# 1.45.0 (May 5th, 2025) # 1.45.0 (May 5th, 2025)
### Added ### Added
+1 -1
View File
@@ -6,7 +6,7 @@ name = "tokio"
# - README.md # - README.md
# - Update CHANGELOG.md. # - Update CHANGELOG.md.
# - Create "v1.x.y" git tag. # - Create "v1.x.y" git tag.
version = "1.45.0" version = "1.45.1"
edition = "2021" edition = "2021"
rust-version = "1.70" rust-version = "1.70"
authors = ["Tokio Contributors <[email protected]>"] authors = ["Tokio Contributors <[email protected]>"]
+1 -1
View File
@@ -56,7 +56,7 @@ Make sure you activated the full features of the tokio crate on Cargo.toml:
```toml ```toml
[dependencies] [dependencies]
tokio = { version = "1.45.0", features = ["full"] } tokio = { version = "1.45.1", features = ["full"] }
``` ```
Then, on your main.rs: Then, on your main.rs:
+38 -16
View File
@@ -12,7 +12,7 @@ pub(crate) struct MetricsBatch {
busy_duration_total: u64, busy_duration_total: u64,
/// Instant at which work last resumed (continued after park). /// Instant at which work last resumed (continued after park).
processing_scheduled_tasks_started_at: Instant, processing_scheduled_tasks_started_at: Option<Instant>,
/// Number of times the worker parked. /// Number of times the worker parked.
park_count: u64, park_count: u64,
@@ -67,17 +67,17 @@ cfg_unstable_metrics! {
impl MetricsBatch { impl MetricsBatch {
pub(crate) fn new(worker_metrics: &WorkerMetrics) -> MetricsBatch { pub(crate) fn new(worker_metrics: &WorkerMetrics) -> MetricsBatch {
let now = Instant::now(); let maybe_now = now();
Self::new_unstable(worker_metrics, now) Self::new_unstable(worker_metrics, maybe_now)
} }
cfg_metrics_variant! { cfg_metrics_variant! {
stable: { stable: {
#[inline(always)] #[inline(always)]
fn new_unstable(_worker_metrics: &WorkerMetrics, now: Instant) -> MetricsBatch { fn new_unstable(_worker_metrics: &WorkerMetrics, maybe_now: Option<Instant>) -> MetricsBatch {
MetricsBatch { MetricsBatch {
busy_duration_total: 0, busy_duration_total: 0,
processing_scheduled_tasks_started_at: now, processing_scheduled_tasks_started_at: maybe_now,
park_count: 0, park_count: 0,
park_unpark_count: 0, park_unpark_count: 0,
} }
@@ -85,7 +85,16 @@ impl MetricsBatch {
}, },
unstable: { unstable: {
#[inline(always)] #[inline(always)]
fn new_unstable(worker_metrics: &WorkerMetrics, now: Instant) -> MetricsBatch { fn new_unstable(worker_metrics: &WorkerMetrics, maybe_now: Option<Instant>) -> MetricsBatch {
let poll_timer = maybe_now.and_then(|now| {
worker_metrics
.poll_count_histogram
.as_ref()
.map(|worker_poll_counts| PollTimer {
poll_counts: HistogramBatch::from_histogram(worker_poll_counts),
poll_started_at: now,
})
});
MetricsBatch { MetricsBatch {
park_count: 0, park_count: 0,
park_unpark_count: 0, park_unpark_count: 0,
@@ -97,13 +106,8 @@ impl MetricsBatch {
local_schedule_count: 0, local_schedule_count: 0,
overflow_count: 0, overflow_count: 0,
busy_duration_total: 0, busy_duration_total: 0,
processing_scheduled_tasks_started_at: now, processing_scheduled_tasks_started_at: maybe_now,
poll_timer: worker_metrics.poll_count_histogram.as_ref().map( poll_timer,
|worker_poll_counts| PollTimer {
poll_counts: HistogramBatch::from_histogram(worker_poll_counts),
poll_started_at: now,
},
),
} }
} }
} }
@@ -186,13 +190,17 @@ impl MetricsBatch {
/// Start processing a batch of tasks /// Start processing a batch of tasks
pub(crate) fn start_processing_scheduled_tasks(&mut self) { pub(crate) fn start_processing_scheduled_tasks(&mut self) {
self.processing_scheduled_tasks_started_at = Instant::now(); self.processing_scheduled_tasks_started_at = now();
} }
/// Stop processing a batch of tasks /// Stop processing a batch of tasks
pub(crate) fn end_processing_scheduled_tasks(&mut self) { pub(crate) fn end_processing_scheduled_tasks(&mut self) {
let busy_duration = self.processing_scheduled_tasks_started_at.elapsed(); if let Some(processing_scheduled_tasks_started_at) =
self.busy_duration_total += duration_as_u64(busy_duration); self.processing_scheduled_tasks_started_at
{
let busy_duration = processing_scheduled_tasks_started_at.elapsed();
self.busy_duration_total += duration_as_u64(busy_duration);
}
} }
cfg_metrics_variant! { cfg_metrics_variant! {
@@ -279,3 +287,17 @@ cfg_rt_multi_thread! {
pub(crate) fn duration_as_u64(dur: Duration) -> u64 { pub(crate) fn duration_as_u64(dur: Duration) -> u64 {
u64::try_from(dur.as_nanos()).unwrap_or(u64::MAX) u64::try_from(dur.as_nanos()).unwrap_or(u64::MAX)
} }
/// Gate unsupported time metrics for `wasm32-unknown-unknown`
/// <https://github.com/tokio-rs/tokio/issues/7319>
fn now() -> Option<Instant> {
if cfg!(all(
target_arch = "wasm32",
target_os = "unknown",
target_vendor = "unknown"
)) {
None
} else {
Some(Instant::now())
}
}