[TrueCloudLab#16] pool: Don't count grpc canceled error #17
2 changed files with 18 additions and 6 deletions
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
go_versions: [ '1.17.x', '1.18.x', '1.19.x' ]
|
||||
go_versions: [ '1.18.x', '1.19.x', '1.20.x' ]
|
||||
fail-fast: false
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
|
22
pool/pool.go
22
pool/pool.go
|
@ -32,6 +32,8 @@ import (
|
|||
"go.uber.org/atomic"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
// client represents virtual connection to the single FrostFS network endpoint from which Pool is formed.
|
||||
|
@ -995,11 +997,7 @@ func (c *clientWrapper) incRequests(elapsed time.Duration, method MethodIndex) {
|
|||
|
||||
func (c *clientStatusMonitor) handleError(st apistatus.Status, err error) error {
|
||||
if err != nil {
|
||||
// non-status logic error that could be returned
|
||||
// from the SDK client; should not be considered
|
||||
// as a connection error
|
||||
var siErr *object.SplitInfoError
|
||||
if !errors.As(err, &siErr) {
|
||||
if needCountError(err) {
|
||||
c.incErrorRate()
|
||||
}
|
||||
|
||||
|
@ -1018,6 +1016,20 @@ func (c *clientStatusMonitor) handleError(st apistatus.Status, err error) error
|
|||
return err
|
||||
}
|
||||
|
||||
func needCountError(err error) bool {
|
||||
// non-status logic error that could be returned
|
||||
// from the SDK client; should not be considered
|
||||
// as a connection error
|
||||
var siErr *object.SplitInfoError
|
||||
if errors.As(err, &siErr) {
|
||||
return false
|
||||
}
|
||||
|
||||
// we can't use errors.Is(err, context.Canceled)
|
||||
// https://github.com/grpc/grpc-go/issues/4375
|
||||
return status.Code(err) != codes.Canceled
|
||||
}
|
||||
|
||||
// clientBuilder is a type alias of client constructors which open connection
|
||||
// to the given endpoint.
|
||||
type clientBuilder = func(endpoint string) client
|
||||
|
|
Loading…
Reference in a new issue