mirror of
https://github.com/minio/minio.git
synced 2025-04-04 03:40:30 -04:00
metacache: Always close the s2 writer (#10836)
The s2 writer could be leaked if there was an error. Make sure it is always closed.
This commit is contained in:
parent
71753e21e0
commit
d1e1205036
@ -23,7 +23,6 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
@ -84,56 +83,20 @@ func newMetacacheWriter(out io.Writer, blockSize int) *metacacheWriter {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
w.closer = func() error {
|
w.closer = func() (err error) {
|
||||||
|
defer func() {
|
||||||
|
cerr := s2w.Close()
|
||||||
|
if err == nil && cerr != nil {
|
||||||
|
err = cerr
|
||||||
|
}
|
||||||
|
}()
|
||||||
if w.streamErr != nil {
|
if w.streamErr != nil {
|
||||||
return w.streamErr
|
return w.streamErr
|
||||||
}
|
}
|
||||||
if err := w.mw.WriteBool(false); err != nil {
|
if err = w.mw.WriteBool(false); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := w.mw.Flush(); err != nil {
|
return w.mw.Flush()
|
||||||
return err
|
|
||||||
}
|
|
||||||
return s2w.Close()
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return &w
|
|
||||||
}
|
|
||||||
|
|
||||||
func newMetacacheFile(file string) *metacacheWriter {
|
|
||||||
w := metacacheWriter{
|
|
||||||
mw: nil,
|
|
||||||
}
|
|
||||||
w.creator = func() error {
|
|
||||||
fw, err := os.Create(file)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
s2w := s2.NewWriter(fw, s2.WriterBlockSize(1<<20))
|
|
||||||
w.mw = msgp.NewWriter(s2w)
|
|
||||||
w.creator = nil
|
|
||||||
if err := w.mw.WriteByte(metacacheStreamVersion); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
w.closer = func() error {
|
|
||||||
if w.streamErr != nil {
|
|
||||||
fw.Close()
|
|
||||||
return w.streamErr
|
|
||||||
}
|
|
||||||
// Indicate EOS
|
|
||||||
if err := w.mw.WriteBool(false); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := w.mw.Flush(); err != nil {
|
|
||||||
fw.Close()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s2w.Close(); err != nil {
|
|
||||||
fw.Close()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return fw.Close()
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -47,11 +47,6 @@ func loadMetacacheSampleEntries(t testing.TB) metaCacheEntriesSorted {
|
|||||||
if err != io.EOF {
|
if err != io.EOF {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if false {
|
|
||||||
w := newMetacacheFile("testdata/metacache-new.s2")
|
|
||||||
w.write(entries.entries()...)
|
|
||||||
w.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user