github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/pool/errors.go (about)

     1  package pool
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/ydb-platform/ydb-go-genproto/protos/Ydb"
     7  	grpcCodes "google.golang.org/grpc/codes"
     8  
     9  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
    10  )
    11  
    12  var (
    13  	errClosedPool     = errors.New("closed pool")
    14  	errItemIsNotAlive = errors.New("item is not alive")
    15  	errPoolIsOverflow = errors.New("pool is overflow")
    16  	errNoProgress     = errors.New("no progress")
    17  )
    18  
    19  func isRetriable(err error) bool {
    20  	if err == nil {
    21  		panic(err)
    22  	}
    23  
    24  	switch {
    25  	case
    26  		xerrors.Is(err, errPoolIsOverflow, errItemIsNotAlive, errNoProgress),
    27  		xerrors.IsRetryableError(err),
    28  		xerrors.IsOperationError(err, Ydb.StatusIds_OVERLOADED),
    29  		xerrors.IsTransportError(
    30  			err,
    31  			grpcCodes.ResourceExhausted,
    32  			grpcCodes.DeadlineExceeded,
    33  			grpcCodes.Unavailable,
    34  		):
    35  		return true
    36  	default:
    37  		return false
    38  	}
    39  }