vitess icon indicating copy to clipboard operation
vitess copied to clipboard

fix: Cleanup `ResourcePool` & Include Mutex Lock for `refreshPool`

Open rMaxiQp opened this issue 1 month ago • 1 comments

Description

This PR cleans up the resource leakage from TestReopen and TestShrink, which causes flaky tests across ./go/pools/resource_pool_test.go. During my local run, TestIdleTimeout ended up failing with

    resource_pool_test.go:407: 
                Error Trace:    /home/zq2/vitess/go/pools/resource_pool_test.go:407
                Error:          Not equal: 
                                expected: int(2)
                                actual  : int64(6)
                Test:           TestIdleTimeout

Properly closing the resource pool helped to resolve the first issue but surfaces data race from refreshPool:

WARNING: DATA RACE
Write at 0x00c0000b9e68 by goroutine 38:
  runtime.racewrite()
      <autogenerated>:1 +0x1e
  vitess.io/vitess/go/pools.(*poolRefresh).stop()
      /home/zq2/vitess/go/pools/refresh_pool.go:98 +0xc6
  vitess.io/vitess/go/pools.(*ResourcePool).Close()
      /home/zq2/vitess/go/pools/resource_pool.go:147 +0x7e
  vitess.io/vitess/go/pools.TestReopen()
      /home/zq2/vitess/go/pools/resource_pool_test.go:369 +0x30b
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1934 +0x21c
  testing.(*T).Run.gowrap1()
      /usr/local/go/src/testing/testing.go:1997 +0x44

Previous read at 0x00c0000b9e68 by goroutine 42:
  runtime.raceread()
      <autogenerated>:1 +0x1e
  vitess.io/vitess/go/pools.(*poolRefresh).startRefreshTicker()
      /home/zq2/vitess/go/pools/refresh_pool.go:71 +0xf9
  vitess.io/vitess/go/pools.(*ResourcePool).reopen()
      /home/zq2/vitess/go/pools/resource_pool.go:185 +0x258
  vitess.io/vitess/go/pools.(*poolRefresh).startRefreshTicker.func1.gowrap2()
      /home/zq2/vitess/go/pools/refresh_pool.go:82 +0x42
...

Thus, a mutex lock for refreshPool.go is included here as well.

Related Issue(s)

related to #18965

Checklist

  • [ ] "Backport to:" labels have been added if this change should be back-ported to release branches
  • [ ] If this change is to be back-ported to previous releases, a justification is included in the PR description
  • [ ] Tests were added or are not required
  • [ ] Did the new or modified tests pass consistently locally and on CI?
  • [ ] Documentation was added or is not required

Deployment Notes

AI Disclosure

This PR was written with the help of Claude Sonnet 4.5

rMaxiQp avatar Dec 07 '25 05:12 rMaxiQp

Review Checklist

Hello reviewers! :wave: Please follow this checklist when reviewing this Pull Request.

General

  • [ ] Ensure that the Pull Request has a descriptive title.
  • [ ] Ensure there is a link to an issue (except for internal cleanup and flaky test fixes), new features should have an RFC that documents use cases and test cases.

Tests

  • [ ] Bug fixes should have at least one unit or end-to-end test, enhancement and new features should have a sufficient number of tests.

Documentation

  • [ ] Apply the release notes (needs details) label if users need to know about this change.
  • [ ] New features should be documented.
  • [ ] There should be some code comments as to why things are implemented the way they are.
  • [ ] There should be a comment at the top of each new or modified test to explain what the test does.

New flags

  • [ ] Is this flag really necessary?
  • [ ] Flag names must be clear and intuitive, use dashes (-), and have a clear help text.

If a workflow is added or modified:

  • [ ] Each item in Jobs should be named in order to mark it as required.
  • [ ] If the workflow needs to be marked as required, the maintainer team must be notified.

Backward compatibility

  • [ ] Protobuf changes should be wire-compatible.
  • [ ] Changes to _vt tables and RPCs need to be backward compatible.
  • [ ] RPC changes should be compatible with vitess-operator
  • [ ] If a flag is removed, then it should also be removed from vitess-operator and arewefastyet, if used there.
  • [ ] vtctl command output order should be stable and awk-able.

vitess-bot[bot] avatar Dec 07 '25 05:12 vitess-bot[bot]