-
Notifications
You must be signed in to change notification settings - Fork 1.2k
fix: use injected now() instead of time.Now() in summary methods #1672
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Signed-off-by: Ivan Goncharov <[email protected]>
Contributor
Author
|
@ArthurSens pls review |
ArthurSens
approved these changes
Nov 3, 2024
Member
ArthurSens
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Brilliant, thank you! Your "steps to reproduce" was also very intelligent ❤️
Just one comment and let's ![]()
Signed-off-by: Ivan Goncharov <[email protected]>
Member
|
Thank you! |
Member
|
Nice, amazing! |
This was referenced Feb 19, 2025
Merged
1 task
1 task
1 task
1 task
1 task
Merged
1 task
1 task
This was referenced Feb 19, 2025
Merged
1 task
This was referenced Feb 19, 2025
Update module github.com/prometheus/client_golang to v1.21.1 - autoclosed
giantswarm/exporterkit#147
Closed
This was referenced Sep 30, 2025
1 task
1 task
1 task
1 task
1 task
1 task
This was referenced Nov 5, 2025
Open
1 task
This was referenced Nov 7, 2025
1 task
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi!
This PR should fix #1666
How the problem with
TestSummaryDecaymanifests?When you run
go test -run TestSummaryDecaynormally on laptop it is always pass.But on CI it (sometimes) fails.
Looks like it takes very performance constrained environment to reveal problem. Lets recreate one.
How to reproduce locally
Run something like
stress -c 14and while it running executego test -run TestSummaryDecayagain:OK, its reproduces
Root cause analysis and proposed solution
The testis failing due to its dependency on real-time progression and the
Summaryimplementation's direct use oftime.Now(). By modifying theSummaryimplementation to utilize the injectednowfunction fromSummaryOptsand adjusting the test to control time progression, we eliminate the flakiness and make the test deterministic.RCA
Dependency on Real Time: The test relied on actual system time, using
time.Sleepandtime.Tickerto simulate time progression. This made the test susceptible to failures due to variations in execution speed, CPU scheduling, and other external factors beyond our control.Injected now Function Not Utilized: Although
SummaryOptsincludes anowfunction intended for testing purposes, theSummaryimplementation did not use this injected function. Instead, it directly calledtime.Now(), ignoring the custom time function provided inSummaryOpts.Mismatch Between Test and Implementation: The test attempted to control time progression by advancing a mock
nowvariable. However, since theSummaryimplementation continued to use the actual system time, there was a discrepancy between the test's simulated time and theSummary's internal time references, causing the test to fail consistently.Results
Test is now stable and deterministic even if all CPUs are busy.