Merge pull request #887 from harshavardhana/fix-encoding-bug-donut

Fix encoding bug in donut during encoding phase
This commit is contained in:
Harshavardhana 2015-10-05 22:15:22 -07:00
commit cf0e1a156b
2 changed files with 22 additions and 25 deletions

View File

@ -444,27 +444,29 @@ func (b bucket) writeObjectData(k, m uint8, writers []io.WriteCloser, objectData
var length int var length int
inputData := make([]byte, chunkSize) inputData := make([]byte, chunkSize)
length, e = objectData.Read(inputData) length, e = objectData.Read(inputData)
encodedBlocks, err := encoder.Encode(inputData) if length != 0 {
if err != nil { encodedBlocks, err := encoder.Encode(inputData[0:length])
return 0, 0, err.Trace() if err != nil {
} return 0, 0, err.Trace()
if _, err := hashWriter.Write(inputData[0:length]); err != nil { }
return 0, 0, probe.NewError(err) if _, err := hashWriter.Write(inputData[0:length]); err != nil {
}
for blockIndex, block := range encodedBlocks {
errCh := make(chan error, 1)
go func(writer io.Writer, reader io.Reader, errCh chan<- error) {
defer close(errCh)
_, err := io.Copy(writer, reader)
errCh <- err
}(writers[blockIndex], bytes.NewReader(block), errCh)
if err := <-errCh; err != nil {
// Returning error is fine here CleanupErrors() would cleanup writers
return 0, 0, probe.NewError(err) return 0, 0, probe.NewError(err)
} }
for blockIndex, block := range encodedBlocks {
errCh := make(chan error, 1)
go func(writer io.Writer, reader io.Reader, errCh chan<- error) {
defer close(errCh)
_, err := io.Copy(writer, reader)
errCh <- err
}(writers[blockIndex], bytes.NewReader(block), errCh)
if err := <-errCh; err != nil {
// Returning error is fine here CleanupErrors() would cleanup writers
return 0, 0, probe.NewError(err)
}
}
totalLength += length
chunkCount = chunkCount + 1
} }
totalLength += length
chunkCount = chunkCount + 1
} }
if e != io.EOF { if e != io.EOF {
return 0, 0, probe.NewError(e) return 0, 0, probe.NewError(e)

View File

@ -17,7 +17,6 @@
package main package main
import ( import (
"bytes"
"encoding/base64" "encoding/base64"
"io" "io"
"io/ioutil" "io/ioutil"
@ -131,7 +130,7 @@ func initSignatureV4(req *http.Request) (*signv4.Signature, *probe.Error) {
func extractHTTPFormValues(reader *multipart.Reader) (io.Reader, map[string]string, *probe.Error) { func extractHTTPFormValues(reader *multipart.Reader) (io.Reader, map[string]string, *probe.Error) {
/// HTML Form values /// HTML Form values
formValues := make(map[string]string) formValues := make(map[string]string)
filePart := new(bytes.Buffer) var filePart io.Reader
var err error var err error
for err == nil { for err == nil {
var part *multipart.Part var part *multipart.Part
@ -144,11 +143,7 @@ func extractHTTPFormValues(reader *multipart.Reader) (io.Reader, map[string]stri
} }
formValues[part.FormName()] = string(buffer) formValues[part.FormName()] = string(buffer)
} else { } else {
// FIXME: this will hog memory filePart = part
_, err := io.Copy(filePart, part)
if err != nil {
return nil, nil, probe.NewError(err)
}
} }
} }
} }