mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-09-08 00:00:13 +02:00
trace-core: Require span IDs to be > 0 (#973)
This branch changes `tokio_trace_core::span::Id::from_u64` to assert that the integer from which the span ID is constructed is greater than zero. This is to enable future use of non-zero optimization. Unfortunately, we can't actually use a `NonZeroU64` _now_, as that type was only stabilized in Rust 1.28.0, and `tokio`'s current minimum supported Rust version is 1.26.0. Adding and documenting the assertion now allows us to change the internal representation to `NonZeroU64` later (when 1.28.0 is the minimum supported Rust version), without causing a breaking change. Signed-off-by: Eliza Weisman <[email protected]>
This commit is contained in:
@@ -128,7 +128,7 @@ where
|
|||||||
spans: Mutex::new(HashMap::new()),
|
spans: Mutex::new(HashMap::new()),
|
||||||
expected,
|
expected,
|
||||||
current: Mutex::new(Vec::new()),
|
current: Mutex::new(Vec::new()),
|
||||||
ids: AtomicUsize::new(0),
|
ids: AtomicUsize::new(1),
|
||||||
filter: self.filter,
|
filter: self.filter,
|
||||||
};
|
};
|
||||||
(subscriber, handle)
|
(subscriber, handle)
|
||||||
|
|||||||
@@ -6,12 +6,13 @@ use {field, Metadata};
|
|||||||
///
|
///
|
||||||
/// They are generated by [`Subscriber`]s for each span as it is created, by
|
/// They are generated by [`Subscriber`]s for each span as it is created, by
|
||||||
/// the [`new_span`] trait method. See the documentation for that method for
|
/// the [`new_span`] trait method. See the documentation for that method for
|
||||||
/// more information on span
|
/// more information on span ID generation.
|
||||||
/// ID generation.
|
|
||||||
///
|
///
|
||||||
/// [`Subscriber`]: ../subscriber/trait.Subscriber.html
|
/// [`Subscriber`]: ../subscriber/trait.Subscriber.html
|
||||||
/// [`new_span`]: ../subscriber/trait.Subscriber.html#method.new_span
|
/// [`new_span`]: ../subscriber/trait.Subscriber.html#method.new_span
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||||
|
// TODO(eliza): when Tokio's minimum Rust version is >= 1.28, change the
|
||||||
|
// internal representation to a `NonZeroU64`.
|
||||||
pub struct Id(u64);
|
pub struct Id(u64);
|
||||||
|
|
||||||
/// Attributes provided to a `Subscriber` describing a new span when it is
|
/// Attributes provided to a `Subscriber` describing a new span when it is
|
||||||
@@ -43,7 +44,13 @@ enum Parent {
|
|||||||
|
|
||||||
impl Id {
|
impl Id {
|
||||||
/// Constructs a new span ID from the given `u64`.
|
/// Constructs a new span ID from the given `u64`.
|
||||||
|
///
|
||||||
|
/// **Note**: Span IDs must be greater than zero.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// - If the provided `u64` is 0
|
||||||
pub fn from_u64(u: u64) -> Self {
|
pub fn from_u64(u: u64) -> Self {
|
||||||
|
assert!(u > 0);
|
||||||
Id(u)
|
Id(u)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user