rafthttp: add remote in pipeline and snapshot handler when corresponding peer or remote do not exist
Fixes: #8506release-3.3
parent
a0361ea3f9
commit
2bb893b478
|
@ -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
|
||||
|
|
|
@ -175,3 +175,14 @@ func setPeerURLsHeader(req *http.Request, urls types.URLs) {
|
|||
}
|
||||
req.Header.Set("X-PeerURLs", strings.Join(peerURLs, ","))
|
||||
}
|
||||
|
||||
// addRemoteFromRequest add remote according to request header
|
||||
func addRemoteFromRequest(tr Transporter, r *http.Request) bool {
|
||||
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, ","))
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue