forked from TrueCloudLab/frostfs-sdk-go
[#253] pool: Don't count regular FrostFS errors
Previously we count all frostfs errors like: ObjectNotFound, EACLNotFound because frostfs status is unconditionally resolved into built-in go errors but handleError method handled built-in errors like internal network ones. Since after resolving frostfs errors status is also returned we start check this first Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
This commit is contained in:
parent
98aabc45a7
commit
203bba65a0
2 changed files with 34 additions and 10 deletions
27
pool/pool.go
27
pool/pool.go
|
@ -1227,6 +1227,22 @@ func (c *clientWrapper) close() error {
|
|||
}
|
||||
|
||||
func (c *clientStatusMonitor) handleError(ctx context.Context, st apistatus.Status, err error) error {
|
||||
if stErr := apistatus.ErrFromStatus(st); stErr != nil {
|
||||
switch stErr.(type) {
|
||||
case *apistatus.ServerInternal,
|
||||
*apistatus.WrongMagicNumber,
|
||||
*apistatus.SignatureVerification,
|
||||
*apistatus.NodeUnderMaintenance:
|
||||
c.incErrorRate()
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
err = stErr
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
if needCountError(ctx, err) {
|
||||
c.incErrorRate()
|
||||
|
@ -1235,16 +1251,7 @@ func (c *clientStatusMonitor) handleError(ctx context.Context, st apistatus.Stat
|
|||
return err
|
||||
}
|
||||
|
||||
err = apistatus.ErrFromStatus(st)
|
||||
switch err.(type) {
|
||||
case *apistatus.ServerInternal,
|
||||
*apistatus.WrongMagicNumber,
|
||||
*apistatus.SignatureVerification,
|
||||
*apistatus.NodeUnderMaintenance:
|
||||
c.incErrorRate()
|
||||
}
|
||||
|
||||
return err
|
||||
return nil
|
||||
}
|
||||
|
||||
func needCountError(ctx context.Context, err error) bool {
|
||||
|
|
|
@ -609,6 +609,23 @@ func TestHandleError(t *testing.T) {
|
|||
expectedError: true,
|
||||
countError: false,
|
||||
},
|
||||
{
|
||||
ctx: ctx,
|
||||
status: new(apistatus.ObjectNotFound),
|
||||
err: &apistatus.ObjectNotFound{},
|
||||
expectedError: true,
|
||||
countError: false,
|
||||
},
|
||||
{
|
||||
ctx: ctx,
|
||||
status: nil,
|
||||
err: &apistatus.EACLNotFound{},
|
||||
expectedError: true,
|
||||
// we expect error be counted because status is nil
|
||||
// currently we assume that DisableFrostFSErrorResolution be always false for pool
|
||||
// and status be checked first in handleError
|
||||
countError: true,
|
||||
},
|
||||
{
|
||||
ctx: ctx,
|
||||
status: new(apistatus.ServerInternal),
|
||||
|
|
Loading…
Reference in a new issue