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

output/cloudv2: Drain the SampleBuffer on stop and abort once #3105

Merged
merged 1 commit into from
Jun 1, 2023

Conversation

codebien
Copy link
Contributor

It forces the drain not only of the collector but also of the SampleBuffer when it stops gracefully. Added also a sync once controller to have mutex protection around close otherwise potentially we could have a race around the select case closing multiple times.

@codebien codebien requested a review from mstoykov May 31, 2023 09:09
@codebien codebien self-assigned this May 31, 2023
Comment on lines 166 to -169
func (o *Output) collectSamples() {
samples := o.GetBufferedSamples()
if len(samples) < 1 {
return
}
Copy link
Contributor Author

@codebien codebien May 31, 2023

Choose a reason for hiding this comment

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

I removed the check based on the assumption we don't expect to invoke this and get an empty buffer because the aggregation period should be wide enough, and in the case, we get it then there are two next operations:

  1. a for range: so it is skipped
  2. The expired check: we go over the list one more time but if we get some expired, then they will be removed from the list.

Copy link
Contributor

Choose a reason for hiding this comment

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

Even if those assumptions are valid, I don't see how an early return if there's no work to be done would hurt. If nothing else it would simplify understanding this logic without being aware of these nuances.

But it's up to you 🙂

Copy link
Contributor Author

@codebien codebien Jun 1, 2023

Choose a reason for hiding this comment

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

I don't see how an early return if there's no work to be done would hurt.

@imiric Then the code is not obvious and I think we need to arrange it in another way. The reason why I removed it is because we need to flush the SampleBuffer + the collector's buffer. If we return we can't execute the drain of the collecort's buffer. Do you think it makes sense?

The alternative is doing something one of the following in StopWithTestError:

output.collectSamples()
output.collector.collectSamples(nil)

this has the downside to call two times the collector.CollectSamples method, so another way could be:

output.collector.collectSamples(o.GetBufferedSamples())

Copy link
Contributor

Choose a reason for hiding this comment

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

OK, I was misunderstanding where the flush is happening.

I still don't have a full grasp of the code here, but that's on me, so I don't think refactoring would help. 🙂

Base automatically changed from cloud-v2-bucket-unix-time to master May 31, 2023 09:26
@mstoykov mstoykov requested a review from imiric May 31, 2023 09:47
Copy link
Contributor

@imiric imiric left a comment

Choose a reason for hiding this comment

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

Makes sense 👍

Comment on lines 166 to -169
func (o *Output) collectSamples() {
samples := o.GetBufferedSamples()
if len(samples) < 1 {
return
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Even if those assumptions are valid, I don't see how an early return if there's no work to be done would hurt. If nothing else it would simplify understanding this logic without being aware of these nuances.

But it's up to you 🙂

@mstoykov mstoykov added this to the v0.45.0 milestone Jun 1, 2023
@codebien codebien merged commit 04a1356 into master Jun 1, 2023
@codebien codebien deleted the cloud-v2-stop-fix branch June 1, 2023 10:34
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.

3 participants