mirror of
https://github.com/minio/minio.git
synced 2025-11-08 21:24:55 -05:00
Reroute requests based token heal/listing (#9939)
When manual healing is triggered, one node in a cluster will become the authority to heal. mc regularly sends new requests to fetch the status of the ongoing healing process, but a load balancer could land the healing request to a node that is not doing the healing request. This PR will redirect a request to the node based on the node index found described as part of the client token. A similar technique is also used to proxy ListObjectsV2 requests by encoding this information in continuation-token
This commit is contained in:
@@ -652,6 +652,20 @@ func (a adminAPIHandlers) HealHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if globalIsDistErasure {
|
||||
// Analyze the heal token and route the request accordingly
|
||||
_, nodeIndex, parsed := parseRequestToken(hip.clientToken)
|
||||
if parsed {
|
||||
if proxyRequestByNodeIndex(ctx, w, r, nodeIndex) {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
apiErr := errorCodes.ToAPIErr(ErrHealInvalidClientToken)
|
||||
writeErrorResponseJSON(ctx, w, apiErr, r.URL)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
type healResp struct {
|
||||
respBytes []byte
|
||||
apiErr APIError
|
||||
|
||||
Reference in New Issue
Block a user