[#1636] qos: Return Resource Exhausted error

Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
Dmitrii Stepanov 2025-02-12 16:45:39 +03:00
parent 2162f8e189
commit c2d855aedd
Signed by: dstepanov-yadro
GPG key ID: 237AF1A763293BC0
2 changed files with 13 additions and 1 deletions

View file

@ -2,6 +2,7 @@ package qos
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"time" "time"
@ -9,6 +10,7 @@ import (
"git.frostfs.info/TrueCloudLab/frostfs-node/internal/assert" "git.frostfs.info/TrueCloudLab/frostfs-node/internal/assert"
"git.frostfs.info/TrueCloudLab/frostfs-qos/scheduling" "git.frostfs.info/TrueCloudLab/frostfs-qos/scheduling"
"git.frostfs.info/TrueCloudLab/frostfs-qos/tagging" "git.frostfs.info/TrueCloudLab/frostfs-qos/tagging"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
) )
const ( const (
@ -110,6 +112,9 @@ func (n *mClockLimiter) ReadRequest(ctx context.Context) (ReleaseFunc, error) {
} }
rel, err := n.readScheduler.RequestArrival(ctx, tag) rel, err := n.readScheduler.RequestArrival(ctx, tag)
if err != nil { if err != nil {
if errors.Is(err, scheduling.ErrMClockSchedulerRequestLimitExceeded) {
return nil, &apistatus.ResourceExhausted{}
}
return nil, err return nil, err
} }
return ReleaseFunc(rel), nil return ReleaseFunc(rel), nil
@ -125,6 +130,9 @@ func (n *mClockLimiter) WriteRequest(ctx context.Context) (ReleaseFunc, error) {
} }
rel, err := n.writeScheduler.RequestArrival(ctx, tag) rel, err := n.writeScheduler.RequestArrival(ctx, tag)
if err != nil { if err != nil {
if errors.Is(err, scheduling.ErrMClockSchedulerRequestLimitExceeded) {
return nil, &apistatus.ResourceExhausted{}
}
return nil, err return nil, err
} }
return ReleaseFunc(rel), nil return ReleaseFunc(rel), nil

View file

@ -14,6 +14,7 @@ import (
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util"
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
"go.uber.org/zap" "go.uber.org/zap"
) )
@ -176,7 +177,10 @@ func (e *StorageEngine) reportShardError(
} }
func isLogical(err error) bool { func isLogical(err error) bool {
return errors.As(err, &logicerr.Logical{}) || errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) return errors.As(err, &logicerr.Logical{}) ||
errors.Is(err, context.Canceled) ||
errors.Is(err, context.DeadlineExceeded) ||
errors.As(err, new(*apistatus.ResourceExhausted))
} }
// Option represents StorageEngine's constructor option. // Option represents StorageEngine's constructor option.