From f2319f11344ea738911f722f25ff6c268d4241da Mon Sep 17 00:00:00 2001 From: chrislu Date: Fri, 14 Nov 2025 07:56:23 -0800 Subject: [PATCH] debug logs --- weed/s3api/filer_multipart.go | 11 ++++++++--- weed/s3api/s3api_object_handlers_multipart.go | 8 ++++++++ weed/s3api/s3api_object_handlers_put.go | 15 ++++++++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/weed/s3api/filer_multipart.go b/weed/s3api/filer_multipart.go index c4c07f0c7..22a061852 100644 --- a/weed/s3api/filer_multipart.go +++ b/weed/s3api/filer_multipart.go @@ -664,18 +664,23 @@ func (s3a *S3ApiServer) listObjectParts(input *s3.ListPartsInput) (output *ListP glog.Errorf("listObjectParts %s %s parse %s: %v", *input.Bucket, *input.UploadId, entry.Name, err) continue } - output.Part = append(output.Part, &s3.Part{ + partETag := filer.ETag(entry) + part := &s3.Part{ PartNumber: aws.Int64(int64(partNumber)), LastModified: aws.Time(time.Unix(entry.Attributes.Mtime, 0).UTC()), Size: aws.Int64(int64(filer.FileSize(entry))), - ETag: aws.String("\"" + filer.ETag(entry) + "\""), - }) + ETag: aws.String("\"" + partETag + "\""), + } + output.Part = append(output.Part, part) + glog.V(3).Infof("listObjectParts: Added part %d, size=%d, etag=%s", + partNumber, filer.FileSize(entry), partETag) if !isLast { output.NextPartNumberMarker = aws.Int64(int64(partNumber)) } } } + glog.V(2).Infof("listObjectParts: Returning %d parts for uploadId=%s", len(output.Part), *input.UploadId) return } diff --git a/weed/s3api/s3api_object_handlers_multipart.go b/weed/s3api/s3api_object_handlers_multipart.go index ab03c0591..e91999ace 100644 --- a/weed/s3api/s3api_object_handlers_multipart.go +++ b/weed/s3api/s3api_object_handlers_multipart.go @@ -401,12 +401,20 @@ func (s3a *S3ApiServer) PutObjectPartHandler(w http.ResponseWriter, r *http.Requ } destination := fmt.Sprintf("%s/%s%s", s3a.option.BucketsPath, bucket, object) + glog.V(2).Infof("PutObjectPart: bucket=%s, object=%s, uploadId=%s, partNumber=%d, size=%d", + bucket, object, uploadID, partID, r.ContentLength) + etag, errCode, sseType := s3a.putToFiler(r, uploadUrl, dataReader, destination, bucket, partID) if errCode != s3err.ErrNone { + glog.Errorf("PutObjectPart: putToFiler failed with error code %v for bucket=%s, object=%s, partNumber=%d", + errCode, bucket, object, partID) s3err.WriteErrorResponse(w, r, errCode) return } + glog.V(2).Infof("PutObjectPart: SUCCESS - bucket=%s, object=%s, partNumber=%d, etag=%s, sseType=%s", + bucket, object, partID, etag, sseType) + setEtag(w, etag) // Set SSE response headers for multipart uploads diff --git a/weed/s3api/s3api_object_handlers_put.go b/weed/s3api/s3api_object_handlers_put.go index 98263ea30..fe54a87a2 100644 --- a/weed/s3api/s3api_object_handlers_put.go +++ b/weed/s3api/s3api_object_handlers_put.go @@ -327,7 +327,11 @@ func (s3a *S3ApiServer) putToFiler(r *http.Request, uploadUrl string, dataReader } // Calculate ETag for S3 API response (hex format) - etag = fmt.Sprintf("%x", hash.Sum(nil)) + md5Sum := hash.Sum(nil) + etag = fmt.Sprintf("%x", md5Sum) + + glog.V(3).Infof("putToFiler: Uploading to volume - path=%s, size=%d, etag(hex)=%s, partNumber=%d", + filePath, len(data), etag, partNumber) uploadOption := &operation.UploadOption{ UploadUrl: volumeUploadUrl, @@ -353,6 +357,9 @@ func (s3a *S3ApiServer) putToFiler(r *http.Request, uploadUrl string, dataReader return "", s3err.ErrInternalError, "" } + glog.V(3).Infof("putToFiler: Volume upload SUCCESS - fileId=%s, size=%d, md5(base64)=%s", + assignResult.FileId, uploadResult.Size, uploadResult.ContentMd5) + // Step 3: Create metadata entry now := time.Now() mimeType := r.Header.Get("Content-Type") @@ -378,6 +385,9 @@ func (s3a *S3ApiServer) putToFiler(r *http.Request, uploadUrl string, dataReader CipherKey: uploadResult.CipherKey, } + glog.V(3).Infof("putToFiler: Created FileChunk - fileId=%s, size=%d, etag(base64)=%s (for multipart ETag calc)", + fileChunk.FileId, fileChunk.Size, fileChunk.ETag) + // Decode MD5 from base64 to bytes for entry.Attributes.Md5 md5Bytes, md5Err := base64.StdEncoding.DecodeString(uploadResult.ContentMd5) if md5Err != nil { @@ -464,6 +474,9 @@ func (s3a *S3ApiServer) putToFiler(r *http.Request, uploadUrl string, dataReader return "", filerErrorToS3Error(createErr.Error()), "" } + glog.V(2).Infof("putToFiler: Metadata saved SUCCESS - path=%s, etag(hex)=%s, size=%d, partNumber=%d", + filePath, etag, entry.Attributes.FileSize, partNumber) + BucketTrafficReceived(int64(uploadResult.Size), r) // Return the SSE type determined by the unified handler