every /metrics scrape clones the whole signal store
Maintainers usually reply within 1 day
@valeriiashapoval is already working on this.
Since Oct 24, 2026.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 54/100
- Issue type
- Refactor
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- rust
- Domain
- observability, performance
Research direction
Start by locating SignalStore::current, the Observation type, and the metrics collector that exports PROVIDER_SIGNALS; trace how the seen key is built. Implement the borrowing visitor and static-name key described in the issue, then run the project’s relevant tests and compare scrape allocations with the current behavior. Done when unrelated observations are not cloned during collection and existing metrics remain correct.
Written by the indexing model from the issue text.
Description
SignalStore::current clones every Observation from every target, including the metric name and the full labels map, and the collector then discards most of them: only the PROVIDER_SIGNALS names are exported, so unrelated EPP gauges are cloned and dropped. The seen key then clones the metric, site and provider strings again.
With many providers and peers, each /metrics scrape allocates in proportion to the whole store.
Fix: add a borrowing visitor on SignalStore, for example for_each_current(&self, f: impl FnMut(&Observation)), run under the read lock, and key seen on the gauge's static name rather than a clone of the sample's.
Worth measuring together with the exposition-size question in the body-cap issue, since the configurations where this is hot are the ones where the exposition is large.
- Dominant language
- Rust
- Stars
- 10
- Forks
- 24
- Avg merge
- 1d 14h
- Merged PRs (30d)
- 143
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
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.
More from praxis-proxy/grid
-
area/security triage/accepted
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
praxis-proxy/grid#504 · 1 comment ·
Maintainers usually reply within 1 day
-
triage/needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
praxis-proxy/grid#496 ·
Maintainers usually reply within 1 day
-
area/security epic triage/accepted
Difficulty 5/5 Over a week Newbie friendliness 10/100
praxis-proxy/grid#508 ·
Maintainers usually reply within 1 day
-
area/security triage/accepted
Difficulty 4/5 3-5 days Newbie friendliness 45/100
praxis-proxy/grid#507 · 1 comment ·
Maintainers usually reply within 1 day
-
area/security triage/accepted
Difficulty 4/5 3-5 days Newbie friendliness 45/100
praxis-proxy/grid#506 · 1 comment ·
Maintainers usually reply within 1 day
All issues in praxis-proxy/grid
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Cloud environment origin check accepts an explicit default HTTPS port (:443) (follow-up to #30418)Openarea: cloud
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
manaflow-ai/cmux#31340 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
apache/datafusion#26999 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
quarto-dev/q2#1005 ·
Maintainers usually reply within 1 day
-
Chat stream: two tool calls with the same index but different ids are merged into onePossibly taken @kunalgoesbyken claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
respanai/respan-gateway#136 ·
Maintainers usually reply within 1 day