mirror of
https://github.com/minio/minio.git
synced 2025-11-10 05:59:43 -05:00
This change provides new implementations of the XL backend operations: - create file - read file - heal file Further this change adds table based tests for all three operations. This affects also the bitrot algorithm integration. Algorithms are now integrated in an idiomatic way (like crypto.Hash). Fixes #4696 Fixes #4649 Fixes #4359
This commit is contained in:
committed by
Dee Koder
parent
617f2394fb
commit
85fcee1919
13
vendor/github.com/klauspost/reedsolomon/README.md
generated
vendored
13
vendor/github.com/klauspost/reedsolomon/README.md
generated
vendored
@@ -22,6 +22,19 @@ To get the package use the standard:
|
||||
go get github.com/klauspost/reedsolomon
|
||||
```
|
||||
|
||||
# Changes
|
||||
|
||||
## July 20, 2017
|
||||
|
||||
`ReconstructData` added to [`Encoder`](https://godoc.org/github.com/klauspost/reedsolomon#Encoder) interface. This can cause compatibility issues if you implement your own Encoder. A simple workaround can be added:
|
||||
```Go
|
||||
func (e *YourEnc) ReconstructData(shards [][]byte) error {
|
||||
return ReconstructData(shards)
|
||||
}
|
||||
```
|
||||
|
||||
You can of course also do your own implementation. The [`StreamEncoder`](https://godoc.org/github.com/klauspost/reedsolomon#StreamEncoder) handles this without modifying the interface. This is a good lesson on why returning interfaces is not a good design.
|
||||
|
||||
# Usage
|
||||
|
||||
This section assumes you know the basics of Reed-Solomon encoding. A good start is this [Backblaze blog post](https://www.backblaze.com/blog/reed-solomon/).
|
||||
|
||||
17
vendor/github.com/klauspost/reedsolomon/reedsolomon.go
generated
vendored
17
vendor/github.com/klauspost/reedsolomon/reedsolomon.go
generated
vendored
@@ -616,7 +616,7 @@ func (r reedSolomon) reconstruct(shards [][]byte, dataOnly bool) error {
|
||||
var ErrShortData = errors.New("not enough data to fill the number of requested shards")
|
||||
|
||||
// Split a data slice into the number of shards given to the encoder,
|
||||
// and create empty parity shards.
|
||||
// and create empty parity shards if necessary.
|
||||
//
|
||||
// The data will be split into equally sized shards.
|
||||
// If the data size isn't divisible by the number of shards,
|
||||
@@ -631,12 +631,19 @@ func (r reedSolomon) Split(data []byte) ([][]byte, error) {
|
||||
if len(data) == 0 {
|
||||
return nil, ErrShortData
|
||||
}
|
||||
// Calculate number of bytes per shard.
|
||||
// Calculate number of bytes per data shard.
|
||||
perShard := (len(data) + r.DataShards - 1) / r.DataShards
|
||||
|
||||
// Pad data to r.Shards*perShard.
|
||||
padding := make([]byte, (r.Shards*perShard)-len(data))
|
||||
data = append(data, padding...)
|
||||
if cap(data) > len(data) {
|
||||
data = data[:cap(data)]
|
||||
}
|
||||
|
||||
// Only allocate memory if necessary
|
||||
if len(data) < (r.Shards * perShard) {
|
||||
// Pad data to r.Shards*perShard.
|
||||
padding := make([]byte, (r.Shards*perShard)-len(data))
|
||||
data = append(data, padding...)
|
||||
}
|
||||
|
||||
// Split into equal-length shards.
|
||||
dst := make([][]byte, r.Shards)
|
||||
|
||||
Reference in New Issue
Block a user