X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2c6557f613fcf6cdcebb08c321a5d061aeb780c6..2aff408211e84a226af6f74cb9338cbaf3fc4645:/services/keepstore/streamwriterat.go diff --git a/services/keepstore/streamwriterat.go b/services/keepstore/streamwriterat.go index 365b55f233..02dce6e216 100644 --- a/services/keepstore/streamwriterat.go +++ b/services/keepstore/streamwriterat.go @@ -19,10 +19,16 @@ import ( // streamWriterAt writes the data to the provided io.Writer in // sequential order. // +// streamWriterAt can also be wrapped with an io.OffsetWriter to +// provide an asynchronous buffer: the caller can use the io.Writer +// interface to write into a memory buffer and return without waiting +// for the wrapped writer to catch up. +// // Close returns when all data has been written through. type streamWriterAt struct { writer io.Writer buf []byte + writepos int // target offset if Write is called partsize int // size of each part written through to writer endpos int // portion of buf actually used, judging by WriteAt calls so far partfilled []int // number of bytes written to each part so far @@ -81,7 +87,7 @@ func (swa *streamWriterAt) writeToWriter() { } } -// WriteAt implements io.WriterAt. +// WriteAt implements io.WriterAt. WriteAt is goroutine-safe. func (swa *streamWriterAt) WriteAt(p []byte, offset int64) (int, error) { pos := int(offset) n := 0