mirror of
https://github.com/minio/minio.git
synced 2025-11-10 14:09:48 -05:00
Add forceStop flag to provide facility to stop healing (#6718)
This PR also makes sure that we deal with HTTP request count by ignoring the on-going heal operation, i.e do not wait on itself.
This commit is contained in:
committed by
kannappanr
parent
bef0318c36
commit
a9cda850ca
@@ -208,7 +208,7 @@ Fetches information for all cluster nodes, such as server properties, storage in
|
||||
## 6. Heal operations
|
||||
|
||||
<a name="Heal"></a>
|
||||
### Heal(bucket, prefix string, healOpts HealOpts, clientToken string, forceStart bool) (start HealStartSuccess, status HealTaskStatus, err error)
|
||||
### Heal(bucket, prefix string, healOpts HealOpts, clientToken string, forceStart bool, forceStop bool) (start HealStartSuccess, status HealTaskStatus, err error)
|
||||
|
||||
Start a heal sequence that scans data under given (possible empty)
|
||||
`bucket` and `prefix`. The `recursive` bool turns on recursive
|
||||
@@ -232,7 +232,8 @@ __Example__
|
||||
DryRun: false,
|
||||
}
|
||||
forceStart := false
|
||||
healPath, err := madmClnt.Heal("", "", opts, "", forceStart)
|
||||
forceStop := false
|
||||
healPath, err := madmClnt.Heal("", "", opts, "", forceStart, forceStop)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
|
||||
@@ -40,6 +40,10 @@ type HealStartSuccess struct {
|
||||
StartTime time.Time `json:"startTime"`
|
||||
}
|
||||
|
||||
// HealStopSuccess - holds information about a successfully stopped
|
||||
// heal operation.
|
||||
type HealStopSuccess HealStartSuccess
|
||||
|
||||
// HealTaskStatus - status struct for a heal task
|
||||
type HealTaskStatus struct {
|
||||
Summary string `json:"summary"`
|
||||
@@ -176,10 +180,17 @@ func (hri *HealResultItem) GetOnlineCounts() (b, a int) {
|
||||
}
|
||||
|
||||
// Heal - API endpoint to start heal and to fetch status
|
||||
// forceStart and forceStop are mutually exclusive, you can either
|
||||
// set one of them to 'true'. If both are set 'forceStart' will be
|
||||
// honored.
|
||||
func (adm *AdminClient) Heal(bucket, prefix string, healOpts HealOpts,
|
||||
clientToken string, forceStart bool) (
|
||||
clientToken string, forceStart, forceStop bool) (
|
||||
healStart HealStartSuccess, healTaskStatus HealTaskStatus, err error) {
|
||||
|
||||
if forceStart && forceStop {
|
||||
return healStart, healTaskStatus, ErrInvalidArgument("forceStart and forceStop set to true is not allowed")
|
||||
}
|
||||
|
||||
body, err := json.Marshal(healOpts)
|
||||
if err != nil {
|
||||
return healStart, healTaskStatus, err
|
||||
@@ -196,8 +207,12 @@ func (adm *AdminClient) Heal(bucket, prefix string, healOpts HealOpts,
|
||||
queryVals.Set("clientToken", clientToken)
|
||||
body = []byte{}
|
||||
}
|
||||
|
||||
// Anyone can be set, either force start or forceStop.
|
||||
if forceStart {
|
||||
queryVals.Set("forceStart", "true")
|
||||
} else if forceStop {
|
||||
queryVals.Set("forceStop", "true")
|
||||
}
|
||||
|
||||
resp, err := adm.executeMethod("POST", requestData{
|
||||
@@ -221,9 +236,24 @@ func (adm *AdminClient) Heal(bucket, prefix string, healOpts HealOpts,
|
||||
|
||||
// Was it a status request?
|
||||
if clientToken == "" {
|
||||
// As a special operation forceStop would return a
|
||||
// similar struct as healStart will have the
|
||||
// heal sequence information about the heal which
|
||||
// was stopped.
|
||||
err = json.Unmarshal(respBytes, &healStart)
|
||||
} else {
|
||||
err = json.Unmarshal(respBytes, &healTaskStatus)
|
||||
}
|
||||
return healStart, healTaskStatus, err
|
||||
if err != nil {
|
||||
// May be the server responded with error after success
|
||||
// message, handle it separately here.
|
||||
var errResp ErrorResponse
|
||||
err = json.Unmarshal(respBytes, &errResp)
|
||||
if err != nil {
|
||||
// Unknown structure return error anyways.
|
||||
return healStart, healTaskStatus, err
|
||||
}
|
||||
return healStart, healTaskStatus, errResp
|
||||
}
|
||||
return healStart, healTaskStatus, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user