Fix a rare shutdown race in RocksDBShaCalculatorThread #14709
Merged
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.
Scope & Purpose
Backport of #14708
Fix a rare shutdown race in RocksDBShaCalculatorThread.
The
RocksDBShaCalculatorThread
object is owned by theRocksDBShaCalculator
, which itself is owned by theRocksDBEngine
. The RocksDBEngine has a shared_pointer on the RocksDBShaCalculator, and the shared_ptr is only resetted in the dtor ofRocksDBEngine
.This may be too late, because it means the
RocksDBShaCalculatorThread
can still run while the dtor ofRocksDBEngine
is running. The thread may also access other features from the ApplicationServer which have been shut down at that point.The fix is to wait out the end of
RocksDBShaCalculator
's run method inRocksDBEngine::stop()
, so that when we are past it we can be sure that theRocksDBShaCalculatorThread
is not running and accessing any other feature.This issue was uncovered by nightly chaos tests in https://jenkins.arangodb.biz/job/arangodb-ANY-windows-matrix/2440/EDITION=enterprise,STORAGE_ENGINE=rocksdb,TEST_SUITE=cluster,limit=test&&windows/artifact/testfailures.log
Backports:
Testing & Verification