forked from TrueCloudLab/frostfs-node
[#135] acl: Add tracing spans
Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
0920d848d0
commit
b2ca730547
1 changed files with 78 additions and 0 deletions
|
@ -6,6 +6,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
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/container"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/netmap"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/netmap"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object"
|
"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
|
// Get implements ServiceServer interface, makes ACL checks and calls
|
||||||
// next Get method in the ServiceServer pipeline.
|
// next Get method in the ServiceServer pipeline.
|
||||||
func (b Service) Get(request *objectV2.GetRequest, stream object.GetObjectStream) error {
|
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)
|
cnr, err := getContainerIDFromRequest(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -158,6 +167,9 @@ func (b Service) Get(request *objectV2.GetRequest, stream object.GetObjectStream
|
||||||
return eACLErr(reqInfo, err)
|
return eACLErr(reqInfo, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
span.End()
|
||||||
|
spanClosed = true
|
||||||
|
|
||||||
return b.next.Get(request, &getStreamBasicChecker{
|
return b.next.Get(request, &getStreamBasicChecker{
|
||||||
GetObjectStream: stream,
|
GetObjectStream: stream,
|
||||||
info: reqInfo,
|
info: reqInfo,
|
||||||
|
@ -177,6 +189,14 @@ func (b Service) Put() (object.PutObjectStream, error) {
|
||||||
func (b Service) Head(
|
func (b Service) Head(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *objectV2.HeadRequest) (*objectV2.HeadResponse, error) {
|
request *objectV2.HeadRequest) (*objectV2.HeadResponse, error) {
|
||||||
|
spanClosed := false
|
||||||
|
_, span := tracing.StartSpanFromContext(ctx, "checkACL")
|
||||||
|
defer func() {
|
||||||
|
if !spanClosed {
|
||||||
|
span.End()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
cnr, err := getContainerIDFromRequest(request)
|
cnr, err := getContainerIDFromRequest(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -224,6 +244,9 @@ func (b Service) Head(
|
||||||
return nil, eACLErr(reqInfo, err)
|
return nil, eACLErr(reqInfo, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
span.End()
|
||||||
|
spanClosed = true
|
||||||
|
|
||||||
resp, err := b.next.Head(ctx, request)
|
resp, err := b.next.Head(ctx, request)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if err = b.checker.CheckEACL(resp, reqInfo); 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 {
|
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)
|
id, err := getContainerIDFromRequest(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -275,6 +306,9 @@ func (b Service) Search(request *objectV2.SearchRequest, stream object.SearchStr
|
||||||
return eACLErr(reqInfo, err)
|
return eACLErr(reqInfo, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
span.End()
|
||||||
|
spanClosed = true
|
||||||
|
|
||||||
return b.next.Search(request, &searchStreamBasicChecker{
|
return b.next.Search(request, &searchStreamBasicChecker{
|
||||||
checker: b.checker,
|
checker: b.checker,
|
||||||
SearchStream: stream,
|
SearchStream: stream,
|
||||||
|
@ -285,6 +319,14 @@ func (b Service) Search(request *objectV2.SearchRequest, stream object.SearchStr
|
||||||
func (b Service) Delete(
|
func (b Service) Delete(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *objectV2.DeleteRequest) (*objectV2.DeleteResponse, error) {
|
request *objectV2.DeleteRequest) (*objectV2.DeleteResponse, error) {
|
||||||
|
spanClosed := false
|
||||||
|
_, span := tracing.StartSpanFromContext(ctx, "checkACL")
|
||||||
|
defer func() {
|
||||||
|
if !spanClosed {
|
||||||
|
span.End()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
cnr, err := getContainerIDFromRequest(request)
|
cnr, err := getContainerIDFromRequest(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -332,10 +374,21 @@ func (b Service) Delete(
|
||||||
return nil, eACLErr(reqInfo, err)
|
return nil, eACLErr(reqInfo, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
span.End()
|
||||||
|
spanClosed = true
|
||||||
|
|
||||||
return b.next.Delete(ctx, request)
|
return b.next.Delete(ctx, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b Service) GetRange(request *objectV2.GetRangeRequest, stream object.GetObjectRangeStream) error {
|
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)
|
cnr, err := getContainerIDFromRequest(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -383,6 +436,9 @@ func (b Service) GetRange(request *objectV2.GetRangeRequest, stream object.GetOb
|
||||||
return eACLErr(reqInfo, err)
|
return eACLErr(reqInfo, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
span.End()
|
||||||
|
spanClosed = true
|
||||||
|
|
||||||
return b.next.GetRange(request, &rangeStreamBasicChecker{
|
return b.next.GetRange(request, &rangeStreamBasicChecker{
|
||||||
checker: b.checker,
|
checker: b.checker,
|
||||||
GetObjectRangeStream: stream,
|
GetObjectRangeStream: stream,
|
||||||
|
@ -393,6 +449,14 @@ func (b Service) GetRange(request *objectV2.GetRangeRequest, stream object.GetOb
|
||||||
func (b Service) GetRangeHash(
|
func (b Service) GetRangeHash(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *objectV2.GetRangeHashRequest) (*objectV2.GetRangeHashResponse, error) {
|
request *objectV2.GetRangeHashRequest) (*objectV2.GetRangeHashResponse, error) {
|
||||||
|
spanClosed := false
|
||||||
|
_, span := tracing.StartSpanFromContext(ctx, "checkACL")
|
||||||
|
defer func() {
|
||||||
|
if !spanClosed {
|
||||||
|
span.End()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
cnr, err := getContainerIDFromRequest(request)
|
cnr, err := getContainerIDFromRequest(request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -440,10 +504,21 @@ func (b Service) GetRangeHash(
|
||||||
return nil, eACLErr(reqInfo, err)
|
return nil, eACLErr(reqInfo, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
span.End()
|
||||||
|
spanClosed = true
|
||||||
|
|
||||||
return b.next.GetRangeHash(ctx, request)
|
return b.next.GetRangeHash(ctx, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p putStreamBasicChecker) Send(ctx context.Context, request *objectV2.PutRequest) error {
|
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()
|
body := request.GetBody()
|
||||||
if body == nil {
|
if body == nil {
|
||||||
return errEmptyBody
|
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)
|
return p.next.Send(ctx, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue