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

Refactor processFilteredNodes for testing #968

Merged
merged 3 commits into from
May 26, 2021

Conversation

sysadmind
Copy link
Contributor

I was digging into the intermittent failures of Test_processFilteredNodes and had trouble really understanding what the function, and the complimenting filterNodes were doing so I broke some of the logic out into smaller functions to encapsulate the logic and make testing of each portion easier. I added unit tests for these smaller functions to help catch potential issues with each. I left Test_processFilteredNodes as it serves well as a higher level test of all the other funtions.

This adjusts the thresholds for the even distribution of picking nodes when the cardinality is lower than the possible nodes. Due to the randomness, it is quite hard to test how evenly distributed the values are within the original thresholds. This would cause many intermittent test failures when the values were just over or under the thresholds.

This also moves the seed of math.Rand into the agent startup. Reseeding the randomness every function call seems like extra overhead for no value. I do not believe that constantly reseeding the randomness increases randomness in anyway.

This may help the tests for #967

I was digging into the intermittent failures of Test_processFilteredNodes and had trouble really understanding what the function, and the complimenting filterNodes were doing so I broke some of the logic out into smaller functions to encapsulate the logic and make testing of each portion easier. I added unit tests for these smaller functions to help catch potential issues with each. I left Test_processFilteredNodes as it serves well as a higher level test of all the other funtions.

This adjusts the thresholds for the even distribution of picking nodes when the cardinality is lower than the possible nodes. Due to the randomness, it is quite hard to test how evenly distributed the values are within the original thresholds. This would cause many intermittent test failures when the values were just over or under the thresholds.

This also moves the seed of math.Rand into the agent startup. Reseeding the randomness every function call seems like extra overhead for no value. I do not believe that constantly reseeding the randomness increases randomness in anyway.
Copy link
Collaborator

@yvanoers yvanoers left a comment

Choose a reason for hiding this comment

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

Nice work, certainly more readable.
Though I do suspect this is not as fast, but it would have to be measured to be sure and assess whether or not difference is significant, especially for larger clusters. This concern is the reason why I didn't pull it apart when last I touched this.

dkron/tags.go Outdated Show resolved Hide resolved
dkron/agent.go Outdated Show resolved Hide resolved
@yvanoers
Copy link
Collaborator

yvanoers commented May 20, 2021

I didn't realize the intermittent failures of the filterNodes test were frequent enough to make someone investigate it. I will intensify my efforts to fix the failures.

@sysadmind
Copy link
Contributor Author

Thanks for the review @yvanoers. I incorporated your feedback in another commit.

I'm not sure how many people are regularly running the tests to catch the intermittent failures, but I have been running them a ton recently because of my work on race conditions in tests. I noticed in another one of your PRs that you closed and reopened it after the same failing test that I had in before. That leads me to believe that there are still some flaky tests beyond what this PR intends to solve.

@yvanoers
Copy link
Collaborator

yvanoers commented May 24, 2021

That leads me to believe that there are still some flaky tests beyond what this PR intends to solve.

Oh yes, there definitely is. I know exactly where the problem lies and I have a solution waiting in a branch (as sort-of promised a couple days ago). But it would conflict with this PR. If this PR gets merged I can go ahead and finish my changes. Or if it gets rejected, there are a couple of changes in this PR I'd like to incorporate.

Edit: Oh wait, there are other tests than the one I'm targetting that are failing too - I didn't realize until now.

vcastellm
vcastellm previously approved these changes May 25, 2021
Copy link
Member

@vcastellm vcastellm left a comment

Choose a reason for hiding this comment

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

Good work here, thanks a lot!

dkron/agent.go Outdated
// * the (modified) map of execNodes
// * a map of tag values without cardinality
// * the map of execNodes that match the provided tags
// * a clean map of tag values without cardinality
// * cardinality, i.e. the max number of nodes that should be targeted, regardless of the
// number of nodes in the resulting map.
// * an error if a cardinality was malformed
func filterNodes(execNodes map[string]serf.Member, tags map[string]string) (map[string]serf.Member, map[string]string, int, error) {
Copy link
Member

Choose a reason for hiding this comment

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

Maybe execNodes -> allNodes? but I'm nitpicking

@sysadmind
Copy link
Contributor Author

I think that's a more readable name @Victorcoder. I just pushed the update. Thanks!

@vcastellm vcastellm merged commit 858ec29 into distribworks:master May 26, 2021
@sysadmind sysadmind deleted the filternodes-testing branch May 27, 2021 13: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.

3 participants