From 5776e7586ad4392d5862b1f32467306e19935b1c Mon Sep 17 00:00:00 2001 From: Ed Warnicke Date: Tue, 20 Oct 2020 15:49:27 -0500 Subject: [PATCH] Fix mechanisms.Server to return a more meaningful error Signed-off-by: Ed Warnicke --- go.mod | 1 + go.sum | 2 ++ pkg/networkservice/common/mechanisms/server.go | 10 ++++++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 0de74c049..5a015b2ca 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/uuid v1.1.2 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 + github.com/hashicorp/go-multierror v1.0.0 github.com/nats-io/nats-streaming-server v0.17.0 github.com/nats-io/stan.go v0.6.0 github.com/networkservicemesh/api v0.0.0-20201014184533-ca42a07d7e15 diff --git a/go.sum b/go.sum index 478f9d60e..79a23ec5c 100644 --- a/go.sum +++ b/go.sum @@ -196,6 +196,7 @@ github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -206,6 +207,7 @@ github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjh github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI= github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= diff --git a/pkg/networkservice/common/mechanisms/server.go b/pkg/networkservice/common/mechanisms/server.go index 1f3cc7c09..e299037cd 100644 --- a/pkg/networkservice/common/mechanisms/server.go +++ b/pkg/networkservice/common/mechanisms/server.go @@ -22,6 +22,7 @@ import ( "context" "github.com/golang/protobuf/ptypes/empty" + "github.com/hashicorp/go-multierror" "github.com/networkservicemesh/api/pkg/api/networkservice" "github.com/pkg/errors" @@ -59,18 +60,23 @@ func (m *mechanismsServer) Request(ctx context.Context, request *networkservice. } return nil, errors.Errorf("Unsupported Mechanism: %+v", request.GetConnection().GetMechanism()) } + var err error for _, mechanism := range request.GetMechanismPreferences() { srv, ok := m.mechanisms[mechanism.GetType()] if ok { req := request.Clone() req.GetConnection().Mechanism = mechanism - resp, err := srv.Request(ctx, req) + var resp *networkservice.Connection + resp, err = srv.Request(ctx, req) if err == nil { return resp, err } - trace.Log(ctx).Error(err.Error()) + err = multierror.Append(err, err) } } + if err != nil { + return nil, errors.Wrapf(err, "Cannot support any of the requested Mechanisms: %+v", request.GetMechanismPreferences()) + } return nil, errors.Errorf("Cannot support any of the requested Mechanisms: %+v", request.GetMechanismPreferences()) }