`Transport::flush` on an `Arc<T>` transport returns `true` without flushing `T`
メンテナーはふだん 1 日以内に返信
評価
調査の方向性
sentry-core/src/transport/mod.rsを読み、特にArc<T>に対するTransportの実装と、traitのデフォルトのflushを確認してください。NeverDrains::flushがfalseを返すissue内の再現例で、動作を確認してください。Arc<T>経由でflushしたときに、ラップされたtransportの結果が返れば完了です。近くにtransportのテストがあれば、それも確認してください。
索引モデルが issue の本文から書いたものです。
説明
How do you use Sentry?
Sentry SaaS (sentry.io)
SDK version
0.49.5, and master at 12c8785008a9046ddb73a238349c95447e78dde4
Steps to reproduce
impl<T: Transport> Transport for Arc<T> forwards send_envelope and shutdown to T but not flush, so flush called through an Arc<T> runs the trait's default, which returns true at once.
-
A binary with this
Cargo.toml:[package] name = "arc-transport-flush" version = "0.1.0" edition = "2024" publish = false [dependencies] sentry-core = { git = "https://github.com/getsentry/sentry-rust", rev = "12c8785008a9046ddb73a238349c95447e78dde4" } [workspace]and this
src/main.rs, whose transport'sflushalways reports envelopes left behind:use std::sync::Arc; use std::time::Duration; use sentry_core::{Envelope, Transport}; /// A transport whose queue never drains, so every flush reports envelopes left behind. struct NeverDrains; impl Transport for NeverDrains { fn send_envelope(&self, envelope: Envelope) { let _ = envelope; } fn flush(&self, _timeout: Duration) -> bool { false } } fn main() { let direct = Transport::flush(&NeverDrains, Duration::ZERO); let through_arc = Transport::flush(&Arc::new(NeverDrains), Duration::ZERO); let shutdown_through_arc = Transport::shutdown(&Arc::new(NeverDrains), Duration::ZERO); println!("flush on the transport: {direct}"); println!("flush on Arc<transport>: {through_arc}"); println!("shutdown on Arc<transport>: {shutdown_through_arc}"); } -
cargo run
Expected result
flush on Arc<transport>: false, what flush on the transport itself returns.
Actual result
flush on the transport: false
flush on Arc<transport>: true
shutdown on Arc<transport>: false
rustc 1.99.1 on Windows 11 x64. A caller told by flush through the Arc that the queue drained can end the process with envelopes still queued in T.
- 主要言語
- Rust
- スター
- 755
- フォーク
- 192
- 平均マージ
- 3日 15時間
- マージ済み PR(30日)
- 12
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
getsentry/sentry-rust のほかの issue
-
breaking change
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
getsentry/sentry-rust#1387 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
breaking change Rust
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
getsentry/sentry-rust#1386 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
breaking change Rust Task
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
getsentry/sentry-rust#1345 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Pin Rust toolchainオープンRust Task
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
getsentry/sentry-rust#933 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Make the `sentry` crate's `serde_json` feature a no-op対応中かも @sentry-junior が 3 日前に担当しました。 オープンRust
難易度 1/5 1〜3時間 初心者へのやさしさ 25/100
getsentry/sentry-rust#1385 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
getsentry/sentry-rust の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
quarto-dev/q2#1005 ·
メンテナーはふだん 1 日以内に返信
-
[Request]: streamtopオープンpackage-request
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
ScoopInstaller/Extras#19205 ·
メンテナーはふだん 1 日以内に返信
-
bug ci macos
難易度 1/5 1〜3時間 初心者へのやさしさ 62/100
laadtushar/edytlab#887 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
storytold/craft-libs#477 ·
メンテナーはふだん 1 日以内に返信