HdrHistogram / HdrHistogram/HdrHistogram_rust
SyncHistogram::refresh() freezes
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 372
- Forks
- 50
- PR merge metrics
- No merged PRs in 30d
Description
hdrhistogram = { version = "7.5.2", default-features = false, features = ["sync"] }
I'm getting recorders within a tokio::spawn closure:
time_per_one_recorder
.get_or(|| {
let time_per_one = time_per_one.lock().expect("time_per_one lock on updater");
std::cell::RefCell::from(time_per_one.recorder())
})
.borrow_mut()
.record(duration_ms)
.expect("record to histogram");
When all tasks (1 million of them, i.e. that many record() calls) were processed and there's nothing else to record, I'm doing a refresh:
let mut time_per_one = time_per_one.lock().unwrap();
println!("=> Merging histograms...");
time_per_one.refresh();
println!("=> Merging done");
My program hangs forever on the refresh(), because the merging message is the last thing I'm seeing on stdout. According to top, my process doesn't do anything. I never tried debugging (as in gdb) for Rust programs so can't tell more at this point, will try it later.
By the way, everything used to be working fine whenever I called refresh() roughly once a second during the task processing. The freeze started happening when I decided one big merge when everything's done is better because it stops blocking recorders amid task processing.
Is this a crate bug, or maybe I'm using the crate wrong?
Thanks.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The report centers on SyncHistogram::refresh() and recorder() calls inside a tokio::spawn closure; start by reproducing the one-million-record workload and tracing the refresh path. Determine whether the freeze comes from crate synchronization or the calling pattern, then confirm a fix or documented usage correction with a test or reproducible result.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- backend, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100