The heal APIs supported in this change are, - listing of objects to be healed. - healing a bucket. - healing an object.
6.3 KiB
Golang Admin Client API Reference ![Slack](https://slack.minio.io/slack?type=svg)
Initialize Minio Admin Client object.
Minio
package main
import (
"fmt"
"github.com/minio/minio/pkg/madmin"
)
func main() {
// Use a secure connection.
ssl := true
// Initialize minio client object.
mdmClnt, err := madmin.New("your-minio.example.com:9000", "YOUR-ACCESSKEYID", "YOUR-SECRETKEY", ssl)
if err != nil {
fmt.Println(err)
return
}
// Fetch service status.
st, err := mdmClnt.ServiceStatus()
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%#v\n", st)
}
Service operations | LockInfo operations | Healing operations |
---|---|---|
ServiceStatus |
||
ServiceRestart |
1. Constructor
New(endpoint string, accessKeyID string, secretAccessKey string, ssl bool) (*AdminClient, error)
Initializes a new admin client object.
Parameters
Param | Type | Description |
---|---|---|
endpoint |
string | Minio endpoint. |
accessKeyID |
string | Access key for the object storage endpoint. |
secretAccessKey |
string | Secret key for the object storage endpoint. |
ssl |
bool | Set this value to 'true' to enable secure (HTTPS) access. |
2. Service operations
ServiceStatus() (ServiceStatusMetadata, error)
Fetch service status, replies disk space used, backend type and total disks offline/online (applicable in distributed mode).
Param | Type | Description |
---|---|---|
serviceStatus |
ServiceStatusMetadata | Represents current server status info in following format: |
Param | Type | Description |
---|---|---|
st.Total |
int64 | Total disk space. |
st.Free |
int64 | Free disk space. |
st.Backend |
struct{} | Represents backend type embedded structure. |
Param | Type | Description |
---|---|---|
backend.Type |
BackendType | Type of backend used by the server currently only FS or XL. |
backend.OnlineDisks |
int | Total number of disks online (only applies to XL backend), is empty for FS. |
backend.OfflineDisks |
int | Total number of disks offline (only applies to XL backend), is empty for FS. |
backend.ReadQuorum |
int | Current total read quorum threshold before reads will be unavailable, is empty for FS. |
backend.WriteQuorum |
int | Current total write quorum threshold before writes will be unavailable, is empty for FS. |
Example
st, err := madmClnt.ServiceStatus()
if err != nil {
log.Fatalln(err)
}
log.Printf("%#v\n", st)
ServiceRestart() (error)
If successful restarts the running minio service, for distributed setup restarts all remote minio servers.
Example
st, err := madmClnt.ServiceRestart()
if err != nil {
log.Fatalln(err)
}
log.Printf("Success")
ListLocks(bucket, prefix string, olderThan time.Duration) ([]VolumeLockInfo, error)
If successful returns information on the list of locks held on bucket
matching prefix
older than olderThan
seconds.
Example
volLocks, err := madmClnt.ListLocks("mybucket", "myprefix", 30 * time.Second)
if err != nil {
log.Fatalln(err)
}
log.Println("List of locks: ", volLocks)
ClearLocks(bucket, prefix string, olderThan time.Duration) ([]VolumeLockInfo, error)
If successful returns information on the list of locks cleared on bucket
matching prefix
older than olderThan
seconds.
Example
volLocks, err := madmClnt.ClearLocks("mybucket", "myprefix", 30 * time.Second)
if err != nil {
log.Fatalln(err)
}
log.Println("List of locks cleared: ", volLocks)
ListObjectsHeal(bucket, prefix string, recursive bool, doneCh <-chan struct{}) (<-chan ObjectInfo, error)
If successful returns information on the list of objects that need healing in bucket
matching prefix
.
Example
// Create a done channel to control 'ListObjectsHeal' go routine.
doneCh := make(chan struct{})
// Indicate to our routine to exit cleanly upon return.
defer close(doneCh)
// Set true if recursive listing is needed.
isRecursive := true
// List objects that need healing for a given bucket and
// prefix.
healObjectCh, err := madmClnt.ListObjectsHeal("mybucket", "myprefix", isRecursive, doneCh)
if err != nil {
fmt.Println(err)
return
}
for object := range healObjectsCh {
if object.Err != nil {
log.Fatalln(err)
return
}
if object.HealInfo != nil {
switch healInfo := *object.HealInfo; healInfo.Status {
case madmin.CanHeal:
fmt.Println(object.Key, " can be healed.")
case madmin.QuorumUnavailable:
fmt.Println(object.Key, " can't be healed until quorum is available.")
case madmin.Corrupted:
fmt.Println(object.Key, " can't be healed, not enough information.")
}
}
fmt.Println("object: ", object)
}
HealBucket(bucket string, isDryRun bool) error
If bucket is successfully healed returns nil, otherwise returns error indicating the reason for failure. If isDryRun is true, then the bucket is not healed, but heal bucket request is validated by the server. e.g, if the bucket exists, if bucket name is valid etc.
Example
isDryRun := false
err := madmClnt.HealBucket("mybucket", isDryRun)
if err != nil {
log.Fatalln(err)
}
log.Println("successfully healed mybucket")
HealObject(bucket, object string, isDryRun bool) error
If object is successfully healed returns nil, otherwise returns error indicating the reason for failure. If isDryRun is true, then the object is not healed, but heal object request is validated by the server. e.g, if the object exists, if object name is valid etc.
Example
isDryRun := false
err := madmClnt.HealObject("mybucket", "myobject", isDryRun)
if err != nil {
log.Fatalln(err)
}
log.Println("successfully healed mybucket/myobject")