mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-10-21 15:40:03 +08:00
volume: fix memory leak during compaction
fix https://github.com/chrislusf/seaweedfs/issues/1222
This commit is contained in:
@@ -27,6 +27,9 @@ const (
|
||||
func WriteSortedFileFromIdx(baseFileName string, ext string) (e error) {
|
||||
|
||||
nm, err := readNeedleMap(baseFileName)
|
||||
if nm != nil {
|
||||
defer nm.Close()
|
||||
}
|
||||
if err != nil {
|
||||
return fmt.Errorf("readNeedleMap: %v", err)
|
||||
}
|
||||
@@ -196,7 +199,7 @@ func encodeDatFile(remainingSize int64, err error, baseFileName string, bufferSi
|
||||
}
|
||||
|
||||
buffers := make([][]byte, TotalShardsCount)
|
||||
for i, _ := range buffers {
|
||||
for i := range buffers {
|
||||
buffers[i] = make([]byte, bufferSize)
|
||||
}
|
||||
|
||||
@@ -233,7 +236,7 @@ func rebuildEcFiles(shardHasData []bool, inputFiles []*os.File, outputFiles []*o
|
||||
}
|
||||
|
||||
buffers := make([][]byte, TotalShardsCount)
|
||||
for i, _ := range buffers {
|
||||
for i := range buffers {
|
||||
if shardHasData[i] {
|
||||
buffers[i] = make([]byte, ErasureCodingSmallBlockSize)
|
||||
}
|
||||
|
@@ -7,9 +7,10 @@ import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/klauspost/reedsolomon"
|
||||
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/needle_map"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/types"
|
||||
"github.com/klauspost/reedsolomon"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -42,6 +43,7 @@ func TestEncodingDecoding(t *testing.T) {
|
||||
|
||||
func validateFiles(baseFileName string) error {
|
||||
nm, err := readNeedleMap(baseFileName)
|
||||
defer nm.Close()
|
||||
if err != nil {
|
||||
return fmt.Errorf("readNeedleMap: %v", err)
|
||||
}
|
||||
|
@@ -113,3 +113,7 @@ func (cm *MemDb) LoadFromIdx(idxName string) (ret error) {
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func (cm *MemDb) Close() {
|
||||
cm.db.Close()
|
||||
}
|
||||
|
23
weed/storage/needle_map/memdb_test.go
Normal file
23
weed/storage/needle_map/memdb_test.go
Normal file
@@ -0,0 +1,23 @@
|
||||
package needle_map
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/types"
|
||||
)
|
||||
|
||||
func BenchmarkMemDb(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
for i := 0; i < b.N; i++ {
|
||||
nm := NewMemDb()
|
||||
|
||||
nid := types.NeedleId(345)
|
||||
offset := types.Offset{
|
||||
OffsetHigher: types.OffsetHigher{},
|
||||
OffsetLower: types.OffsetLower{},
|
||||
}
|
||||
nm.Set(nid, offset, 324)
|
||||
nm.Close()
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user