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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if from, err := types.IDFromString(r.Header.Get("X-Server-From")); err == nil {
|
addRemoteFromRequest(h.tr, r)
|
||||||
if urls := r.Header.Get("X-PeerURLs"); urls != "" {
|
|
||||||
h.tr.AddRemote(from, strings.Split(urls, ","))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Limit the data size that could be read from the request body, which ensures that read from
|
// 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.
|
// 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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if from, err := types.IDFromString(r.Header.Get("X-Server-From")); err == nil {
|
addRemoteFromRequest(h.tr, r)
|
||||||
if urls := r.Header.Get("X-PeerURLs"); urls != "" {
|
|
||||||
h.tr.AddRemote(from, strings.Split(urls, ","))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dec := &messageDecoder{r: r.Body}
|
dec := &messageDecoder{r: r.Body}
|
||||||
// let snapshots be very large since they can exceed 512MB for large installations
|
// 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, ","))
|
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