diff options
| author | Nikita Mochalov <Zamony@users.noreply.github.com> | 2023-08-10 01:30:36 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-09 15:30:36 -0700 |
| commit | e6a49dc5337bb73a6334647bb34a44570b3ef6d7 (patch) | |
| tree | 238a2b7e5ba2c80427cf7898e521e62b8bd8977e /weed/storage/erasure_coding | |
| parent | 3365468d0d683f61a915eebce06cc8c54ecd1dd6 (diff) | |
| download | seaweedfs-e6a49dc5337bb73a6334647bb34a44570b3ef6d7.tar.xz seaweedfs-e6a49dc5337bb73a6334647bb34a44570b3ef6d7.zip | |
Fix resource leaks (#4737)
* Fix division by zero
* Fix file handle leak
* Fix file handle leak
* Fix file handle leak
* Fix goroutine leak
Diffstat (limited to 'weed/storage/erasure_coding')
| -rw-r--r-- | weed/storage/erasure_coding/ec_encoder.go | 4 | ||||
| -rw-r--r-- | weed/storage/erasure_coding/ec_shard.go | 3 | ||||
| -rw-r--r-- | weed/storage/erasure_coding/ec_volume.go | 8 |
3 files changed, 11 insertions, 4 deletions
diff --git a/weed/storage/erasure_coding/ec_encoder.go b/weed/storage/erasure_coding/ec_encoder.go index a60f76bc0..7d68de2e6 100644 --- a/weed/storage/erasure_coding/ec_encoder.go +++ b/weed/storage/erasure_coding/ec_encoder.go @@ -120,6 +120,10 @@ func generateMissingEcFiles(baseFileName string, bufferSize int, largeBlockSize func encodeData(file *os.File, enc reedsolomon.Encoder, startOffset, blockSize int64, buffers [][]byte, outputs []*os.File) error { bufferSize := int64(len(buffers[0])) + if bufferSize == 0 { + glog.Fatal("unexpected zero buffer size") + } + batchCount := blockSize / bufferSize if blockSize%bufferSize != 0 { glog.Fatalf("unexpected block size %d buffer size %d", blockSize, bufferSize) diff --git a/weed/storage/erasure_coding/ec_shard.go b/weed/storage/erasure_coding/ec_shard.go index f43280fb1..19ee17636 100644 --- a/weed/storage/erasure_coding/ec_shard.go +++ b/weed/storage/erasure_coding/ec_shard.go @@ -2,7 +2,6 @@ package erasure_coding import ( "fmt" - "github.com/seaweedfs/seaweedfs/weed/storage/types" "os" "path" "strconv" @@ -10,6 +9,7 @@ import ( "github.com/seaweedfs/seaweedfs/weed/stats" "github.com/seaweedfs/seaweedfs/weed/storage/needle" + "github.com/seaweedfs/seaweedfs/weed/storage/types" ) type ShardId uint8 @@ -39,6 +39,7 @@ func NewEcVolumeShard(diskType types.DiskType, dirname string, collection string } ecdFi, statErr := v.ecdFile.Stat() if statErr != nil { + _ = v.ecdFile.Close() return nil, fmt.Errorf("can not stat ec volume shard %s%s: %v", baseFileName, ToExt(int(shardId)), statErr) } v.ecdFileSize = ecdFi.Size() diff --git a/weed/storage/erasure_coding/ec_volume.go b/weed/storage/erasure_coding/ec_volume.go index ddee742a8..3e48e2c2d 100644 --- a/weed/storage/erasure_coding/ec_volume.go +++ b/weed/storage/erasure_coding/ec_volume.go @@ -3,19 +3,20 @@ package erasure_coding import ( "errors" "fmt" - "github.com/seaweedfs/seaweedfs/weed/pb" - "github.com/seaweedfs/seaweedfs/weed/storage/volume_info" - "golang.org/x/exp/slices" "math" "os" "sync" "time" + "golang.org/x/exp/slices" + + "github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb/master_pb" "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb" "github.com/seaweedfs/seaweedfs/weed/storage/idx" "github.com/seaweedfs/seaweedfs/weed/storage/needle" "github.com/seaweedfs/seaweedfs/weed/storage/types" + "github.com/seaweedfs/seaweedfs/weed/storage/volume_info" ) var ( @@ -52,6 +53,7 @@ func NewEcVolume(diskType types.DiskType, dir string, dirIdx string, collection } ecxFi, statErr := ev.ecxFile.Stat() if statErr != nil { + _ = ev.ecxFile.Close() return nil, fmt.Errorf("can not stat ec volume index %s.ecx: %v", indexBaseFileName, statErr) } ev.ecxFileSize = ecxFi.Size() |
