From 196885fa75332dd462ba1d450fc53735b0bbf939 Mon Sep 17 00:00:00 2001 From: Dmitrii Stepanov Date: Tue, 11 Apr 2023 18:03:57 +0300 Subject: [PATCH] [#135] acl: Add tracing spans Signed-off-by: Dmitrii Stepanov --- pkg/services/object/acl/v2/service.go | 78 +++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/pkg/services/object/acl/v2/service.go b/pkg/services/object/acl/v2/service.go index 6544d78d7..93c1c65f8 100644 --- a/pkg/services/object/acl/v2/service.go +++ b/pkg/services/object/acl/v2/service.go @@ -6,6 +6,7 @@ import ( "fmt" objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object" + "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/container" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/netmap" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object" @@ -111,6 +112,14 @@ func New(opts ...Option) Service { // Get implements ServiceServer interface, makes ACL checks and calls // next Get method in the ServiceServer pipeline. func (b Service) Get(request *objectV2.GetRequest, stream object.GetObjectStream) error { + spanClosed := false + _, span := tracing.StartSpanFromContext(stream.Context(), "checkACL") + defer func() { + if !spanClosed { + span.End() + } + }() + cnr, err := getContainerIDFromRequest(request) if err != nil { return err @@ -158,6 +167,9 @@ func (b Service) Get(request *objectV2.GetRequest, stream object.GetObjectStream return eACLErr(reqInfo, err) } + span.End() + spanClosed = true + return b.next.Get(request, &getStreamBasicChecker{ GetObjectStream: stream, info: reqInfo, @@ -177,6 +189,14 @@ func (b Service) Put() (object.PutObjectStream, error) { func (b Service) Head( ctx context.Context, request *objectV2.HeadRequest) (*objectV2.HeadResponse, error) { + spanClosed := false + _, span := tracing.StartSpanFromContext(ctx, "checkACL") + defer func() { + if !spanClosed { + span.End() + } + }() + cnr, err := getContainerIDFromRequest(request) if err != nil { return nil, err @@ -224,6 +244,9 @@ func (b Service) Head( return nil, eACLErr(reqInfo, err) } + span.End() + spanClosed = true + resp, err := b.next.Head(ctx, request) if err == nil { if err = b.checker.CheckEACL(resp, reqInfo); err != nil { @@ -235,6 +258,14 @@ func (b Service) Head( } func (b Service) Search(request *objectV2.SearchRequest, stream object.SearchStream) error { + spanClosed := false + _, span := tracing.StartSpanFromContext(stream.Context(), "checkACL") + defer func() { + if !spanClosed { + span.End() + } + }() + id, err := getContainerIDFromRequest(request) if err != nil { return err @@ -275,6 +306,9 @@ func (b Service) Search(request *objectV2.SearchRequest, stream object.SearchStr return eACLErr(reqInfo, err) } + span.End() + spanClosed = true + return b.next.Search(request, &searchStreamBasicChecker{ checker: b.checker, SearchStream: stream, @@ -285,6 +319,14 @@ func (b Service) Search(request *objectV2.SearchRequest, stream object.SearchStr func (b Service) Delete( ctx context.Context, request *objectV2.DeleteRequest) (*objectV2.DeleteResponse, error) { + spanClosed := false + _, span := tracing.StartSpanFromContext(ctx, "checkACL") + defer func() { + if !spanClosed { + span.End() + } + }() + cnr, err := getContainerIDFromRequest(request) if err != nil { return nil, err @@ -332,10 +374,21 @@ func (b Service) Delete( return nil, eACLErr(reqInfo, err) } + span.End() + spanClosed = true + return b.next.Delete(ctx, request) } func (b Service) GetRange(request *objectV2.GetRangeRequest, stream object.GetObjectRangeStream) error { + spanClosed := false + _, span := tracing.StartSpanFromContext(stream.Context(), "checkACL") + defer func() { + if !spanClosed { + span.End() + } + }() + cnr, err := getContainerIDFromRequest(request) if err != nil { return err @@ -383,6 +436,9 @@ func (b Service) GetRange(request *objectV2.GetRangeRequest, stream object.GetOb return eACLErr(reqInfo, err) } + span.End() + spanClosed = true + return b.next.GetRange(request, &rangeStreamBasicChecker{ checker: b.checker, GetObjectRangeStream: stream, @@ -393,6 +449,14 @@ func (b Service) GetRange(request *objectV2.GetRangeRequest, stream object.GetOb func (b Service) GetRangeHash( ctx context.Context, request *objectV2.GetRangeHashRequest) (*objectV2.GetRangeHashResponse, error) { + spanClosed := false + _, span := tracing.StartSpanFromContext(ctx, "checkACL") + defer func() { + if !spanClosed { + span.End() + } + }() + cnr, err := getContainerIDFromRequest(request) if err != nil { return nil, err @@ -440,10 +504,21 @@ func (b Service) GetRangeHash( return nil, eACLErr(reqInfo, err) } + span.End() + spanClosed = true + return b.next.GetRangeHash(ctx, request) } func (p putStreamBasicChecker) Send(ctx context.Context, request *objectV2.PutRequest) error { + spanClosed := false + _, span := tracing.StartSpanFromContext(ctx, "checkACL") + defer func() { + if !spanClosed { + span.End() + } + }() + body := request.GetBody() if body == nil { return errEmptyBody @@ -512,6 +587,9 @@ func (p putStreamBasicChecker) Send(ctx context.Context, request *objectV2.PutRe } } + span.End() + spanClosed = true + return p.next.Send(ctx, request) }