Add dry-run query param for HealFormat API (#3618)

master
Krishnan Parthasarathi 8 years ago committed by Harshavardhana
parent fc880f9b23
commit 0e693e0284
  1. 24
      cmd/admin-handlers.go
  2. 11
      pkg/madmin/API.md
  3. 12
      pkg/madmin/examples/heal-format.go
  4. 9
      pkg/madmin/heal-commands.go

@ -398,7 +398,7 @@ func (adminAPI adminAPIHandlers) ListBucketsHealHandler(w http.ResponseWriter, r
writeSuccessResponseXML(w, encodeResponse(listResponse)) writeSuccessResponseXML(w, encodeResponse(listResponse))
} }
// HealBucketHandler - POST /?heal&bucket=mybucket // HealBucketHandler - POST /?heal&bucket=mybucket&dry-run
// - x-minio-operation = bucket // - x-minio-operation = bucket
// - bucket is mandatory query parameter // - bucket is mandatory query parameter
// Heal a given bucket, if present. // Heal a given bucket, if present.
@ -425,7 +425,7 @@ func (adminAPI adminAPIHandlers) HealBucketHandler(w http.ResponseWriter, r *htt
return return
} }
// if dry-run=yes, then only perform validations and return success. // if dry-run is present in query-params, then only perform validations and return success.
if isDryRun(vars) { if isDryRun(vars) {
writeSuccessResponseHeadersOnly(w) writeSuccessResponseHeadersOnly(w)
return return
@ -442,15 +442,16 @@ func (adminAPI adminAPIHandlers) HealBucketHandler(w http.ResponseWriter, r *htt
writeSuccessResponseHeadersOnly(w) writeSuccessResponseHeadersOnly(w)
} }
// isDryRun - returns true if dry-run query param was set to yes and false otherwise. // isDryRun - returns true if dry-run query param was set and false otherwise.
// otherwise.
func isDryRun(qval url.Values) bool { func isDryRun(qval url.Values) bool {
if dryRun := qval.Get(string(mgmtDryRun)); dryRun == "yes" { if _, dryRun := qval[string(mgmtDryRun)]; dryRun {
return true return true
} }
return false return false
} }
// HealObjectHandler - POST /?heal&bucket=mybucket&object=myobject // HealObjectHandler - POST /?heal&bucket=mybucket&object=myobject&dry-run
// - x-minio-operation = object // - x-minio-operation = object
// - bucket and object are both mandatory query parameters // - bucket and object are both mandatory query parameters
// Heal a given object, if present. // Heal a given object, if present.
@ -485,7 +486,8 @@ func (adminAPI adminAPIHandlers) HealObjectHandler(w http.ResponseWriter, r *htt
return return
} }
// if dry-run=yes, then only perform validations and return success. // if dry-run is set in query params then perform validations
// and return success.
if isDryRun(vars) { if isDryRun(vars) {
writeSuccessResponseHeadersOnly(w) writeSuccessResponseHeadersOnly(w)
return return
@ -501,7 +503,7 @@ func (adminAPI adminAPIHandlers) HealObjectHandler(w http.ResponseWriter, r *htt
writeSuccessResponseHeadersOnly(w) writeSuccessResponseHeadersOnly(w)
} }
// HealFormatHandler - POST /?heal // HealFormatHandler - POST /?heal&dry-run
// - x-minio-operation = format // - x-minio-operation = format
// - bucket and object are both mandatory query parameters // - bucket and object are both mandatory query parameters
// Heal a given object, if present. // Heal a given object, if present.
@ -528,6 +530,14 @@ func (adminAPI adminAPIHandlers) HealFormatHandler(w http.ResponseWriter, r *htt
return return
} }
// if dry-run is set in query-params, return success as
// validations are successful so far.
vars := r.URL.Query()
if isDryRun(vars) {
writeSuccessResponseHeadersOnly(w)
return
}
// Create a new set of storage instances to heal format.json. // Create a new set of storage instances to heal format.json.
bootstrapDisks, err := initStorageDisks(globalEndpoints) bootstrapDisks, err := initStorageDisks(globalEndpoints)
if err != nil { if err != nil {

@ -251,13 +251,20 @@ __Example__
``` ```
<a name="HealFormat"></a> <a name="HealFormat"></a>
### HealFormat() error ### HealFormat(isDryRun bool) error
Heal storage format on available disks. This is used when disks were replaced or were found with missing format. This is supported only for erasure-coded backend. Heal storage format on available disks. This is used when disks were replaced or were found with missing format. This is supported only for erasure-coded backend.
__Example__ __Example__
``` go ``` go
err := madmClnt.HealFormat() isDryRun := true
err := madmClnt.HealFormat(isDryRun)
if err != nil {
log.Fatalln(err)
}
isDryRun = false
err = madmClnt.HealFormat(isDryRun)
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
} }

@ -39,8 +39,16 @@ func main() {
log.Fatalln(err) log.Fatalln(err)
} }
// Heal storage format on available disks. // Attempt healing format in dry-run mode.
err = madmClnt.HealFormat() isDryRun := true
err = madmClnt.HealFormat(isDryRun)
if err != nil {
log.Fatalln(err)
}
// Perform actual healing of format.
isDryRun = false
err = madmClnt.HealFormat(isDryRun)
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
} }

@ -344,7 +344,7 @@ func (adm *AdminClient) HealBucket(bucket string, dryrun bool) error {
queryVal.Set("heal", "") queryVal.Set("heal", "")
queryVal.Set(string(healBucket), bucket) queryVal.Set(string(healBucket), bucket)
if dryrun { if dryrun {
queryVal.Set(string(healDryRun), "yes") queryVal.Set(string(healDryRun), "")
} }
hdrs := make(http.Header) hdrs := make(http.Header)
@ -378,7 +378,7 @@ func (adm *AdminClient) HealObject(bucket, object string, dryrun bool) error {
queryVal.Set(string(healBucket), bucket) queryVal.Set(string(healBucket), bucket)
queryVal.Set(string(healObject), object) queryVal.Set(string(healObject), object)
if dryrun { if dryrun {
queryVal.Set(string(healDryRun), "yes") queryVal.Set(string(healDryRun), "")
} }
hdrs := make(http.Header) hdrs := make(http.Header)
@ -405,9 +405,12 @@ func (adm *AdminClient) HealObject(bucket, object string, dryrun bool) error {
} }
// HealFormat - heal storage format on available disks. // HealFormat - heal storage format on available disks.
func (adm *AdminClient) HealFormat() error { func (adm *AdminClient) HealFormat(dryrun bool) error {
queryVal := url.Values{} queryVal := url.Values{}
queryVal.Set("heal", "") queryVal.Set("heal", "")
if dryrun {
queryVal.Set(string(healDryRun), "")
}
// Set x-minio-operation to format. // Set x-minio-operation to format.
hdrs := make(http.Header) hdrs := make(http.Header)

Loading…
Cancel
Save