mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-10 08:06:44 +00:00
Convert ProtocolError to value-type, so that it can be used withh errors.As + fix SubmitBlock ProtocolError condition (#1555)
* Fix condition from || to && * Convert ProtocolError to value-type, so that it can be used wihth errors.As * Simplify condition further
This commit is contained in:
parent
201646282b
commit
dc84913214
@ -18,7 +18,7 @@ import (
|
|||||||
func (*FlowContext) HandleError(err error, flowName string, isStopping *uint32, errChan chan<- error) {
|
func (*FlowContext) HandleError(err error, flowName string, isStopping *uint32, errChan chan<- error) {
|
||||||
isErrRouteClosed := errors.Is(err, router.ErrRouteClosed)
|
isErrRouteClosed := errors.Is(err, router.ErrRouteClosed)
|
||||||
if !isErrRouteClosed {
|
if !isErrRouteClosed {
|
||||||
if protocolErr := &(protocolerrors.ProtocolError{}); !errors.As(err, &protocolErr) {
|
if protocolErr := (protocolerrors.ProtocolError{}); !errors.As(err, &protocolErr) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ func handleError(err error, flowName string, isStopping *uint32, errChan chan er
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if protocolErr := &(protocolerrors.ProtocolError{}); errors.As(err, &protocolErr) {
|
if protocolErr := (protocolerrors.ProtocolError{}); errors.As(err, &protocolErr) {
|
||||||
log.Errorf("Handshake protocol error from %s: %s", flowName, err)
|
log.Errorf("Handshake protocol error from %s: %s", flowName, err)
|
||||||
if atomic.AddUint32(isStopping, 1) == 1 {
|
if atomic.AddUint32(isStopping, 1) == 1 {
|
||||||
errChan <- err
|
errChan <- err
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
package testing
|
package testing
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/kaspanet/kaspad/app/protocol/protocolerrors"
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/kaspanet/kaspad/app/protocol/protocolerrors"
|
||||||
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
func checkFlowError(t *testing.T, err error, isProtocolError bool, shouldBan bool, contains string) {
|
func checkFlowError(t *testing.T, err error, isProtocolError bool, shouldBan bool, contains string) {
|
||||||
pErr := &protocolerrors.ProtocolError{}
|
pErr := protocolerrors.ProtocolError{}
|
||||||
if errors.As(err, &pErr) != isProtocolError {
|
if errors.As(err, &pErr) != isProtocolError {
|
||||||
t.Fatalf("Unexepcted error %+v", err)
|
t.Fatalf("Unexepcted error %+v", err)
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
package protocol
|
package protocol
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync/atomic"
|
||||||
|
|
||||||
"github.com/kaspanet/kaspad/app/protocol/flows/rejects"
|
"github.com/kaspanet/kaspad/app/protocol/flows/rejects"
|
||||||
"github.com/kaspanet/kaspad/infrastructure/network/connmanager"
|
"github.com/kaspanet/kaspad/infrastructure/network/connmanager"
|
||||||
"sync/atomic"
|
|
||||||
|
|
||||||
"github.com/kaspanet/kaspad/app/appmessage"
|
"github.com/kaspanet/kaspad/app/appmessage"
|
||||||
"github.com/kaspanet/kaspad/app/protocol/flows/addressexchange"
|
"github.com/kaspanet/kaspad/app/protocol/flows/addressexchange"
|
||||||
@ -75,7 +76,7 @@ func (m *Manager) routerInitializer(router *routerpkg.Router, netConnection *net
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *Manager) handleError(err error, netConnection *netadapter.NetConnection, outgoingRoute *routerpkg.Route) {
|
func (m *Manager) handleError(err error, netConnection *netadapter.NetConnection, outgoingRoute *routerpkg.Route) {
|
||||||
if protocolErr := &(protocolerrors.ProtocolError{}); errors.As(err, &protocolErr) {
|
if protocolErr := (protocolerrors.ProtocolError{}); errors.As(err, &protocolErr) {
|
||||||
if !m.context.Config().DisableBanning && protocolErr.ShouldBan {
|
if !m.context.Config().DisableBanning && protocolErr.ShouldBan {
|
||||||
log.Warnf("Banning %s (reason: %s)", netConnection, protocolErr.Cause)
|
log.Warnf("Banning %s (reason: %s)", netConnection, protocolErr.Cause)
|
||||||
|
|
||||||
|
@ -12,19 +12,19 @@ type ProtocolError struct {
|
|||||||
Cause error
|
Cause error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ProtocolError) Error() string {
|
func (e ProtocolError) Error() string {
|
||||||
return e.Cause.Error()
|
return e.Cause.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unwrap returns the cause of ProtocolError, to be used with `errors.Unwrap()`
|
// Unwrap returns the cause of ProtocolError, to be used with `errors.Unwrap()`
|
||||||
func (e *ProtocolError) Unwrap() error {
|
func (e ProtocolError) Unwrap() error {
|
||||||
return e.Cause
|
return e.Cause
|
||||||
}
|
}
|
||||||
|
|
||||||
// Errorf formats according to a format specifier and returns the string
|
// Errorf formats according to a format specifier and returns the string
|
||||||
// as a ProtocolError.
|
// as a ProtocolError.
|
||||||
func Errorf(shouldBan bool, format string, args ...interface{}) error {
|
func Errorf(shouldBan bool, format string, args ...interface{}) error {
|
||||||
return &ProtocolError{
|
return ProtocolError{
|
||||||
ShouldBan: shouldBan,
|
ShouldBan: shouldBan,
|
||||||
Cause: errors.Errorf(format, args...),
|
Cause: errors.Errorf(format, args...),
|
||||||
}
|
}
|
||||||
@ -33,7 +33,7 @@ func Errorf(shouldBan bool, format string, args ...interface{}) error {
|
|||||||
// New returns a ProtocolError with the supplied message.
|
// New returns a ProtocolError with the supplied message.
|
||||||
// New also records the stack trace at the point it was called.
|
// New also records the stack trace at the point it was called.
|
||||||
func New(shouldBan bool, message string) error {
|
func New(shouldBan bool, message string) error {
|
||||||
return &ProtocolError{
|
return ProtocolError{
|
||||||
ShouldBan: shouldBan,
|
ShouldBan: shouldBan,
|
||||||
Cause: errors.New(message),
|
Cause: errors.New(message),
|
||||||
}
|
}
|
||||||
@ -41,7 +41,7 @@ func New(shouldBan bool, message string) error {
|
|||||||
|
|
||||||
// Wrap wraps the given error and returns it as a ProtocolError.
|
// Wrap wraps the given error and returns it as a ProtocolError.
|
||||||
func Wrap(shouldBan bool, err error, message string) error {
|
func Wrap(shouldBan bool, err error, message string) error {
|
||||||
return &ProtocolError{
|
return ProtocolError{
|
||||||
ShouldBan: shouldBan,
|
ShouldBan: shouldBan,
|
||||||
Cause: errors.Wrap(err, message),
|
Cause: errors.Wrap(err, message),
|
||||||
}
|
}
|
||||||
@ -49,7 +49,7 @@ func Wrap(shouldBan bool, err error, message string) error {
|
|||||||
|
|
||||||
// Wrapf wraps the given error with the given format and returns it as a ProtocolError.
|
// Wrapf wraps the given error with the given format and returns it as a ProtocolError.
|
||||||
func Wrapf(shouldBan bool, err error, format string, args ...interface{}) error {
|
func Wrapf(shouldBan bool, err error, format string, args ...interface{}) error {
|
||||||
return &ProtocolError{
|
return ProtocolError{
|
||||||
ShouldBan: shouldBan,
|
ShouldBan: shouldBan,
|
||||||
Cause: errors.Wrapf(err, format, args...),
|
Cause: errors.Wrapf(err, format, args...),
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,8 @@ func HandleSubmitBlock(context *rpccontext.Context, _ *router.Router, request ap
|
|||||||
|
|
||||||
err := context.ProtocolManager.AddBlock(domainBlock)
|
err := context.ProtocolManager.AddBlock(domainBlock)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !errors.As(err, &ruleerrors.RuleError{}) || !errors.As(err, &protocolerrors.ProtocolError{}) {
|
isProtocolOrRuleError := errors.As(err, &ruleerrors.RuleError{}) || errors.As(err, &protocolerrors.ProtocolError{})
|
||||||
|
if !isProtocolOrRuleError {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user