From ac90a873eb2487b0309fb263aa1b1bd45208c1d3 Mon Sep 17 00:00:00 2001 From: Taran Pelkey Date: Thu, 11 Jan 2024 22:56:16 +0000 Subject: [PATCH] Verify that remote target bucket is on MinIO server for bucket replication (#18656) --- cmd/bucket-targets.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) 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()