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

Fix race condition in clusterNodes.Addrs() #3219

Merged
merged 3 commits into from
Feb 3, 2025

Conversation

shawnwgit
Copy link
Contributor

Resolve a Race Condition in clusterNodes.Addrs() Method.
The clusterNodes.Addrs() method previously returned a reference to a string slice, which introduced the potential for concurrent read operations by callers while the slice was being modified, potentially leading to undefined behavior. This race condition could occur during GC or other operations affecting the slice.

Fix: Updated the clusterNodes.Addrs() method to create and return a copy of the original addrs slice. By ensuring that callers receive an independent copy, we eliminate the possibility of concurrent access issues.

Fixes #3218

shawnwgit and others added 3 commits January 5, 2025 12:10
Resolve a race condition in the clusterNodes.Addrs() method.
Previously, the method returned a reference to a string slice, creating
the potential for concurrent reads by the caller while the slice was
being modified by the garbage collection process.
@ndyakov ndyakov self-requested a review February 1, 2025 01:44
@ndyakov ndyakov assigned ndyakov and unassigned ndyakov Feb 1, 2025
Copy link
Collaborator

@ndyakov ndyakov left a comment

Choose a reason for hiding this comment

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

Great catch, thank you!

@ndyakov ndyakov merged commit d0fb810 into redis:master Feb 3, 2025
15 checks passed
ndyakov added a commit that referenced this pull request Feb 17, 2025
Resolve a race condition in the clusterNodes.Addrs() method.
Previously, the method returned a reference to a string slice, creating
the potential for concurrent reads by the caller while the slice was
being modified by the garbage collection process.

Co-authored-by: Nedyalko Dyakov <[email protected]>
@ndyakov ndyakov mentioned this pull request Feb 21, 2025
ndyakov added a commit that referenced this pull request Feb 21, 2025
* Add guidance on unstable RESP3 support for RediSearch commands to README (#3177)

* Add UnstableResp3 to docs

* Add RawVal and RawResult to wordlist

* Explain more about SetVal

* Add UnstableResp to wordlist

* Eliminate redundant dial mutex causing unbounded connection queue contention (#3088)

* Eliminate redundant dial mutex causing unbounded connection queue contention

* Dialer connection timeouts unit test

---------

Co-authored-by: ofekshenawa <[email protected]>

* SortByWithCount FTSearchOptions fix (#3201)

* SortByWithCount FTSearchOptions fix

* FTSearch test fix

* Another FTSearch test fix

* Another FTSearch test fix

---------

Co-authored-by: Christopher Golling <[email protected]>

* Fix race condition in clusterNodes.Addrs() (#3219)

Resolve a race condition in the clusterNodes.Addrs() method.
Previously, the method returned a reference to a string slice, creating
the potential for concurrent reads by the caller while the slice was
being modified by the garbage collection process.

Co-authored-by: Nedyalko Dyakov <[email protected]>

* chore: fix some comments (#3226)

Signed-off-by: zhuhaicity <[email protected]>
Co-authored-by: Nedyalko Dyakov <[email protected]>

* fix(aggregate, search): ft.aggregate bugfixes (#3263)

* fix: rearange args for ft.aggregate

apply should be before any groupby or sortby

* improve test

* wip: add scorer and addscores

* enable all tests

* fix ftsearch with count test

* make linter happy

* Addscores is available in later redisearch releases.

For safety state it is available in redis ce 8

* load an apply seem to break scorer and addscores

* fix: add unstableresp3 to cluster client (#3266)

* fix: add unstableresp3 to cluster client

* propagate unstableresp3

* proper test that will ignore error, but fail if client panics

* add separate test for clusterclient constructor

* fix: flaky ClientKillByFilter test (#3268)

* Reinstate read-only lock on hooks access in dialHook (#3225)

* use limit when limitoffset is zero (#3275)

* remove redis 8 comments

* update package versions

* use latest golangci-lint

* fix(search&aggregate):fix error overwrite and typo  #3220 (#3224)

* fix (#3220)

* LOAD has NO AS param(https://redis.io/docs/latest/commands/ft.aggregate/)

* fix typo: WITHCOUT -> WITHCOUNT

* fix (#3220):

    * Compatible with known RediSearch issue in test

* fix (#3220)

    * fixed the calculation bug of the count of load params

* test should not include special condition

* return errors when they occur

---------

Co-authored-by: Nedyalko Dyakov <[email protected]>
Co-authored-by: ofekshenawa <[email protected]>

* Recognize byte slice for key argument in cluster client hash slot computation (#3049)

Co-authored-by: Vladyslav Vildanov <[email protected]>
Co-authored-by: ofekshenawa <[email protected]>

---------

Signed-off-by: zhuhaicity <[email protected]>
Co-authored-by: ofekshenawa <[email protected]>
Co-authored-by: LINKIWI <[email protected]>
Co-authored-by: Cgol9 <[email protected]>
Co-authored-by: Christopher Golling <[email protected]>
Co-authored-by: Shawn Wang <[email protected]>
Co-authored-by: ZhuHaiCheng <[email protected]>
Co-authored-by: herodot <[email protected]>
Co-authored-by: Vladyslav Vildanov <[email protected]>
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.

Race condition in function clusterNodes.Addrs()
2 participants