diff --git a/pkg/ioutil/readcloser.go b/pkg/ioutil/readcloser.go new file mode 100644 index 000000000..7c1fda1c2 --- /dev/null +++ b/pkg/ioutil/readcloser.go @@ -0,0 +1,24 @@ +// Copyright 2015 CoreOS, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package ioutil + +import "io" + +// ReaderAndCloser implements io.ReadCloser interface by combining +// reader and closer together. +type ReaderAndCloser struct { + io.Reader + io.Closer +} diff --git a/rafthttp/snapshot_sender.go b/rafthttp/snapshot_sender.go index 53e348278..c2b46a9ab 100644 --- a/rafthttp/snapshot_sender.go +++ b/rafthttp/snapshot_sender.go @@ -22,6 +22,7 @@ import ( "time" "github.com/coreos/etcd/pkg/httputil" + pioutil "github.com/coreos/etcd/pkg/ioutil" "github.com/coreos/etcd/pkg/types" "github.com/coreos/etcd/raft" "github.com/coreos/etcd/snap" @@ -142,12 +143,6 @@ func (s *snapshotSender) post(req *http.Request) (err error) { } } -// readCloser implements io.ReadCloser interface. -type readCloser struct { - io.Reader - io.Closer -} - func createSnapBody(merged snap.Message) io.ReadCloser { buf := new(bytes.Buffer) enc := &messageEncoder{w: buf} @@ -156,7 +151,7 @@ func createSnapBody(merged snap.Message) io.ReadCloser { plog.Panicf("encode message error (%v)", err) } - return &readCloser{ + return &pioutil.ReaderAndCloser{ Reader: io.MultiReader(buf, merged.ReadCloser), Closer: merged.ReadCloser, }