diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c4f7ac0084..313b56c2d4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ The stress tool `influx_stress` will be removed in a subsequent release. We reco ### Bugfixes +- [#7786](https://github.com/influxdata/influxdb/pull/7786): Fix potential race condition in correctness of tsm1_cache memBytes statistic. - [#7784](https://github.com/influxdata/influxdb/pull/7784): Fix broken error return on meta client's UpdateUser and DropContinuousQuery methods. - [#7741](https://github.com/influxdata/influxdb/pull/7741): Fix string quoting and significantly improve performance of `influx_inspect export`. - [#7698](https://github.com/influxdata/influxdb/pull/7698): CLI was caching db/rp for insert into statements. diff --git a/tsdb/engine/tsm1/cache.go b/tsdb/engine/tsm1/cache.go index 320b60d257c..b166cc398b6 100644 --- a/tsdb/engine/tsm1/cache.go +++ b/tsdb/engine/tsm1/cache.go @@ -425,8 +425,8 @@ func (c *Cache) increaseSize(delta uint64) { // decreaseSize decreases size by delta. func (c *Cache) decreaseSize(delta uint64) { - size := atomic.LoadUint64(&c.size) - atomic.StoreUint64(&c.size, size-delta) + // Per sync/atomic docs, bit-flip delta minus one to perform subtraction within AddUint64. + atomic.AddUint64(&c.size, ^(delta - 1)) } // MaxSize returns the maximum number of bytes the cache may consume.