fixing hasher is not consistent when getting multiple request at the same time #773
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.
GetByClusterIdentity() is protected by RLock but multiple read request can be called as it is read lock.
And fnv.New32a is not thread safe hasher so hasher.Write() function can be called at the same time and hash result is inconsistent.
so that messages can be sent to wrong cluster.
I changed to make new hasher every time it called and fnv.New32a() has very light weight so I think it is fine for performance as well. only problem can be increasing GC count but hasher is not escape from hash() function so I think it is allocated in stack memory so I think GC count will be not increased.
I added test case for verifying this problem. without this change, the test will be failed.