Defer model validation to requested branches instead of entire model

This commit is contained in:
Tomaž Jerman
2021-09-02 10:43:58 +02:00
parent 00c47ed5c9
commit 933dc744e1
2 changed files with 21 additions and 7 deletions
-7
View File
@@ -108,13 +108,6 @@ func (m *model) Run(ctx context.Context) (err error) {
return errors.New("no model steps defined")
}
for _, s := range m.steps {
err = s.Validate()
if err != nil {
return err
}
}
return nil
}()
if err != nil {
+21
View File
@@ -65,9 +65,30 @@ func (m *model) datasource(ctx context.Context, def *FrameDefinition) (ds Dataso
return nil, fmt.Errorf("unresolved source: %s", def.Source)
}
err = m.validateBranch(start)
if err != nil {
return
}
return m.reduceBranch(ctx, start)
}
func (m *model) validateBranch(n *modelGraphNode) (err error) {
err = n.step.Validate()
if err != nil {
return err
}
for _, c := range n.cc {
err = m.validateBranch(c)
if err != nil {
return err
}
}
return nil
}
func (m *model) reduceBranch(ctx context.Context, n *modelGraphNode) (out Datasource, err error) {
// leaf node, nothing else to do
if len(n.cc) == 0 {