diff --git a/CHANGELOG.md b/CHANGELOG.md index ba1f26befd..36420619b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ - [#8766](https://github.com/influxdata/influxdb/pull/8766): Fix deadlock when calling `SeriesIDsAllOrByExpr` - [#8638](https://github.com/influxdata/influxdb/issues/8638): Fix `influx_inspect export` so it skips missing files. - [#8770](https://github.com/influxdata/influxdb/pull/8770): Reduce how long it takes to walk the varrefs in an expression. +- [#8787](https://github.com/influxdata/influxdb/issues/8787): panic: runtime error: invalid memory address or nil pointer dereference. ## v1.3.4 [unreleased] diff --git a/tsdb/shard.go b/tsdb/shard.go index 594a69815c..aeddb405f7 100644 --- a/tsdb/shard.go +++ b/tsdb/shard.go @@ -112,7 +112,6 @@ type Shard struct { path string walPath string id uint64 - wg sync.WaitGroup database string retentionPolicy string @@ -350,11 +349,10 @@ func (s *Shard) close(clean bool) error { default: close(s.closing) } - s.wg.Wait() if clean { // Don't leak our shard ID and series keys in the index - s.UnloadIndex() + s.unloadIndex() } err := s.engine.Close() @@ -403,6 +401,13 @@ func (s *Shard) LastModified() time.Time { // UnloadIndex removes all references to this shard from the DatabaseIndex func (s *Shard) UnloadIndex() { + if err := s.ready(); err != nil { + return + } + s.unloadIndex() +} + +func (s *Shard) unloadIndex() { s.index.RemoveShard(s.id) }