Skip to content
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

Sleep after over-long iteration #365

Merged
merged 1 commit into from
Jul 7, 2021
Merged

Sleep after over-long iteration #365

merged 1 commit into from
Jul 7, 2021

Conversation

vickenty
Copy link
Contributor

Too short iteration interval is problematic for rate calculation on slow moving
counters: small time delta pushes calculated rate way above the average rate
for the couner.

This PR revises logic introduced in #323 and limits minimum interval between
iterations to a half of the configured check period to minimize negative effect
on the rate calculations.

Too short iteration interval is problematic for rate calculation on slow moving
counters: small time delta pushes calculated rate way above the average rate
for the couner.

This PR revises logic introduced in #323 and limits minimum interval between
iterations to a half of the configured check period to minimize negative effect
on the rate calculations.
}
Thread.sleep(sleepPeriod);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think Thread.sleep() for a negative value will throw a java.lang.IllegalArgumentException. Please bear in mind that some instances might take longer to collect than the actual loopPeriod. That would result in a negative sleepPeriod that could trigger that exception.

The goal of this part of the code was to ensure we didn't skip iterations (and sleep) when the duration of the collection exceeded the check period, I think this change could change that expected behavior.

Maybe I'm missing something, feel free to ping me (or drop it in here) if you want to provide more context or discuss.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@truthbk

I think Thread.sleep() for a negative value will throw a java.lang.IllegalArgumentException. Please bear in mind that some instances might take longer to collect than the actual loopPeriod. That would result in a negative sleepPeriod that could trigger that exception.

sleepPeriod will not be negative, because it is assigned a new value a few lines above.

The goal of this part of the code was to ensure we didn't skip iterations (and sleep) when the duration of the collection exceeded the check period, I think this change could change that expected behavior.

True, but when the slowness is caused by the bean update process, two metric collections happen within a short time, sending two sets of metrics within one period. This is useless for gauges, skews histograms a bit and can cause confusing spikes in reported counter rates (small change over tiny time interval yields very high rate). Given that this behavior is actually relatively new, we might take a step back until a better solution is worked out. WDYT?

Copy link
Member

@truthbk truthbk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's merge this fix for now to avoid those potentially nasty spikes. We should work on a refactor that might allow us improve scheduling at a per-instance level.

@vickenty vickenty merged commit 4cba711 into master Jul 7, 2021
@vickenty vickenty deleted the vickenty/sleep-more branch July 7, 2021 09:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants