|
@@ -25,6 +25,7 @@ import (
|
|
|
"time"
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/coreos/etcd/etcdserver/stats"
|
|
"github.com/coreos/etcd/etcdserver/stats"
|
|
|
|
|
+ "github.com/coreos/etcd/pkg/httputil"
|
|
|
"github.com/coreos/etcd/pkg/pbutil"
|
|
"github.com/coreos/etcd/pkg/pbutil"
|
|
|
"github.com/coreos/etcd/pkg/types"
|
|
"github.com/coreos/etcd/pkg/types"
|
|
|
"github.com/coreos/etcd/raft"
|
|
"github.com/coreos/etcd/raft"
|
|
@@ -43,10 +44,6 @@ const (
|
|
|
|
|
|
|
|
var errStopped = errors.New("stopped")
|
|
var errStopped = errors.New("stopped")
|
|
|
|
|
|
|
|
-type canceler interface {
|
|
|
|
|
- CancelRequest(*http.Request)
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
type pipeline struct {
|
|
type pipeline struct {
|
|
|
from, to types.ID
|
|
from, to types.ID
|
|
|
cid types.ID
|
|
cid types.ID
|
|
@@ -149,15 +146,14 @@ func (p *pipeline) post(data []byte) (err error) {
|
|
|
}
|
|
}
|
|
|
}()
|
|
}()
|
|
|
done := make(chan struct{}, 1)
|
|
done := make(chan struct{}, 1)
|
|
|
|
|
+ cancel := httputil.RequestCanceler(p.tr, req)
|
|
|
go func() {
|
|
go func() {
|
|
|
select {
|
|
select {
|
|
|
case <-done:
|
|
case <-done:
|
|
|
case <-p.stopc:
|
|
case <-p.stopc:
|
|
|
waitSchedule()
|
|
waitSchedule()
|
|
|
stopped = true
|
|
stopped = true
|
|
|
- if cancel, ok := p.tr.(canceler); ok {
|
|
|
|
|
- cancel.CancelRequest(req)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ cancel()
|
|
|
}
|
|
}
|
|
|
}()
|
|
}()
|
|
|
|
|
|