diff --git a/cmd/bucket-targets.go b/cmd/bucket-targets.go index 0b3f07a8e..ca901f8e4 100644 --- a/cmd/bucket-targets.go +++ b/cmd/bucket-targets.go @@ -19,6 +19,7 @@ package cmd import ( "context" + "errors" "fmt" "net/url" "sync" @@ -351,6 +352,27 @@ func (sys *BucketTargetSys) SetTarget(ctx context.Context, bucket string, tgt *m return BucketRemoteTargetNotVersioned{Bucket: tgt.TargetBucket} } } + + // Check if target is a MinIO server and alive + hcCtx, cancel := context.WithTimeout(ctx, 3*time.Second) + scheme := "http" + if tgt.Secure { + scheme = "https" + } + result := <-sys.hcClient.Alive(hcCtx, madmin.AliveOpts{}, madmin.ServerProperties{ + Endpoint: tgt.Endpoint, + Scheme: scheme, + }) + + cancel() + if result.Error != nil { + return RemoteTargetConnectionErr{Bucket: tgt.TargetBucket, Err: result.Error, AccessKey: tgt.Credentials.AccessKey} + } + if !result.Online { + err := errors.New("Health check timed out after 3 seconds") + return RemoteTargetConnectionErr{Err: err} + } + sys.Lock() defer sys.Unlock()