-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
fix: use injected now() instead of time.Now() in summary methods #1672
Merged
Conversation
This file contains 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 <i.morph@gmail.com>
@ArthurSens pls review |
ArthurSens
approved these changes
Nov 3, 2024
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 <i.morph@gmail.com>
Thank you! |
Nice, amazing! |
Merged
1 task
1 task
Open
1 task
1 task
1 task
1 task
1 task
This was referenced Feb 19, 2025
1 task
This was referenced Feb 19, 2025
Open
This was referenced Feb 21, 2025
Renovate: Update module github.com/spf13/cobra to v1.9.1
sapcc/swift-s3-cache-prewarmer#217
Merged
1 task
1 task
1 task
1 task
# for free
to join this conversation on GitHub.
Already have an account?
# 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
TestSummaryDecay
manifests?When you run
go test -run TestSummaryDecay
normally 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 14
and while it running executego test -run TestSummaryDecay
again:OK, its reproduces
Root cause analysis and proposed solution
The testis failing due to its dependency on real-time progression and the
Summary
implementation's direct use oftime.Now()
. By modifying theSummary
implementation to utilize the injectednow
function fromSummaryOpts
and 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.Sleep
andtime.Ticker
to 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
SummaryOpts
includes anow
function intended for testing purposes, theSummary
implementation 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
now
variable. However, since theSummary
implementation 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.