common/errors.go

(完整代码) 1KB

/*
 * Copyright (c) 2019. Baidu Inc. All Rights Reserved.
 */

package common

import (
	"errors"
	"strings"

	"github.com/xuperchain/xuperunion/pb"
)

var (
	// ErrContractExecutionTimeout common error for contract timeout
	ErrContractExecutionTimeout = errors.New("contract execution timeout")
	// ErrContractConnectionError connect error
	ErrContractConnectionError = errors.New("can't connect contract")
	ErrKVNotFound              = errors.New("Key not found")
	ErrP2PError                = errors.New("invalid stream")
)

// ServerError xchain.proto error
type ServerError struct {
	Errno pb.XChainErrorEnum
}

// Error convert to name
func (err ServerError) Error() string {
	return pb.XChainErrorEnum_name[int32(err.Errno)]
}

func NormalizedKVError(err error) error {
	if err == nil {
		return err
	}
	if strings.HasSuffix(err.Error(), "not found") {
		return ErrKVNotFound
	}
	if isInvalidStream(err.Error()) {
		return ErrP2PError
	}
	return err
}

func isInvalidStream(err string) bool {
	if strings.HasSuffix(err, "stream reset") {
		return true
	}
	if strings.HasSuffix(err, "connection reset by peer") {
		return true
	}
	if strings.HasSuffix(err, "stream closed") {
		return true
	}
	if strings.HasSuffix(err, "stream not valid") {
		return true
	}
	return false
}

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。