Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
51805: stats: fix race condition when refreshing cache r=rytaft a=rytaft This commit fixes a race condition that was introduced in cockroachdb#51616. The race condition existed because it was possible for two refreshes to be triggered in close succession, and there was no mechanism to prevent the first refresh from overwriting the second if it was delayed. We fix the race condition by introducing two boolean flags into each cache entry: `refreshing` and `mustRefreshAgain`. If `refreshing` is true, that indicates that the current statistics for this table are stale, and we are in the process of fetching the updated stats from the database. In the mean time, other callers can use the stale stats and do not need to wait. If a goroutine tries to perform a refresh when a refresh is already in progress, it will see that `refreshing=true` and will set the `mustRefreshAgain` flag to `true` before returning. When the original goroutine that was performing the refresh returns from the database and sees that `mustRefreshAgain=true`, it will trigger another refresh. Informs cockroachdb#50863 Release note: None Co-authored-by: Rebecca Taft <[email protected]>
- Loading branch information