Uses streams internally for ipc Get/Put Content
This is done because libchan/spdystream does not currently support sending serialzied objects of size larger than 16MB See https://github.com/docker/libchan/issues/65
This commit is contained in:
parent
3f95694180
commit
7c892deb1c
4 changed files with 37 additions and 26 deletions
|
@ -4,6 +4,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"reflect"
|
||||
|
||||
"github.com/docker/libchan"
|
||||
|
@ -23,8 +24,14 @@ func (r noWriteReadWriteCloser) Write(p []byte) (n int, err error) {
|
|||
return 0, errors.New("Write unsupported")
|
||||
}
|
||||
|
||||
func WrapReadCloser(readCloser io.ReadCloser) io.ReadWriteCloser {
|
||||
return noWriteReadWriteCloser{readCloser}
|
||||
func WrapReader(reader io.Reader) io.ReadWriteCloser {
|
||||
if readWriteCloser, ok := reader.(io.ReadWriteCloser); ok {
|
||||
return readWriteCloser
|
||||
} else if readCloser, ok := reader.(io.ReadCloser); ok {
|
||||
return noWriteReadWriteCloser{readCloser}
|
||||
} else {
|
||||
return noWriteReadWriteCloser{ioutil.NopCloser(reader)}
|
||||
}
|
||||
}
|
||||
|
||||
type responseError struct {
|
||||
|
@ -46,15 +53,6 @@ func (err *responseError) Error() string {
|
|||
return fmt.Sprintf("%s: %s", err.Type, err.Message)
|
||||
}
|
||||
|
||||
type GetContentResponse struct {
|
||||
Content []byte
|
||||
Error *responseError
|
||||
}
|
||||
|
||||
type PutContentResponse struct {
|
||||
Error *responseError
|
||||
}
|
||||
|
||||
type ReadStreamResponse struct {
|
||||
Reader io.ReadWriteCloser
|
||||
Error *responseError
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue