diff --git a/api/handler/acl.go b/api/handler/acl.go index cd744e08..ff8324af 100644 --- a/api/handler/acl.go +++ b/api/handler/acl.go @@ -11,6 +11,7 @@ import ( "net/http" "strings" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" @@ -47,7 +48,9 @@ const ( ) func (h *handler) GetBucketACLHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetBucketACL") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -127,7 +130,9 @@ func getTokenIssuerKey(box *accessbox.Box) (*keys.PublicKey, error) { } func (h *handler) PutBucketACLHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutBucketACL") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -194,7 +199,9 @@ func (h *handler) putBucketACLAPEHandler(w http.ResponseWriter, r *http.Request, } func (h *handler) GetObjectACLHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetObjectACL") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -216,7 +223,9 @@ func (h *handler) GetObjectACLHandler(w http.ResponseWriter, r *http.Request) { } func (h *handler) PutObjectACLHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutObjectACL") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) if _, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName); err != nil { @@ -228,7 +237,9 @@ func (h *handler) PutObjectACLHandler(w http.ResponseWriter, r *http.Request) { } func (h *handler) GetBucketPolicyStatusHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetBucketPolicyStatus") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -271,7 +282,9 @@ func (h *handler) GetBucketPolicyStatusHandler(w http.ResponseWriter, r *http.Re } func (h *handler) GetBucketPolicyHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetBucketPolicy") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -298,7 +311,9 @@ func (h *handler) GetBucketPolicyHandler(w http.ResponseWriter, r *http.Request) } func (h *handler) DeleteBucketPolicyHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteBucketPolicy") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -328,7 +343,9 @@ func checkOwner(info *data.BucketInfo, owner string) error { } func (h *handler) PutBucketPolicyHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutBucketPolicy") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) diff --git a/api/handler/attributes.go b/api/handler/attributes.go index 4e4a9132..ea83a394 100644 --- a/api/handler/attributes.go +++ b/api/handler/attributes.go @@ -8,6 +8,7 @@ import ( "strconv" "strings" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" @@ -70,7 +71,9 @@ var validAttributes = map[string]struct{}{ } func (h *handler) GetObjectAttributesHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetObjectAttributes") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) params, err := parseGetObjectAttributeArgs(r, h.reqLogger(ctx)) diff --git a/api/handler/bucket_list.go b/api/handler/bucket_list.go index e060b676..efe3b469 100644 --- a/api/handler/bucket_list.go +++ b/api/handler/bucket_list.go @@ -5,6 +5,7 @@ import ( "strconv" "time" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" @@ -14,7 +15,9 @@ const maxBucketList = 10000 // ListBucketsHandler handles bucket listing requests. func (h *handler) ListBucketsHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.ListBuckets") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) params, err := parseListBucketParams(r) diff --git a/api/handler/copy.go b/api/handler/copy.go index 30f13704..7b2f2c59 100644 --- a/api/handler/copy.go +++ b/api/handler/copy.go @@ -6,6 +6,7 @@ import ( "regexp" "time" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/auth" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" @@ -40,18 +41,19 @@ func path2BucketObject(path string) (string, string, error) { } func (h *handler) CopyObjectHandler(w http.ResponseWriter, r *http.Request) { + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.CopyObject") + defer span.End() + var ( err error versionID string metadata map[string]string tagSet map[string]string - - ctx = r.Context() - reqInfo = middleware.GetReqInfo(ctx) - - cannedACLStatus = aclHeadersStatus(r) ) + reqInfo := middleware.GetReqInfo(ctx) + cannedACLStatus := aclHeadersStatus(r) + src := r.Header.Get(api.AmzCopySource) // Check https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectVersioning.html // Regardless of whether you have enabled versioning, each object in your bucket diff --git a/api/handler/cors.go b/api/handler/cors.go index 7ba36242..ef7a2b5f 100644 --- a/api/handler/cors.go +++ b/api/handler/cors.go @@ -5,6 +5,7 @@ import ( "strconv" "strings" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" @@ -20,7 +21,9 @@ const ( ) func (h *handler) GetBucketCorsHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetBucketCors") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -42,7 +45,9 @@ func (h *handler) GetBucketCorsHandler(w http.ResponseWriter, r *http.Request) { } func (h *handler) PutBucketCorsHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutBucketCors") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -76,7 +81,9 @@ func (h *handler) PutBucketCorsHandler(w http.ResponseWriter, r *http.Request) { } func (h *handler) DeleteBucketCorsHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteBucketCors") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -93,6 +100,9 @@ func (h *handler) DeleteBucketCorsHandler(w http.ResponseWriter, r *http.Request } func (h *handler) AppendCORSHeaders(w http.ResponseWriter, r *http.Request) { + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.AppendCORSHeaders") + defer span.End() + if r.Method == http.MethodOptions { return } @@ -101,7 +111,6 @@ func (h *handler) AppendCORSHeaders(w http.ResponseWriter, r *http.Request) { return } - ctx := r.Context() reqInfo := middleware.GetReqInfo(ctx) if reqInfo.BucketName == "" { return @@ -153,7 +162,9 @@ func (h *handler) AppendCORSHeaders(w http.ResponseWriter, r *http.Request) { } func (h *handler) Preflight(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.Preflight") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketInfo(ctx, reqInfo.BucketName) if err != nil { diff --git a/api/handler/delete.go b/api/handler/delete.go index a83242c8..5c08e9fc 100644 --- a/api/handler/delete.go +++ b/api/handler/delete.go @@ -7,6 +7,7 @@ import ( "strconv" "strings" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" @@ -61,7 +62,9 @@ type DeleteObjectsResponse struct { } func (h *handler) DeleteObjectHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteObject") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) versionID := reqInfo.URL.Query().Get(api.QueryVersionID) versionedObject := []*layer.VersionedObject{{ @@ -128,7 +131,9 @@ func isErrObjectLocked(err error) bool { // DeleteMultipleObjectsHandler handles multiple delete requests. func (h *handler) DeleteMultipleObjectsHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteMultipleObjects") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) // Content-Length is required and should be non-zero @@ -230,7 +235,9 @@ func (h *handler) DeleteMultipleObjectsHandler(w http.ResponseWriter, r *http.Re } func (h *handler) DeleteBucketHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteBucket") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) if err != nil { diff --git a/api/handler/get.go b/api/handler/get.go index 04cebe11..f617a871 100644 --- a/api/handler/get.go +++ b/api/handler/get.go @@ -8,6 +8,7 @@ import ( "strings" "time" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" @@ -148,12 +149,11 @@ func writeHeaders(h http.Header, requestHeader http.Header, extendedInfo *data.E } func (h *handler) GetObjectHandler(w http.ResponseWriter, r *http.Request) { - var ( - params *layer.RangeParams + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetObject") + defer span.End() - ctx = r.Context() - reqInfo = middleware.GetReqInfo(ctx) - ) + var params *layer.RangeParams + reqInfo := middleware.GetReqInfo(ctx) conditional := parseConditionalHeaders(r.Header, h.reqLogger(ctx)) diff --git a/api/handler/head.go b/api/handler/head.go index 8556e4b7..95048922 100644 --- a/api/handler/head.go +++ b/api/handler/head.go @@ -4,6 +4,7 @@ import ( "io" "net/http" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" @@ -27,7 +28,9 @@ func getRangeToDetectContentType(maxSize uint64) *layer.RangeParams { } func (h *handler) HeadObjectHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.HeadObject") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -123,7 +126,9 @@ func (h *handler) HeadObjectHandler(w http.ResponseWriter, r *http.Request) { } func (h *handler) HeadBucketHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.HeadBucket") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) diff --git a/api/handler/info.go b/api/handler/info.go index d526b812..f50d576e 100644 --- a/api/handler/info.go +++ b/api/handler/info.go @@ -3,11 +3,14 @@ package handler import ( "net/http" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" ) func (h *handler) GetBucketLocationHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetBucketLocation") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) diff --git a/api/handler/lifecycle.go b/api/handler/lifecycle.go index c82b4130..0ded7c0a 100644 --- a/api/handler/lifecycle.go +++ b/api/handler/lifecycle.go @@ -10,6 +10,7 @@ import ( "net/http" "time" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" apierr "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" @@ -27,7 +28,9 @@ const ( ) func (h *handler) GetBucketLifecycleHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetBucketLifecycle") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -49,10 +52,12 @@ func (h *handler) GetBucketLifecycleHandler(w http.ResponseWriter, r *http.Reque } func (h *handler) PutBucketLifecycleHandler(w http.ResponseWriter, r *http.Request) { + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutBucketLifecycle") + defer span.End() + var buf bytes.Buffer tee := io.TeeReader(r.Body, &buf) - ctx := r.Context() reqInfo := middleware.GetReqInfo(ctx) cfg := new(data.LifecycleConfiguration) @@ -115,7 +120,9 @@ func (h *handler) PutBucketLifecycleHandler(w http.ResponseWriter, r *http.Reque } func (h *handler) DeleteBucketLifecycleHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteBucketLifecycle") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) diff --git a/api/handler/locking.go b/api/handler/locking.go index e9a0a23b..57b8fe06 100644 --- a/api/handler/locking.go +++ b/api/handler/locking.go @@ -7,6 +7,7 @@ import ( "strconv" "time" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" apierr "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" @@ -26,7 +27,9 @@ const ( ) func (h *handler) PutBucketObjectLockConfigHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutBucketObjectLockConfig") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -74,7 +77,9 @@ func (h *handler) PutBucketObjectLockConfigHandler(w http.ResponseWriter, r *htt } func (h *handler) GetBucketObjectLockConfigHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetBucketObjectLockConfig") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -108,7 +113,9 @@ func (h *handler) GetBucketObjectLockConfigHandler(w http.ResponseWriter, r *htt } func (h *handler) PutObjectLegalHoldHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutObjectLegalHold") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -161,7 +168,9 @@ func (h *handler) PutObjectLegalHoldHandler(w http.ResponseWriter, r *http.Reque } func (h *handler) GetObjectLegalHoldHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetObjectLegalHold") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -199,7 +208,9 @@ func (h *handler) GetObjectLegalHoldHandler(w http.ResponseWriter, r *http.Reque } func (h *handler) PutObjectRetentionHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutObjectRetention") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -247,7 +258,9 @@ func (h *handler) PutObjectRetentionHandler(w http.ResponseWriter, r *http.Reque } func (h *handler) GetObjectRetentionHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetObjectRetention") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) diff --git a/api/handler/multipart_upload.go b/api/handler/multipart_upload.go index ecf39581..727d49fa 100644 --- a/api/handler/multipart_upload.go +++ b/api/handler/multipart_upload.go @@ -10,6 +10,7 @@ import ( "strings" "time" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" @@ -104,7 +105,9 @@ const ( ) func (h *handler) CreateMultipartUploadHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.CreateMultipartUpload") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) uploadID := uuid.New() cannedACLStatus := aclHeadersStatus(r) @@ -174,7 +177,9 @@ func (h *handler) CreateMultipartUploadHandler(w http.ResponseWriter, r *http.Re } func (h *handler) UploadPartHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.UploadPart") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -247,15 +252,16 @@ func (h *handler) UploadPartHandler(w http.ResponseWriter, r *http.Request) { } func (h *handler) UploadPartCopy(w http.ResponseWriter, r *http.Request) { - var ( - versionID string - ctx = r.Context() - reqInfo = middleware.GetReqInfo(ctx) - queryValues = reqInfo.URL.Query() - uploadID = queryValues.Get(uploadIDHeaderName) - partNumStr = queryValues.Get(partNumberHeaderName) - additional = []zap.Field{zap.String("uploadID", uploadID), zap.String("partNumber", partNumStr)} - ) + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.UploadPartCopy") + defer span.End() + + var versionID string + + reqInfo := middleware.GetReqInfo(ctx) + queryValues := reqInfo.URL.Query() + uploadID := queryValues.Get(uploadIDHeaderName) + partNumStr := queryValues.Get(partNumberHeaderName) + additional := []zap.Field{zap.String("uploadID", uploadID), zap.String("partNumber", partNumStr)} partNumber, err := strconv.Atoi(partNumStr) if err != nil || partNumber < layer.UploadMinPartNumber || partNumber > layer.UploadMaxPartNumber { @@ -381,7 +387,9 @@ func (h *handler) UploadPartCopy(w http.ResponseWriter, r *http.Request) { } func (h *handler) CompleteMultipartUploadHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.CompleteMultipartUpload") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -508,7 +516,9 @@ func (h *handler) completeMultipartUpload(r *http.Request, c *layer.CompleteMult } func (h *handler) ListMultipartUploadsHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.ListMultipartUploads") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -559,7 +569,9 @@ func (h *handler) ListMultipartUploadsHandler(w http.ResponseWriter, r *http.Req } func (h *handler) ListPartsHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.ListParts") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -623,7 +635,9 @@ func (h *handler) ListPartsHandler(w http.ResponseWriter, r *http.Request) { } func (h *handler) AbortMultipartUploadHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.AbortMultipartUpload") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) diff --git a/api/handler/object_list.go b/api/handler/object_list.go index 33183966..6d68501d 100644 --- a/api/handler/object_list.go +++ b/api/handler/object_list.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" @@ -19,7 +20,9 @@ const maxObjectList = 1000 // Limit number of objects in a listObjectsResponse/l // ListObjectsV1Handler handles objects listing requests for API version 1. func (h *handler) ListObjectsV1Handler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.ListObjectsV1") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) params, err := parseListObjectsArgsV1(reqInfo) if err != nil { @@ -64,7 +67,9 @@ func (h *handler) encodeV1(p *layer.ListObjectsParamsV1, list *layer.ListObjects // ListObjectsV2Handler handles objects listing requests for API version 2. func (h *handler) ListObjectsV2Handler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.ListObjectsV2") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) params, err := parseListObjectsArgsV2(reqInfo) if err != nil { @@ -223,7 +228,9 @@ func fillContents(src []*data.ExtendedNodeVersion, encode string, fetchOwner, md } func (h *handler) ListBucketObjectVersionsHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.ListBucketObjectVersions") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) p, err := parseListObjectVersionsRequest(reqInfo) if err != nil { diff --git a/api/handler/patch.go b/api/handler/patch.go index deba2cbf..c7af89d4 100644 --- a/api/handler/patch.go +++ b/api/handler/patch.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" @@ -19,7 +20,9 @@ import ( const maxPatchSize = 5 * 1024 * 1024 * 1024 // 5GB func (h *handler) PatchObjectHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PatchObject") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) if _, ok := r.Header[api.ContentRange]; !ok { diff --git a/api/handler/put.go b/api/handler/put.go index ee8764ef..03083f61 100644 --- a/api/handler/put.go +++ b/api/handler/put.go @@ -18,6 +18,7 @@ import ( "strings" "time" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/auth" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" @@ -196,12 +197,13 @@ type createBucketParams struct { } func (h *handler) PutObjectHandler(w http.ResponseWriter, r *http.Request) { - var ( - err error - cannedACLStatus = aclHeadersStatus(r) - ctx = r.Context() - reqInfo = middleware.GetReqInfo(ctx) - ) + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutObject") + defer span.End() + + var err error + + cannedACLStatus := aclHeadersStatus(r) + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) if err != nil { @@ -486,12 +488,13 @@ func (h *handler) isTLSCheckRequired(r *http.Request) bool { } func (h *handler) PostObject(w http.ResponseWriter, r *http.Request) { - var ( - tagSet map[string]string - ctx = r.Context() - reqInfo = middleware.GetReqInfo(ctx) - metadata = make(map[string]string) - ) + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PostObject") + defer span.End() + + var tagSet map[string]string + + reqInfo := middleware.GetReqInfo(ctx) + metadata := make(map[string]string) policy, err := checkPostPolicy(r, reqInfo, metadata) if err != nil { @@ -776,7 +779,10 @@ func parseCannedACL(header http.Header) (string, error) { } func (h *handler) CreateBucketHandler(w http.ResponseWriter, r *http.Request) { - h.createBucketHandlerPolicy(w, r) + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.CreateBucket") + defer span.End() + + h.createBucketHandlerPolicy(w, r.WithContext(ctx)) } func (h *handler) parseCommonCreateBucketParams(reqInfo *middleware.ReqInfo, boxData *accessbox.Box, r *http.Request) (*keys.PublicKey, *layer.CreateBucketParams, error) { diff --git a/api/handler/tagging.go b/api/handler/tagging.go index ac20828a..9dd7c369 100644 --- a/api/handler/tagging.go +++ b/api/handler/tagging.go @@ -6,6 +6,7 @@ import ( "strings" "unicode" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" @@ -21,7 +22,9 @@ const ( ) func (h *handler) PutObjectTaggingHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutObjectTagging") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) tagSet, err := h.readTagSet(reqInfo.Tagging) @@ -54,7 +57,9 @@ func (h *handler) PutObjectTaggingHandler(w http.ResponseWriter, r *http.Request } func (h *handler) GetObjectTaggingHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetObjectTagging") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -92,7 +97,9 @@ func (h *handler) GetObjectTaggingHandler(w http.ResponseWriter, r *http.Request } func (h *handler) DeleteObjectTaggingHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteObjectTagging") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -116,7 +123,9 @@ func (h *handler) DeleteObjectTaggingHandler(w http.ResponseWriter, r *http.Requ } func (h *handler) PutBucketTaggingHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutBucketTagging") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) tagSet, err := h.readTagSet(reqInfo.Tagging) @@ -138,7 +147,9 @@ func (h *handler) PutBucketTaggingHandler(w http.ResponseWriter, r *http.Request } func (h *handler) GetBucketTaggingHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetBucketTagging") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) @@ -160,7 +171,9 @@ func (h *handler) GetBucketTaggingHandler(w http.ResponseWriter, r *http.Request } func (h *handler) DeleteBucketTaggingHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteBucketTagging") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName) diff --git a/api/handler/versioning.go b/api/handler/versioning.go index bf9c895c..5a3c0eae 100644 --- a/api/handler/versioning.go +++ b/api/handler/versioning.go @@ -3,6 +3,7 @@ package handler import ( "net/http" + "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" @@ -10,7 +11,9 @@ import ( ) func (h *handler) PutBucketVersioningHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.PutBucketVersioning") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) configuration := new(VersioningConfiguration) @@ -57,7 +60,9 @@ func (h *handler) PutBucketVersioningHandler(w http.ResponseWriter, r *http.Requ // GetBucketVersioningHandler implements bucket versioning getter handler. func (h *handler) GetBucketVersioningHandler(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() + ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.GetBucketVersioning") + defer span.End() + reqInfo := middleware.GetReqInfo(ctx) bktInfo, err := h.getBucketAndCheckOwner(r, reqInfo.BucketName)