Do not read segment if no padding is necessary

Signed-off-by: Sylvain Baubeau <sbaubeau@redhat.com>
pull/493/head
Sylvain Baubeau 2015-06-22 21:27:49 +02:00
parent 3242378e1b
commit f21cbcebc6
1 changed files with 7 additions and 5 deletions

View File

@ -295,7 +295,7 @@ func (d *driver) WriteStream(ctx context.Context, path string, offset int64, rea
cursor = currentLength
paddingReader = bytes.NewReader(zeroBuf)
} else {
} else if offset-cursor > 0 {
// Offset is inside the current segment : we need to read the
// data from the beginning of the segment to offset
file, _, err := d.Conn.ObjectOpen(d.Container, getSegment(), false, nil)
@ -307,10 +307,12 @@ func (d *driver) WriteStream(ctx context.Context, path string, offset int64, rea
}
}
multi = io.MultiReader(
io.LimitReader(paddingReader, offset-cursor),
io.LimitReader(reader, chunkSize-(offset-cursor)),
)
readers := []io.Reader{}
if paddingReader != nil {
readers = append(readers, io.LimitReader(paddingReader, offset-cursor))
}
readers = append(readers, io.LimitReader(reader, chunkSize-(offset-cursor)))
multi = io.MultiReader(readers...)
writeSegment := func(segment string) (finished bool, bytesRead int64, err error) {
currentSegment, err := d.Conn.ObjectCreate(d.Container, segment, false, "", d.getContentType(), nil)