From 19efbad33625f9c3ea7f70250d4afbc9c4971417 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Mon, 24 Feb 2025 15:21:34 +0530 Subject: [PATCH] [server] Add retry for sizeOf fetch --- server/pkg/controller/file.go | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/server/pkg/controller/file.go b/server/pkg/controller/file.go index be9a553756..6597ed3027 100644 --- a/server/pkg/controller/file.go +++ b/server/pkg/controller/file.go @@ -10,6 +10,7 @@ import ( "strconv" "strings" "sync" + gTime "time" "github.com/ente-io/museum/pkg/controller/discord" "github.com/ente-io/museum/pkg/utils/network" @@ -806,14 +807,23 @@ func (c *FileController) getPreSignedURLForDC(objectKey string, dc string) (stri func (c *FileController) sizeOf(objectKey string) (int64, error) { s3Client := c.S3Config.GetHotS3Client() - head, err := s3Client.HeadObject(&s3.HeadObjectInput{ - Key: &objectKey, - Bucket: c.S3Config.GetHotBucket(), - }) - if err != nil { - return -1, stacktrace.Propagate(err, "") + bucket := c.S3Config.GetHotBucket() + var head *s3.HeadObjectOutput + var err error + // Retry twice with a delay of 500ms and 1000ms + for i := 0; i < 3; i++ { + head, err = s3Client.HeadObject(&s3.HeadObjectInput{ + Key: &objectKey, + Bucket: bucket, + }) + if err == nil { + return *head.ContentLength, nil + } + if i < 2 { + gTime.Sleep(gTime.Duration(500*(i+1)) * gTime.Millisecond) + } } - return *head.ContentLength, nil + return -1, stacktrace.Propagate(err, "") } func (c *FileController) onDuplicateObjectDetected(ctx *gin.Context, file ente.File, existing ente.File, hotDC string) (ente.File, error) {