forked from TrueCloudLab/frostfs-node
101 lines
2.9 KiB
Go
101 lines
2.9 KiB
Go
package tree
|
|
|
|
import (
|
|
"context"
|
|
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
var _ TreeServiceServer = (*ioTagAdjust)(nil)
|
|
|
|
type AdjustIOTag interface {
|
|
AdjustIncomingTag(ctx context.Context, requestSignPublicKey []byte) context.Context
|
|
}
|
|
|
|
type ioTagAdjust struct {
|
|
s TreeServiceServer
|
|
a AdjustIOTag
|
|
}
|
|
|
|
func NewIOTagAdjustServer(s TreeServiceServer, a AdjustIOTag) TreeServiceServer {
|
|
return &ioTagAdjust{
|
|
s: s,
|
|
a: a,
|
|
}
|
|
}
|
|
|
|
func (i *ioTagAdjust) Add(ctx context.Context, req *AddRequest) (*AddResponse, error) {
|
|
ctx = i.a.AdjustIncomingTag(ctx, req.GetSignature().GetKey())
|
|
return i.s.Add(ctx, req)
|
|
}
|
|
|
|
func (i *ioTagAdjust) AddByPath(ctx context.Context, req *AddByPathRequest) (*AddByPathResponse, error) {
|
|
ctx = i.a.AdjustIncomingTag(ctx, req.GetSignature().GetKey())
|
|
return i.s.AddByPath(ctx, req)
|
|
}
|
|
|
|
func (i *ioTagAdjust) Apply(ctx context.Context, req *ApplyRequest) (*ApplyResponse, error) {
|
|
ctx = i.a.AdjustIncomingTag(ctx, req.GetSignature().GetKey())
|
|
return i.s.Apply(ctx, req)
|
|
}
|
|
|
|
func (i *ioTagAdjust) GetNodeByPath(ctx context.Context, req *GetNodeByPathRequest) (*GetNodeByPathResponse, error) {
|
|
ctx = i.a.AdjustIncomingTag(ctx, req.GetSignature().GetKey())
|
|
return i.s.GetNodeByPath(ctx, req)
|
|
}
|
|
|
|
func (i *ioTagAdjust) GetOpLog(req *GetOpLogRequest, srv TreeService_GetOpLogServer) error {
|
|
ctx := i.a.AdjustIncomingTag(srv.Context(), req.GetSignature().GetKey())
|
|
return i.s.GetOpLog(req, &qosServerWrapper[*GetOpLogResponse]{
|
|
sender: srv,
|
|
ServerStream: srv,
|
|
ctxF: func() context.Context { return ctx },
|
|
})
|
|
}
|
|
|
|
func (i *ioTagAdjust) GetSubTree(req *GetSubTreeRequest, srv TreeService_GetSubTreeServer) error {
|
|
ctx := i.a.AdjustIncomingTag(srv.Context(), req.GetSignature().GetKey())
|
|
return i.s.GetSubTree(req, &qosServerWrapper[*GetSubTreeResponse]{
|
|
sender: srv,
|
|
ServerStream: srv,
|
|
ctxF: func() context.Context { return ctx },
|
|
})
|
|
}
|
|
|
|
func (i *ioTagAdjust) Healthcheck(ctx context.Context, req *HealthcheckRequest) (*HealthcheckResponse, error) {
|
|
ctx = i.a.AdjustIncomingTag(ctx, req.GetSignature().GetKey())
|
|
return i.s.Healthcheck(ctx, req)
|
|
}
|
|
|
|
func (i *ioTagAdjust) Move(ctx context.Context, req *MoveRequest) (*MoveResponse, error) {
|
|
ctx = i.a.AdjustIncomingTag(ctx, req.GetSignature().GetKey())
|
|
return i.s.Move(ctx, req)
|
|
}
|
|
|
|
func (i *ioTagAdjust) Remove(ctx context.Context, req *RemoveRequest) (*RemoveResponse, error) {
|
|
ctx = i.a.AdjustIncomingTag(ctx, req.GetSignature().GetKey())
|
|
return i.s.Remove(ctx, req)
|
|
}
|
|
|
|
func (i *ioTagAdjust) TreeList(ctx context.Context, req *TreeListRequest) (*TreeListResponse, error) {
|
|
ctx = i.a.AdjustIncomingTag(ctx, req.GetSignature().GetKey())
|
|
return i.s.TreeList(ctx, req)
|
|
}
|
|
|
|
type qosSend[T any] interface {
|
|
Send(T) error
|
|
}
|
|
|
|
type qosServerWrapper[T any] struct {
|
|
grpc.ServerStream
|
|
sender qosSend[T]
|
|
ctxF func() context.Context
|
|
}
|
|
|
|
func (w *qosServerWrapper[T]) Send(resp T) error {
|
|
return w.sender.Send(resp)
|
|
}
|
|
|
|
func (w *qosServerWrapper[T]) Context() context.Context {
|
|
return w.ctxF()
|
|
}
|