diff --git a/weed/storage/erasure_coding/ec_encoder.go b/weed/storage/erasure_coding/ec_encoder.go index 5ff73de69..a873b7ce5 100644 --- a/weed/storage/erasure_coding/ec_encoder.go +++ b/weed/storage/erasure_coding/ec_encoder.go @@ -1,8 +1,40 @@ package erasure_coding +import ( + "io" + "os" + + "github.com/klauspost/reedsolomon" +) + const ( DataShardsCount = 10 ParityShardsCount = 4 ErasureCodingLargeBlockSize = 1024 * 1024 * 1024 // 1GB ErasureCodingSmallBlockSize = 1024 * 1024 // 1MB ) + +func encodeData(file *os.File, enc reedsolomon.Encoder, startOffset, blockSize int64, buffers [][]byte) error { + + // read data into buffers + for i := 0; i < DataShardsCount; i++ { + n, err := file.ReadAt(buffers[i], startOffset+blockSize*int64(i)) + if err != nil { + if err != io.EOF { + return err + } + } + if n < len(buffers[i]) { + for t := len(buffers[i]) - 1; t >= n; t-- { + buffers[i][t] = 0 + } + } + } + + err := enc.Encode(buffers) + if err != nil { + return err + } + + return nil +} diff --git a/weed/storage/erasure_coding/ec_test.go b/weed/storage/erasure_coding/ec_test.go index 8f75384c0..b7c3ae0dd 100644 --- a/weed/storage/erasure_coding/ec_test.go +++ b/weed/storage/erasure_coding/ec_test.go @@ -1,7 +1,6 @@ package erasure_coding import ( - "io" "os" "testing" @@ -51,27 +50,3 @@ func TestEncodingDecoding(t *testing.T) { } -func encodeData(file *os.File, enc reedsolomon.Encoder, startOffset, blockSize int64, buffers [][]byte) error { - - // read data into buffers - for i := 0; i < DataShardsCount; i++ { - n, err := file.ReadAt(buffers[i], startOffset+blockSize*int64(i)) - if err != nil { - if err != io.EOF { - return err - } - } - if n < len(buffers[i]) { - for t := len(buffers[i]) - 1; t >= n; t-- { - buffers[i][t] = 0 - } - } - } - - err := enc.Encode(buffers) - if err != nil { - return err - } - - return nil -}