Skip to content
Snippets Groups Projects
Commit 62038d74 authored by Manuel Kieweg's avatar Manuel Kieweg
Browse files

proper grpc error codes

parent a790b435
No related branches found
No related tags found
2 merge requests!221Thesis mk,!173Process response overhaul
Pipeline #74484 passed with warnings
This commit is part of merge request !173. Comments created here will be created in the context of that merge request.
...@@ -2,6 +2,8 @@ package server ...@@ -2,6 +2,8 @@ package server
import ( import (
"context" "context"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"reflect" "reflect"
"time" "time"
...@@ -20,7 +22,7 @@ type pnd struct { ...@@ -20,7 +22,7 @@ type pnd struct {
func (p pnd) Get(ctx context.Context, request *ppb.GetRequest) (*ppb.GetResponse, error) { func (p pnd) Get(ctx context.Context, request *ppb.GetRequest) (*ppb.GetResponse, error) {
pid, err := uuid.Parse(request.Pid) pid, err := uuid.Parse(request.Pid)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
switch req := request.Request.(type) { switch req := request.Request.(type) {
case *ppb.GetRequest_Pnd: case *ppb.GetRequest_Pnd:
...@@ -32,26 +34,26 @@ func (p pnd) Get(ctx context.Context, request *ppb.GetRequest) (*ppb.GetResponse ...@@ -32,26 +34,26 @@ func (p pnd) Get(ctx context.Context, request *ppb.GetRequest) (*ppb.GetResponse
case *ppb.GetRequest_Change: case *ppb.GetRequest_Change:
return handleGetChange(pid, req) return handleGetChange(pid, req)
default: default:
return nil, errors.ErrOperationNotSupported{Op: reflect.TypeOf(request.Request)} return nil, status.Errorf(codes.Aborted, "%v", errors.ErrOperationNotSupported{Op: reflect.TypeOf(request.Request)})
} }
} }
func handleGetPnd(pid uuid.UUID) (*ppb.GetResponse, error) { func handleGetPnd(pid uuid.UUID) (*ppb.GetResponse, error) {
pnd, err := pndc.Get(pid) pnd, err := pndc.Get(pid)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
onds, err := fillOnds(pnd, true) onds, err := fillOnds(pnd, true)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
sbis, err := fillSbis(pnd, true) sbis, err := fillSbis(pnd, true)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
changes, err := fillChanges(pnd, true) changes, err := fillChanges(pnd, true)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
return &ppb.GetResponse{ return &ppb.GetResponse{
...@@ -70,11 +72,11 @@ func handleGetPnd(pid uuid.UUID) (*ppb.GetResponse, error) { ...@@ -70,11 +72,11 @@ func handleGetPnd(pid uuid.UUID) (*ppb.GetResponse, error) {
func handleGetSbi(pid uuid.UUID, req *ppb.GetRequest_Sbi) (*ppb.GetResponse, error) { func handleGetSbi(pid uuid.UUID, req *ppb.GetRequest_Sbi) (*ppb.GetResponse, error) {
pnd, err := pndc.Get(pid) pnd, err := pndc.Get(pid)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
sbis, err := fillSbis(pnd, req.Sbi.GetAll(), req.Sbi.Sid...) sbis, err := fillSbis(pnd, req.Sbi.GetAll(), req.Sbi.Sid...)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
return &ppb.GetResponse{ return &ppb.GetResponse{
Timestamp: time.Now().UnixNano(), Timestamp: time.Now().UnixNano(),
...@@ -87,7 +89,7 @@ func stringToUUID(sid []string) ([]uuid.UUID, error) { ...@@ -87,7 +89,7 @@ func stringToUUID(sid []string) ([]uuid.UUID, error) {
for i, id := range sid { for i, id := range sid {
parsed, err := uuid.Parse(id) parsed, err := uuid.Parse(id)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
UUIDs[i] = parsed UUIDs[i] = parsed
} }
...@@ -97,11 +99,11 @@ func stringToUUID(sid []string) ([]uuid.UUID, error) { ...@@ -97,11 +99,11 @@ func stringToUUID(sid []string) ([]uuid.UUID, error) {
func handleGetOnd(pid uuid.UUID, req *ppb.GetRequest_Ond) (*ppb.GetResponse, error) { func handleGetOnd(pid uuid.UUID, req *ppb.GetRequest_Ond) (*ppb.GetResponse, error) {
pnd, err := pndc.Get(pid) pnd, err := pndc.Get(pid)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
onds, err := fillOnds(pnd, req.Ond.All, req.Ond.Did...) onds, err := fillOnds(pnd, req.Ond.All, req.Ond.Did...)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
return &ppb.GetResponse{ return &ppb.GetResponse{
Timestamp: time.Now().UnixNano(), Timestamp: time.Now().UnixNano(),
...@@ -112,11 +114,11 @@ func handleGetOnd(pid uuid.UUID, req *ppb.GetRequest_Ond) (*ppb.GetResponse, err ...@@ -112,11 +114,11 @@ func handleGetOnd(pid uuid.UUID, req *ppb.GetRequest_Ond) (*ppb.GetResponse, err
func handleGetChange(pid uuid.UUID, req *ppb.GetRequest_Change) (*ppb.GetResponse, error) { func handleGetChange(pid uuid.UUID, req *ppb.GetRequest_Change) (*ppb.GetResponse, error) {
pnd, err := pndc.Get(pid) pnd, err := pndc.Get(pid)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
changes, err := fillChanges(pnd, req.Change.All, req.Change.Cuid...) changes, err := fillChanges(pnd, req.Change.All, req.Change.Cuid...)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
return &ppb.GetResponse{ return &ppb.GetResponse{
Timestamp: time.Now().UnixNano(), Timestamp: time.Now().UnixNano(),
...@@ -141,14 +143,14 @@ func fillSbis(pnd nucleus.PrincipalNetworkDomain, all bool, sid ...string) ([]*s ...@@ -141,14 +143,14 @@ func fillSbis(pnd nucleus.PrincipalNetworkDomain, all bool, sid ...string) ([]*s
} }
sbiList, err = stringToUUID(sid) sbiList, err = stringToUUID(sid)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
} }
sbis := make([]*spb.SouthboundInterface, len(sbiList)) sbis := make([]*spb.SouthboundInterface, len(sbiList))
for i, id := range sbiList { for i, id := range sbiList {
sbi, err := sbiStore.Get(id) sbi, err := sbiStore.Get(id)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
sbis[i] = &spb.SouthboundInterface{ sbis[i] = &spb.SouthboundInterface{
Id: id.String(), Id: id.String(),
...@@ -174,7 +176,7 @@ func fillOnds(pnd nucleus.PrincipalNetworkDomain, all bool, did ...string) ([]*p ...@@ -174,7 +176,7 @@ func fillOnds(pnd nucleus.PrincipalNetworkDomain, all bool, did ...string) ([]*p
} }
ondList, err = stringToUUID(did) ondList, err = stringToUUID(did)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
} }
...@@ -182,12 +184,12 @@ func fillOnds(pnd nucleus.PrincipalNetworkDomain, all bool, did ...string) ([]*p ...@@ -182,12 +184,12 @@ func fillOnds(pnd nucleus.PrincipalNetworkDomain, all bool, did ...string) ([]*p
for i, id := range ondList { for i, id := range ondList {
d, err := pnd.GetDevice(id.String()) d, err := pnd.GetDevice(id.String())
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
cfg := ygot.GNMINotificationsConfig{} cfg := ygot.GNMINotificationsConfig{}
dev, err := ygot.TogNMINotifications(d.(nucleus.Device).Model(), time.Now().UnixNano(), cfg) dev, err := ygot.TogNMINotifications(d.(nucleus.Device).Model(), time.Now().UnixNano(), cfg)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
onds[i] = &ppb.OrchestratedNetworkingDevice{ onds[i] = &ppb.OrchestratedNetworkingDevice{
Id: id.String(), Id: id.String(),
...@@ -215,7 +217,7 @@ func fillChanges(pnd nucleus.PrincipalNetworkDomain, all bool, cuid ...string) ( ...@@ -215,7 +217,7 @@ func fillChanges(pnd nucleus.PrincipalNetworkDomain, all bool, cuid ...string) (
} }
changeList, err = stringToUUID(cuid) changeList, err = stringToUUID(cuid)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
} }
...@@ -223,7 +225,7 @@ func fillChanges(pnd nucleus.PrincipalNetworkDomain, all bool, cuid ...string) ( ...@@ -223,7 +225,7 @@ func fillChanges(pnd nucleus.PrincipalNetworkDomain, all bool, cuid ...string) (
for i, ch := range changeList { for i, ch := range changeList {
c, err := pnd.GetChange(ch) c, err := pnd.GetChange(ch)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
change, ok := c.(*nucleus.Change) change, ok := c.(*nucleus.Change)
if !ok { if !ok {
...@@ -245,25 +247,25 @@ func fillChanges(pnd nucleus.PrincipalNetworkDomain, all bool, cuid ...string) ( ...@@ -245,25 +247,25 @@ func fillChanges(pnd nucleus.PrincipalNetworkDomain, all bool, cuid ...string) (
func (p pnd) Set(ctx context.Context, request *ppb.SetRequest) (*ppb.SetResponse, error) { func (p pnd) Set(ctx context.Context, request *ppb.SetRequest) (*ppb.SetResponse, error) {
pid, err := uuid.Parse(request.Pid) pid, err := uuid.Parse(request.Pid)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
pnd, err := pndc.Get(pid) pnd, err := pndc.Get(pid)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
ondResp, err := handleSetOnd(pnd, request.Ond) ondResp, err := handleSetOnd(pnd, request.Ond)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
changeResp, err := handleSetChange(pnd, request.Change) changeResp, err := handleSetChange(pnd, request.Change)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
changeRequestResp, err := handleChangeRequest(pnd, request.ChangeRequest) changeRequestResp, err := handleChangeRequest(pnd, request.ChangeRequest)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
return &ppb.SetResponse{ return &ppb.SetResponse{
Timestamp: time.Now().UnixNano(), Timestamp: time.Now().UnixNano(),
...@@ -280,7 +282,7 @@ func handleSetOnd(pnd nucleus.PrincipalNetworkDomain, req []*ppb.SetOnd) (*ppb.S ...@@ -280,7 +282,7 @@ func handleSetOnd(pnd nucleus.PrincipalNetworkDomain, req []*ppb.SetOnd) (*ppb.S
for _, r := range req { for _, r := range req {
sid, err := uuid.Parse(r.Sbi.Id) sid, err := uuid.Parse(r.Sbi.Id)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
if err := pnd.AddDevice(r.DeviceName, r.TransportOption, sid); err != nil { if err := pnd.AddDevice(r.DeviceName, r.TransportOption, sid); err != nil {
return nil, err return nil, err
...@@ -303,16 +305,16 @@ func handleSetChange(pnd nucleus.PrincipalNetworkDomain, req []*ppb.SetChange) ( ...@@ -303,16 +305,16 @@ func handleSetChange(pnd nucleus.PrincipalNetworkDomain, req []*ppb.SetChange) (
for _, r := range req { for _, r := range req {
cuid, err := uuid.Parse(r.Cuid) cuid, err := uuid.Parse(r.Cuid)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
switch r.Op { switch r.Op {
case ppb.SetChange_COMMIT: case ppb.SetChange_COMMIT:
if err := pnd.Commit(cuid); err != nil { if err := pnd.Commit(cuid); err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
case ppb.SetChange_CONFIRM: case ppb.SetChange_CONFIRM:
if err := pnd.Confirm(cuid); err != nil { if err := pnd.Confirm(cuid); err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
default: default:
return nil, &errors.ErrInvalidParameters{ return nil, &errors.ErrInvalidParameters{
...@@ -331,10 +333,10 @@ func handleChangeRequest(pnd nucleus.PrincipalNetworkDomain, req []*ppb.ChangeRe ...@@ -331,10 +333,10 @@ func handleChangeRequest(pnd nucleus.PrincipalNetworkDomain, req []*ppb.ChangeRe
for _, r := range req { for _, r := range req {
did, err := uuid.Parse(r.Id) did, err := uuid.Parse(r.Id)
if err != nil { if err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
if err := pnd.ChangeOND(did, r.ApiOp, r.Path, r.Value); err != nil { if err := pnd.ChangeOND(did, r.ApiOp, r.Path, r.Value); err != nil {
return nil, err return nil, status.Errorf(codes.Aborted, "%v", err)
} }
} }
return &ppb.SetResponse{ return &ppb.SetResponse{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment