Improve errors; post tweaks
This commit is contained in:
parent
892c7dfe3c
commit
0bcd620a18
@ -2,7 +2,6 @@ package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
@ -43,7 +42,7 @@ func (n *composeChartState) Prepare(ctx context.Context, s store.Storer, state *
|
||||
return err
|
||||
}
|
||||
if n.relNS == nil {
|
||||
return errors.New("@todo couldn't resolve namespace")
|
||||
return composeNamespaceErrUnresolved(n.res.NsRef.Identifiers)
|
||||
}
|
||||
|
||||
// Can't do anything else, since the NS doesn't yet exist
|
||||
@ -58,6 +57,9 @@ func (n *composeChartState) Prepare(ctx context.Context, s store.Storer, state *
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if n.relMods[i] == nil {
|
||||
return composeModuleErrUnresolved(mRef.Identifiers)
|
||||
}
|
||||
}
|
||||
|
||||
// Try to get the original chart
|
||||
@ -96,7 +98,7 @@ func (n *composeChartState) Encode(ctx context.Context, s store.Storer, state *e
|
||||
res.NamespaceID = ns.ID
|
||||
}
|
||||
if res.NamespaceID <= 0 {
|
||||
return errors.New("[chart] couldn't find related namespace; @todo error")
|
||||
return composeNamespaceErrUnresolved(n.res.NsRef.Identifiers)
|
||||
}
|
||||
|
||||
// Report modules
|
||||
@ -106,7 +108,7 @@ func (n *composeChartState) Encode(ctx context.Context, s store.Storer, state *e
|
||||
mod = findComposeModuleR(state.ParentResources, n.res.ModRef[i].Identifiers)
|
||||
}
|
||||
if mod == nil || mod.ID <= 0 {
|
||||
return errors.New("[chart] couldn't find related report module; @todo error")
|
||||
return composeModuleErrUnresolved(n.res.ModRef[i].Identifiers)
|
||||
}
|
||||
|
||||
r.ModuleID = mod.ID
|
||||
|
||||
@ -2,7 +2,7 @@ package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
@ -28,6 +28,8 @@ func NewComposeModuleState(res *resource.ComposeModule, cfg *EncoderConfig) reso
|
||||
cfg: cfg,
|
||||
|
||||
res: res,
|
||||
|
||||
recFields: make(map[string]uint64),
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,21 +45,23 @@ func (n *composeModuleState) Prepare(ctx context.Context, s store.Storer, state
|
||||
return err
|
||||
}
|
||||
if n.relNS == nil {
|
||||
return errors.New("@todo couldn't resolve namespace")
|
||||
}
|
||||
|
||||
// Can't do anything else, since the NS doesn't yet exist
|
||||
if n.relNS.ID <= 0 {
|
||||
return nil
|
||||
return composeNamespaceErrUnresolved(n.res.NsRef.Identifiers)
|
||||
}
|
||||
|
||||
// Get related record field modules
|
||||
for _, r := range n.res.ModRef {
|
||||
mod, err := findComposeModuleRS(ctx, s, n.relNS.ID, state.ParentResources, r.Identifiers)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if mod == nil {
|
||||
return errors.New("[mod prepare] couldn't find related module; @todo error")
|
||||
var mod *types.Module
|
||||
if n.relNS.ID > 0 {
|
||||
mod, err = findComposeModuleS(ctx, s, n.relNS.ID, makeGenericFilter(r.Identifiers))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if mod == nil {
|
||||
mod = findComposeModuleR(state.ParentResources, r.Identifiers)
|
||||
}
|
||||
if mod == nil {
|
||||
return composeModuleErrUnresolvedRecordField(r.Identifiers)
|
||||
}
|
||||
|
||||
for i := range r.Identifiers {
|
||||
@ -65,6 +69,11 @@ func (n *composeModuleState) Prepare(ctx context.Context, s store.Storer, state
|
||||
}
|
||||
}
|
||||
|
||||
// Can't do anything else, since the NS doesn't yet exist
|
||||
if n.relNS.ID <= 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Try to get the original module
|
||||
n.mod, err = findComposeModuleS(ctx, s, n.relNS.ID, makeGenericFilter(n.res.Identifiers()))
|
||||
if err != nil {
|
||||
@ -113,7 +122,7 @@ func (n *composeModuleState) Encode(ctx context.Context, s store.Storer, state *
|
||||
}
|
||||
|
||||
if res.NamespaceID <= 0 {
|
||||
return errors.New("[module] couldn't find related namespace; @todo error")
|
||||
return composeNamespaceErrUnresolved(n.res.NsRef.Identifiers)
|
||||
}
|
||||
|
||||
// Fields
|
||||
@ -128,9 +137,10 @@ func (n *composeModuleState) Encode(ctx context.Context, s store.Storer, state *
|
||||
refM := f.Options.String("module")
|
||||
mID := n.recFields[refM]
|
||||
if mID <= 0 {
|
||||
mod := findComposeModuleR(state.ParentResources, resource.MakeIdentifiers(refM))
|
||||
ii := resource.MakeIdentifiers(refM)
|
||||
mod := findComposeModuleR(state.ParentResources, ii)
|
||||
if mod == nil || mod.ID <= 0 {
|
||||
return errors.New("[module field] couldn't find related module; @todo error")
|
||||
return composeModuleErrUnresolvedRecordField(ii)
|
||||
}
|
||||
mID = mod.ID
|
||||
}
|
||||
@ -321,3 +331,11 @@ func findComposeModuleFieldsS(ctx context.Context, s store.Storer, mod *types.Mo
|
||||
|
||||
return ff, nil
|
||||
}
|
||||
|
||||
func composeModuleErrUnresolved(ii resource.Identifiers) error {
|
||||
return fmt.Errorf("compose module unresolved %v", ii.StringSlice())
|
||||
}
|
||||
|
||||
func composeModuleErrUnresolvedRecordField(ii resource.Identifiers) error {
|
||||
return fmt.Errorf("record module field unresolved %v", ii.StringSlice())
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
@ -169,3 +170,7 @@ func findComposeNamespaceR(rr resource.InterfaceSet, ii resource.Identifiers) (n
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func composeNamespaceErrUnresolved(ii resource.Identifiers) error {
|
||||
return fmt.Errorf("compose namespace unresolved %v", ii.StringSlice())
|
||||
}
|
||||
|
||||
@ -2,7 +2,6 @@ package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
@ -43,7 +42,7 @@ func (n *composePageState) Prepare(ctx context.Context, s store.Storer, state *e
|
||||
return err
|
||||
}
|
||||
if n.relNS == nil {
|
||||
return errors.New("@todo couldn't resolve namespace")
|
||||
return composeNamespaceErrUnresolved(n.res.NsRef.Identifiers)
|
||||
}
|
||||
|
||||
// Can't do anything else, since the NS doesn't yet exist
|
||||
@ -59,7 +58,7 @@ func (n *composePageState) Prepare(ctx context.Context, s store.Storer, state *e
|
||||
return err
|
||||
}
|
||||
if n.relMod == nil {
|
||||
return errors.New("@todo couldn't resolve module")
|
||||
return composeModuleErrUnresolved(n.res.ModRef.Identifiers)
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,7 +99,7 @@ func (n *composePageState) Encode(ctx context.Context, s store.Storer, state *en
|
||||
}
|
||||
|
||||
if res.NamespaceID <= 0 {
|
||||
return errors.New("[chart] couldn't find related namespace; @todo error")
|
||||
return composeNamespaceErrUnresolved(n.res.NsRef.Identifiers)
|
||||
}
|
||||
|
||||
// Module?
|
||||
|
||||
@ -2,7 +2,6 @@ package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
@ -44,7 +43,7 @@ func (n *composeRecordState) Prepare(ctx context.Context, s store.Storer, state
|
||||
return err
|
||||
}
|
||||
if n.relNS == nil {
|
||||
return errors.New("@todo couldn't resolve namespace")
|
||||
return composeNamespaceErrUnresolved(n.res.NsRef.Identifiers)
|
||||
}
|
||||
|
||||
n.relMod = findComposeModuleR(state.ParentResources, n.res.ModRef.Identifiers)
|
||||
@ -54,7 +53,7 @@ func (n *composeRecordState) Prepare(ctx context.Context, s store.Storer, state
|
||||
return err
|
||||
}
|
||||
if n.relMod == nil {
|
||||
return errors.New("@todo couldn't resolve module")
|
||||
return composeModuleErrUnresolved(n.res.ModRef.Identifiers)
|
||||
}
|
||||
|
||||
// Preload existing fields
|
||||
|
||||
@ -3,12 +3,12 @@ package store
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"sync"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/envoy"
|
||||
"github.com/cortezaproject/corteza-server/pkg/envoy/resource"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -48,6 +48,11 @@ type (
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
ErrUnknownResource = errors.New("unknown resource")
|
||||
ErrResourceStateUndefined = errors.New("undefined resource state")
|
||||
)
|
||||
|
||||
// NewStoreEncoder initializes a fresh store encoder
|
||||
//
|
||||
// If no config is provided, it uses Skip as the default merge alg.
|
||||
@ -94,7 +99,7 @@ func (se *storeEncoder) Prepare(ctx context.Context, ee ...*envoy.ResourceState)
|
||||
case *resource.ComposePage:
|
||||
err = f(NewComposePageState(res, se.cfg), e)
|
||||
|
||||
// System things
|
||||
// System things
|
||||
case *resource.User:
|
||||
err = f(NewUserState(res, se.cfg), e)
|
||||
case *resource.Role:
|
||||
@ -107,11 +112,11 @@ func (se *storeEncoder) Prepare(ctx context.Context, ee ...*envoy.ResourceState)
|
||||
err = f(NewRbacRuleState(res, se.cfg), e)
|
||||
|
||||
default:
|
||||
return errors.New("[encoder] unknown resource; @todo error")
|
||||
err = ErrUnknownResource
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
return se.WrapError("prepare", e.Res, err)
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,13 +135,20 @@ func (se *storeEncoder) Encode(ctx context.Context, rc envoy.Rc) error {
|
||||
|
||||
state := se.state[e.Res]
|
||||
if state == nil {
|
||||
return errors.New("Resource state not defined; @todo error")
|
||||
err = ErrResourceStateUndefined
|
||||
} else {
|
||||
err = state.Encode(ctx, se.s, e)
|
||||
}
|
||||
|
||||
err = state.Encode(ctx, se.s, e)
|
||||
if err != nil {
|
||||
return err
|
||||
return se.WrapError("encode", e.Res, err)
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (se *storeEncoder) WrapError(act string, res resource.Interface, err error) error {
|
||||
rt := strings.Join(strings.Split(strings.TrimSpace(strings.TrimRight(res.ResourceType(), ":")), ":"), " ")
|
||||
return fmt.Errorf("store encoder %s %s %v: %s", act, rt, res.Identifiers().StringSlice(), err)
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@ package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/envoy"
|
||||
"github.com/cortezaproject/corteza-server/pkg/envoy/resource"
|
||||
@ -51,7 +51,7 @@ func (n *rbacRuleState) Prepare(ctx context.Context, s store.Storer, state *envo
|
||||
return err
|
||||
}
|
||||
if n.relRole == nil {
|
||||
return errors.New("[rbac rule] couldn't resolve role; @todo error")
|
||||
return roleErrUnresolved(n.res.RefRole.Identifiers)
|
||||
}
|
||||
|
||||
// Check for resource if there is any
|
||||
@ -79,7 +79,7 @@ func (n *rbacRuleState) Encode(ctx context.Context, s store.Storer, state *envoy
|
||||
// Resource?
|
||||
if n.res.RefResource != nil {
|
||||
if ir, ok := n.relResource.(resource.IdentifiableInterface); !ok {
|
||||
return errors.New("[rbac rule] resource not identifiable; @todo error")
|
||||
return rbacResourceErrUnidentifiable(n.relResource.Identifiers())
|
||||
} else {
|
||||
rule.Resource = rule.Resource.AppendID(ir.SysID())
|
||||
}
|
||||
@ -129,3 +129,7 @@ func (n *rbacRuleState) findResourceR(ctx context.Context, rr resource.Interface
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func rbacResourceErrUnidentifiable(ii resource.Identifiers) error {
|
||||
return fmt.Errorf("rbac resource unidentifiable %v", ii.StringSlice())
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/envoy"
|
||||
@ -163,3 +164,7 @@ func findRoleR(rr resource.InterfaceSet, ii resource.Identifiers) (rl *types.Rol
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func roleErrUnresolved(ii resource.Identifiers) error {
|
||||
return fmt.Errorf("role unresolved %v", ii.StringSlice())
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user