Update etcd client to 3.3.9
This commit is contained in:
2
vendor/github.com/coreos/etcd/rafthttp/BUILD
generated
vendored
2
vendor/github.com/coreos/etcd/rafthttp/BUILD
generated
vendored
@@ -39,7 +39,7 @@ go_library(
|
||||
"//vendor/github.com/coreos/pkg/capnslog:go_default_library",
|
||||
"//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
|
||||
"//vendor/github.com/xiang90/probing:go_default_library",
|
||||
"//vendor/golang.org/x/net/context:go_default_library",
|
||||
"//vendor/golang.org/x/time/rate:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
14
vendor/github.com/coreos/etcd/rafthttp/http.go
generated
vendored
14
vendor/github.com/coreos/etcd/rafthttp/http.go
generated
vendored
@@ -15,6 +15,7 @@
|
||||
package rafthttp
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
@@ -27,7 +28,6 @@ import (
|
||||
"github.com/coreos/etcd/raft/raftpb"
|
||||
"github.com/coreos/etcd/snap"
|
||||
"github.com/coreos/etcd/version"
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -91,11 +91,7 @@ func (h *pipelineHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if from, err := types.IDFromString(r.Header.Get("X-Server-From")); err != nil {
|
||||
if urls := r.Header.Get("X-PeerURLs"); urls != "" {
|
||||
h.tr.AddRemote(from, strings.Split(urls, ","))
|
||||
}
|
||||
}
|
||||
addRemoteFromRequest(h.tr, r)
|
||||
|
||||
// Limit the data size that could be read from the request body, which ensures that read from
|
||||
// connection will not time out accidentally due to possible blocking in underlying implementation.
|
||||
@@ -176,11 +172,7 @@ func (h *snapshotHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if from, err := types.IDFromString(r.Header.Get("X-Server-From")); err != nil {
|
||||
if urls := r.Header.Get("X-PeerURLs"); urls != "" {
|
||||
h.tr.AddRemote(from, strings.Split(urls, ","))
|
||||
}
|
||||
}
|
||||
addRemoteFromRequest(h.tr, r)
|
||||
|
||||
dec := &messageDecoder{r: r.Body}
|
||||
// let snapshots be very large since they can exceed 512MB for large installations
|
||||
|
||||
7
vendor/github.com/coreos/etcd/rafthttp/peer.go
generated
vendored
7
vendor/github.com/coreos/etcd/rafthttp/peer.go
generated
vendored
@@ -15,6 +15,7 @@
|
||||
package rafthttp
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@@ -23,7 +24,8 @@ import (
|
||||
"github.com/coreos/etcd/raft"
|
||||
"github.com/coreos/etcd/raft/raftpb"
|
||||
"github.com/coreos/etcd/snap"
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"golang.org/x/time/rate"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -188,6 +190,7 @@ func startPeer(transport *Transport, urls types.URLs, peerID types.ID, fs *stats
|
||||
status: status,
|
||||
recvc: p.recvc,
|
||||
propc: p.propc,
|
||||
rl: rate.NewLimiter(transport.DialRetryFrequency, 1),
|
||||
}
|
||||
p.msgAppReader = &streamReader{
|
||||
peerID: peerID,
|
||||
@@ -197,7 +200,9 @@ func startPeer(transport *Transport, urls types.URLs, peerID types.ID, fs *stats
|
||||
status: status,
|
||||
recvc: p.recvc,
|
||||
propc: p.propc,
|
||||
rl: rate.NewLimiter(transport.DialRetryFrequency, 1),
|
||||
}
|
||||
|
||||
p.msgAppV2Reader.start()
|
||||
p.msgAppReader.start()
|
||||
|
||||
|
||||
60
vendor/github.com/coreos/etcd/rafthttp/stream.go
generated
vendored
60
vendor/github.com/coreos/etcd/rafthttp/stream.go
generated
vendored
@@ -25,6 +25,8 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"golang.org/x/time/rate"
|
||||
|
||||
"github.com/coreos/etcd/etcdserver/stats"
|
||||
"github.com/coreos/etcd/pkg/httputil"
|
||||
"github.com/coreos/etcd/pkg/transport"
|
||||
@@ -53,6 +55,7 @@ var (
|
||||
"3.0.0": {streamTypeMsgAppV2, streamTypeMessage},
|
||||
"3.1.0": {streamTypeMsgAppV2, streamTypeMessage},
|
||||
"3.2.0": {streamTypeMsgAppV2, streamTypeMessage},
|
||||
"3.3.0": {streamTypeMsgAppV2, streamTypeMessage},
|
||||
}
|
||||
)
|
||||
|
||||
@@ -243,7 +246,9 @@ func (cw *streamWriter) closeUnlocked() bool {
|
||||
if !cw.working {
|
||||
return false
|
||||
}
|
||||
cw.closer.Close()
|
||||
if err := cw.closer.Close(); err != nil {
|
||||
plog.Errorf("peer %s (writer) connection close error: %v", cw.peerID, err)
|
||||
}
|
||||
if len(cw.msgc) > 0 {
|
||||
cw.r.ReportUnreachable(uint64(cw.peerID))
|
||||
}
|
||||
@@ -278,25 +283,28 @@ type streamReader struct {
|
||||
recvc chan<- raftpb.Message
|
||||
propc chan<- raftpb.Message
|
||||
|
||||
rl *rate.Limiter // alters the frequency of dial retrial attempts
|
||||
|
||||
errorc chan<- error
|
||||
|
||||
mu sync.Mutex
|
||||
paused bool
|
||||
cancel func()
|
||||
closer io.Closer
|
||||
|
||||
stopc chan struct{}
|
||||
done chan struct{}
|
||||
ctx context.Context
|
||||
cancel context.CancelFunc
|
||||
done chan struct{}
|
||||
}
|
||||
|
||||
func (r *streamReader) start() {
|
||||
r.stopc = make(chan struct{})
|
||||
r.done = make(chan struct{})
|
||||
if r.errorc == nil {
|
||||
r.errorc = r.tr.ErrorC
|
||||
func (cr *streamReader) start() {
|
||||
cr.done = make(chan struct{})
|
||||
if cr.errorc == nil {
|
||||
cr.errorc = cr.tr.ErrorC
|
||||
}
|
||||
|
||||
go r.run()
|
||||
if cr.ctx == nil {
|
||||
cr.ctx, cr.cancel = context.WithCancel(context.Background())
|
||||
}
|
||||
go cr.run()
|
||||
}
|
||||
|
||||
func (cr *streamReader) run() {
|
||||
@@ -311,7 +319,7 @@ func (cr *streamReader) run() {
|
||||
} else {
|
||||
cr.status.activate()
|
||||
plog.Infof("established a TCP streaming connection with peer %s (%s reader)", cr.peerID, cr.typ)
|
||||
err := cr.decodeLoop(rc, t)
|
||||
err = cr.decodeLoop(rc, t)
|
||||
plog.Warningf("lost the TCP streaming connection with peer %s (%s reader)", cr.peerID, cr.typ)
|
||||
switch {
|
||||
// all data is read out
|
||||
@@ -322,15 +330,16 @@ func (cr *streamReader) run() {
|
||||
cr.status.deactivate(failureType{source: t.String(), action: "read"}, err.Error())
|
||||
}
|
||||
}
|
||||
select {
|
||||
// Wait 100ms to create a new stream, so it doesn't bring too much
|
||||
// overhead when retry.
|
||||
case <-time.After(100 * time.Millisecond):
|
||||
case <-cr.stopc:
|
||||
// Wait for a while before new dial attempt
|
||||
err = cr.rl.Wait(cr.ctx)
|
||||
if cr.ctx.Err() != nil {
|
||||
plog.Infof("stopped streaming with peer %s (%s reader)", cr.peerID, t)
|
||||
close(cr.done)
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
plog.Errorf("streaming with peer %s (%s reader) rate limiter error: %v", cr.peerID, t, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,7 +355,7 @@ func (cr *streamReader) decodeLoop(rc io.ReadCloser, t streamType) error {
|
||||
plog.Panicf("unhandled stream type %s", t)
|
||||
}
|
||||
select {
|
||||
case <-cr.stopc:
|
||||
case <-cr.ctx.Done():
|
||||
cr.mu.Unlock()
|
||||
if err := rc.Close(); err != nil {
|
||||
return err
|
||||
@@ -401,11 +410,8 @@ func (cr *streamReader) decodeLoop(rc io.ReadCloser, t streamType) error {
|
||||
}
|
||||
|
||||
func (cr *streamReader) stop() {
|
||||
close(cr.stopc)
|
||||
cr.mu.Lock()
|
||||
if cr.cancel != nil {
|
||||
cr.cancel()
|
||||
}
|
||||
cr.cancel()
|
||||
cr.close()
|
||||
cr.mu.Unlock()
|
||||
<-cr.done
|
||||
@@ -429,13 +435,11 @@ func (cr *streamReader) dial(t streamType) (io.ReadCloser, error) {
|
||||
|
||||
setPeerURLsHeader(req, cr.tr.URLs)
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
req = req.WithContext(ctx)
|
||||
req = req.WithContext(cr.ctx)
|
||||
|
||||
cr.mu.Lock()
|
||||
cr.cancel = cancel
|
||||
select {
|
||||
case <-cr.stopc:
|
||||
case <-cr.ctx.Done():
|
||||
cr.mu.Unlock()
|
||||
return nil, fmt.Errorf("stream reader is stopped")
|
||||
default:
|
||||
@@ -497,7 +501,9 @@ func (cr *streamReader) dial(t streamType) (io.ReadCloser, error) {
|
||||
|
||||
func (cr *streamReader) close() {
|
||||
if cr.closer != nil {
|
||||
cr.closer.Close()
|
||||
if err := cr.closer.Close(); err != nil {
|
||||
plog.Errorf("peer %s (reader) connection close error: %v", cr.peerID, err)
|
||||
}
|
||||
}
|
||||
cr.closer = nil
|
||||
}
|
||||
|
||||
19
vendor/github.com/coreos/etcd/rafthttp/transport.go
generated
vendored
19
vendor/github.com/coreos/etcd/rafthttp/transport.go
generated
vendored
@@ -15,6 +15,7 @@
|
||||
package rafthttp
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
@@ -26,9 +27,10 @@ import (
|
||||
"github.com/coreos/etcd/raft"
|
||||
"github.com/coreos/etcd/raft/raftpb"
|
||||
"github.com/coreos/etcd/snap"
|
||||
|
||||
"github.com/coreos/pkg/capnslog"
|
||||
"github.com/xiang90/probing"
|
||||
"golang.org/x/net/context"
|
||||
"golang.org/x/time/rate"
|
||||
)
|
||||
|
||||
var plog = logutil.NewMergeLogger(capnslog.NewPackageLogger("github.com/coreos/etcd", "rafthttp"))
|
||||
@@ -96,8 +98,12 @@ type Transporter interface {
|
||||
// User needs to call Start before calling other functions, and call
|
||||
// Stop when the Transport is no longer used.
|
||||
type Transport struct {
|
||||
DialTimeout time.Duration // maximum duration before timing out dial of the request
|
||||
TLSInfo transport.TLSInfo // TLS information used when creating connection
|
||||
DialTimeout time.Duration // maximum duration before timing out dial of the request
|
||||
// DialRetryFrequency defines the frequency of streamReader dial retrial attempts;
|
||||
// a distinct rate limiter is created per every peer (default value: 10 events/sec)
|
||||
DialRetryFrequency rate.Limit
|
||||
|
||||
TLSInfo transport.TLSInfo // TLS information used when creating connection
|
||||
|
||||
ID types.ID // local member ID
|
||||
URLs types.URLs // local peer URLs
|
||||
@@ -137,6 +143,13 @@ func (t *Transport) Start() error {
|
||||
t.remotes = make(map[types.ID]*remote)
|
||||
t.peers = make(map[types.ID]Peer)
|
||||
t.prober = probing.NewProber(t.pipelineRt)
|
||||
|
||||
// If client didn't provide dial retry frequency, use the default
|
||||
// (100ms backoff between attempts to create a new stream),
|
||||
// so it doesn't bring too much overhead when retry.
|
||||
if t.DialRetryFrequency == 0 {
|
||||
t.DialRetryFrequency = rate.Every(100 * time.Millisecond)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
9
vendor/github.com/coreos/etcd/rafthttp/util.go
generated
vendored
9
vendor/github.com/coreos/etcd/rafthttp/util.go
generated
vendored
@@ -175,3 +175,12 @@ func setPeerURLsHeader(req *http.Request, urls types.URLs) {
|
||||
}
|
||||
req.Header.Set("X-PeerURLs", strings.Join(peerURLs, ","))
|
||||
}
|
||||
|
||||
// addRemoteFromRequest adds a remote peer according to an http request header
|
||||
func addRemoteFromRequest(tr Transporter, r *http.Request) {
|
||||
if from, err := types.IDFromString(r.Header.Get("X-Server-From")); err == nil {
|
||||
if urls := r.Header.Get("X-PeerURLs"); urls != "" {
|
||||
tr.AddRemote(from, strings.Split(urls, ","))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user