From cc628a109745a3ca6a836fa676c269bb9caad0ce Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Tue, 23 Aug 2016 16:04:22 -0600 Subject: [PATCH] Fix mmap dereferencing Adds a missing dereference call to `Close()` as well as fixes a tag copy issue. --- CHANGELOG.md | 1 + tsdb/engine/tsm1/file_store.go | 7 +++++-- tsdb/engine/tsm1/reader.go | 2 +- tsdb/meta.go | 6 +++--- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97772f4db63..ee7494a3d6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - [#1834](https://github.com/influxdata/influxdb/issues/1834): Drop time when used as a tag or field key. - [#7152](https://github.com/influxdata/influxdb/issues/7152): Decrement number of measurements only once when deleting the last series from a measurement. - [#7177](https://github.com/influxdata/influxdb/issues/7177): Fix base64 encoding issue with /debug/vars stats. +- [#7196](https://github.com/influxdata/influxdb/ssues/7196): Fix mmap dereferencing, fixes #7183, #7180 ## v1.0.0 [unreleased] diff --git a/tsdb/engine/tsm1/file_store.go b/tsdb/engine/tsm1/file_store.go index c05323f4292..7849982cb1e 100644 --- a/tsdb/engine/tsm1/file_store.go +++ b/tsdb/engine/tsm1/file_store.go @@ -442,8 +442,11 @@ func (f *FileStore) Close() error { f.mu.Lock() defer f.mu.Unlock() - for _, f := range f.files { - f.Close() + for _, file := range f.files { + if f.dereferencer != nil { + file.deref(f.dereferencer) + } + file.Close() } f.files = nil diff --git a/tsdb/engine/tsm1/reader.go b/tsdb/engine/tsm1/reader.go index 0edddf2bac3..ec46fece969 100644 --- a/tsdb/engine/tsm1/reader.go +++ b/tsdb/engine/tsm1/reader.go @@ -491,7 +491,7 @@ func (t *TSMReader) BlockIterator() *BlockIterator { // deref removes mmap references held by another object. func (t *TSMReader) deref(d dereferencer) { - if acc, ok := t.accessor.(*mmapAccessor); ok { + if acc, ok := t.accessor.(*mmapAccessor); ok && acc.b != nil { d.Dereference(acc.b) } } diff --git a/tsdb/meta.go b/tsdb/meta.go index 2b2bb732007..4a710c6c51f 100644 --- a/tsdb/meta.go +++ b/tsdb/meta.go @@ -1504,9 +1504,9 @@ func (s *Series) Dereference(b []byte) { min := uintptr(unsafe.Pointer(&b[0])) max := min + uintptr(len(b)) - for _, t := range s.Tags { - deref(&t.Key, min, max) - deref(&t.Value, min, max) + for i := range s.Tags { + deref(&s.Tags[i].Key, min, max) + deref(&s.Tags[i].Value, min, max) } s.mu.Unlock()