From 4659f3c9573ace2f6e02c9563374041ebc67e9f5 Mon Sep 17 00:00:00 2001 From: Fabian Seidl <fabian.b.seidl@stud.h-da.de> Date: Tue, 14 Jun 2022 14:50:19 +0200 Subject: [PATCH] updated ErrCouldNotMarshall to use underlying error and provide more information --- controller/nucleus/databaseDeviceStore.go | 7 ++++--- controller/nucleus/databasePndStore.go | 6 ++++-- controller/nucleus/databaseSbiStore.go | 6 ++++-- controller/nucleus/errors/errors.go | 6 ++++-- controller/rbac/databaseRoleStore.go | 8 +++++--- controller/rbac/databaseUserStore.go | 8 +++++--- 6 files changed, 26 insertions(+), 15 deletions(-) diff --git a/controller/nucleus/databaseDeviceStore.go b/controller/nucleus/databaseDeviceStore.go index 530bbec1e..4aea432e7 100644 --- a/controller/nucleus/databaseDeviceStore.go +++ b/controller/nucleus/databaseDeviceStore.go @@ -2,6 +2,7 @@ package nucleus import ( "fmt" + "reflect" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/device" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/database" @@ -65,7 +66,7 @@ func (s *DatabaseDeviceStore) getByID(idOfDevice uuid.UUID) (device.LoadedDevice err := result.Decode(&loadedDevice) if err != nil { log.Printf("Failed marshalling %v", err) - return loadedDevice, errors.ErrCouldNotMarshall{StoreName: s.storeName} + return loadedDevice, errors.ErrCouldNotMarshall{Object: idOfDevice, Type: reflect.TypeOf(loadedDevice), Err: err} } return loadedDevice, nil @@ -88,7 +89,7 @@ func (s *DatabaseDeviceStore) getByName(nameOfDevice string) (device.LoadedDevic err := result.Decode(&loadedDevice) if err != nil { log.Printf("Failed marshalling %v", err) - return loadedDevice, errors.ErrCouldNotMarshall{StoreName: s.storeName} + return loadedDevice, errors.ErrCouldNotMarshall{Object: nameOfDevice, Type: reflect.TypeOf(loadedDevice), Err: err} } return loadedDevice, nil @@ -114,7 +115,7 @@ func (s *DatabaseDeviceStore) GetAll() ([]device.LoadedDevice, error) { if err != nil { log.Printf("Failed marshalling %v", err) - return nil, errors.ErrCouldNotMarshall{StoreName: pndStoreName} + return nil, errors.ErrCouldNotMarshall{Type: reflect.TypeOf(loadedDevices), Err: err} } return loadedDevices, nil diff --git a/controller/nucleus/databasePndStore.go b/controller/nucleus/databasePndStore.go index f39ef1138..a1eb29323 100644 --- a/controller/nucleus/databasePndStore.go +++ b/controller/nucleus/databasePndStore.go @@ -1,6 +1,8 @@ package nucleus import ( + "reflect" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/device" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain" @@ -44,7 +46,7 @@ func (s *DatabasePndStore) Get(query store.Query) (networkdomain.NetworkDomain, if err != nil { log.Printf("Failed marshalling %v", err) - return nil, errors.ErrCouldNotMarshall{StoreName: pndStoreName} + return nil, errors.ErrCouldNotMarshall{Object: query.ID, Type: reflect.TypeOf(loadedPND), Err: err} } csbiClient, err := s.getCsbiClient() @@ -87,7 +89,7 @@ func (s *DatabasePndStore) GetAll() ([]networkdomain.NetworkDomain, error) { if err != nil { log.Printf("Failed marshalling %v", err) - return nil, errors.ErrCouldNotMarshall{StoreName: pndStoreName} + return nil, errors.ErrCouldNotMarshall{Type: reflect.TypeOf(loadedPnds), Err: err} } csbiClient, err := s.getCsbiClient() diff --git a/controller/nucleus/databaseSbiStore.go b/controller/nucleus/databaseSbiStore.go index 43a1bca99..cadd71981 100644 --- a/controller/nucleus/databaseSbiStore.go +++ b/controller/nucleus/databaseSbiStore.go @@ -1,6 +1,8 @@ package nucleus import ( + "reflect" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/database" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors" @@ -75,7 +77,7 @@ func (s *DatabaseSbiStore) Get(query store.Query) (southbound.LoadedSbi, error) if err != nil { log.Printf("Failed marshalling %v", err) - return loadedSbi, errors.ErrCouldNotMarshall{StoreName: sbiStoreName} + return loadedSbi, errors.ErrCouldNotMarshall{Object: query.ID, Type: reflect.TypeOf(loadedSbi), Err: err} } return loadedSbi, nil @@ -101,7 +103,7 @@ func (s *DatabaseSbiStore) GetAll() ([]southbound.LoadedSbi, error) { if err != nil { log.Printf("Failed marshalling %v", err) - return nil, errors.ErrCouldNotMarshall{StoreName: sbiStoreName} + return nil, errors.ErrCouldNotMarshall{Type: reflect.TypeOf(loadedSbis), Err: err} } return loadedSbis, nil diff --git a/controller/nucleus/errors/errors.go b/controller/nucleus/errors/errors.go index eac05eb44..43cf54e9a 100644 --- a/controller/nucleus/errors/errors.go +++ b/controller/nucleus/errors/errors.go @@ -162,11 +162,13 @@ func (e ErrTypeNotSupported) Error() string { // ErrCouldNotMarshall implements Error interface and is called if a // database respone can not be parsed. type ErrCouldNotMarshall struct { - StoreName string + Object any + Type any + Err error } func (e ErrCouldNotMarshall) Error() string { - return fmt.Sprintf("could not marshall %s", e.StoreName) + return fmt.Sprintf("could not marshall Object: %v of Type: %v, Internal error: %v", e.Object, e.Type, e.Err) } // ErrCouldNotUpdate implements the Error interface and is called if a diff --git a/controller/rbac/databaseRoleStore.go b/controller/rbac/databaseRoleStore.go index b97da6d9a..8d1ac67a7 100644 --- a/controller/rbac/databaseRoleStore.go +++ b/controller/rbac/databaseRoleStore.go @@ -1,6 +1,8 @@ package rbac import ( + "reflect" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/database" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors" @@ -93,7 +95,7 @@ func (s *DatabaseRoleStore) getByID(idOfRole uuid.UUID) (rbac.LoadedRole, error) err := result.Decode(&loadedRole) if err != nil { log.Printf("Failed marshalling %v", err) - return loadedRole, errors.ErrCouldNotMarshall{StoreName: s.roleStoreName} + return loadedRole, errors.ErrCouldNotMarshall{Object: idOfRole, Type: reflect.TypeOf(loadedRole), Err: err} } return loadedRole, nil @@ -116,7 +118,7 @@ func (s *DatabaseRoleStore) getByName(nameOfRole string) (rbac.LoadedRole, error err := result.Decode(&loadedRole) if err != nil { log.Printf("Failed marshalling %v", err) - return loadedRole, errors.ErrCouldNotMarshall{StoreName: s.roleStoreName} + return loadedRole, errors.ErrCouldNotMarshall{Object: nameOfRole, Type: reflect.TypeOf(loadedRole), Err: err} } return loadedRole, nil @@ -142,7 +144,7 @@ func (s *DatabaseRoleStore) GetAll() ([]rbac.LoadedRole, error) { if err != nil { log.Printf("Failed marshalling %v", err) - return nil, errors.ErrCouldNotMarshall{StoreName: s.roleStoreName} + return nil, errors.ErrCouldNotMarshall{Type: reflect.TypeOf(loadedRoles), Err: err} } return loadedRoles, nil } diff --git a/controller/rbac/databaseUserStore.go b/controller/rbac/databaseUserStore.go index a300c96ed..dda2bc790 100644 --- a/controller/rbac/databaseUserStore.go +++ b/controller/rbac/databaseUserStore.go @@ -1,6 +1,8 @@ package rbac import ( + "reflect" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/rbac" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/database" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/errors" @@ -93,7 +95,7 @@ func (s *DatabaseUserStore) getByID(idOfUser uuid.UUID) (rbac.LoadedUser, error) err := result.Decode(&loadedUser) if err != nil { log.Printf("Failed marshalling %v", err) - return loadedUser, errors.ErrCouldNotMarshall{StoreName: s.userStoreName} + return loadedUser, errors.ErrCouldNotMarshall{Object: idOfUser, Type: reflect.TypeOf(loadedUser), Err: err} } return loadedUser, nil @@ -116,7 +118,7 @@ func (s *DatabaseUserStore) getByName(nameOfUser string) (rbac.LoadedUser, error err := result.Decode(&loadedUser) if err != nil { log.Printf("Failed marshalling %v", err) - return loadedUser, errors.ErrCouldNotMarshall{StoreName: s.userStoreName} + return loadedUser, errors.ErrCouldNotMarshall{Object: nameOfUser, Type: reflect.TypeOf(loadedUser), Err: err} } return loadedUser, nil @@ -142,7 +144,7 @@ func (s *DatabaseUserStore) GetAll() ([]rbac.LoadedUser, error) { if err != nil { log.Printf("Failed marshalling %v", err) - return nil, errors.ErrCouldNotMarshall{StoreName: s.userStoreName} + return nil, errors.ErrCouldNotMarshall{Type: reflect.TypeOf(loadedUsers), Err: err} } return loadedUsers, nil } -- GitLab