Merge pull request #13779 from influxdata/er-fix-remap

fix(storage): don't remap renamed TSM file
pull/13825/head
Edd Robinson 2019-05-07 09:42:32 +01:00 committed by GitHub
commit 4673d2b307
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 39 deletions

View File

@ -20,9 +20,10 @@ type mmapAccessor struct {
logger *zap.Logger
mmapWillNeed bool // If true then mmap advise value MADV_WILLNEED will be provided the kernel for b.
mu sync.RWMutex
b []byte
f *os.File
mu sync.RWMutex
b []byte
f *os.File
_path string // If the underlying file is renamed then this gets updated
index *indirectIndex
}
@ -31,6 +32,9 @@ func (m *mmapAccessor) init() (*indirectIndex, error) {
m.mu.Lock()
defer m.mu.Unlock()
// Set the path explicitly.
m._path = m.f.Name()
if err := verifyVersion(m.f); err != nil {
return nil, err
}
@ -119,41 +123,10 @@ func (m *mmapAccessor) rename(path string) error {
m.mu.Lock()
defer m.mu.Unlock()
err := munmap(m.b)
if err != nil {
if err := file.RenameFile(m._path, path); err != nil {
return err
}
if err := m.f.Close(); err != nil {
return err
}
if err := file.RenameFile(m.f.Name(), path); err != nil {
return err
}
m.f, err = os.Open(path)
if err != nil {
return err
}
if _, err := m.f.Seek(0, 0); err != nil {
return err
}
stat, err := m.f.Stat()
if err != nil {
return err
}
m.b, err = mmap(m.f, 0, int(stat.Size()))
if err != nil {
return err
}
if m.mmapWillNeed {
return madviseWillNeed(m.b)
}
m._path = path
return nil
}
@ -251,9 +224,8 @@ func (m *mmapAccessor) readAll(key []byte) ([]Value, error) {
func (m *mmapAccessor) path() string {
m.mu.RLock()
path := m.f.Name()
m.mu.RUnlock()
return path
defer m.mu.RUnlock()
return m._path
}
func (m *mmapAccessor) close() error {