|
@@ -143,9 +143,9 @@ func opFunc(f *Flow, id string) *operation {
|
|
|
// Check inputs
|
|
|
fnval := reflect.ValueOf(op.executor)
|
|
|
if fnval.Type().NumIn() != len(op.inputs) {
|
|
|
- f.err = fmt.Errorf("expect %d inputs got %d", fnval.Type().NumIn(), len(op.inputs))
|
|
|
+ err := fmt.Errorf("expect %d inputs got %d", fnval.Type().NumIn(), len(op.inputs))
|
|
|
f.hooks.error(id, f.err)
|
|
|
- log.Println("Operation not ok", f.err)
|
|
|
+ f.Err(err)
|
|
|
return nil
|
|
|
}
|
|
|
/////////////////////////////
|
|
@@ -162,6 +162,17 @@ func opFunc(f *Flow, id string) *operation {
|
|
|
go func(i int, in *operation) {
|
|
|
defer wg.Done()
|
|
|
fr := in.processWithCtx(ctx, params...)
|
|
|
+ p := reflect.ValueOf(fr)
|
|
|
+
|
|
|
+ // Error checking
|
|
|
+ if !p.IsValid() {
|
|
|
+ f.Err(fmt.Errorf("Input %d is not valid %v", i, p))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if !p.Type().AssignableTo(fnval.Type().In(i)) {
|
|
|
+ f.Err(fmt.Errorf("Input %d not assignable to %v", i, p))
|
|
|
+ }
|
|
|
+
|
|
|
callParam[i] = reflect.ValueOf(fr)
|
|
|
}(i, in)
|
|
|
}
|
|
@@ -169,27 +180,14 @@ func opFunc(f *Flow, id string) *operation {
|
|
|
|
|
|
f.hooks.start(id)
|
|
|
|
|
|
- // Check params results
|
|
|
- for i, p := range callParam {
|
|
|
- f.err = func() error {
|
|
|
- if !p.IsValid() {
|
|
|
- return fmt.Errorf("Input is not valid %v", p)
|
|
|
- }
|
|
|
- if !p.Type().AssignableTo(fnval.Type().In(i)) {
|
|
|
- return fmt.Errorf("Input not assignable to %v", p)
|
|
|
- }
|
|
|
- return nil
|
|
|
- }()
|
|
|
- if f.err != nil {
|
|
|
- f.hooks.error(id, f.err)
|
|
|
- return nil
|
|
|
- }
|
|
|
+ if f.Err() != nil {
|
|
|
+ f.hooks.error(id, f.err)
|
|
|
+ return nil
|
|
|
}
|
|
|
|
|
|
fnret := fnval.Call(callParam)
|
|
|
if len(fnret) > 1 && (fnret[1].Interface().(error) != nil) {
|
|
|
- f.err = fnret[1].Interface().(error)
|
|
|
- log.Println("Flow err:", f.err)
|
|
|
+ f.Err(fnret[1].Interface().(error))
|
|
|
f.hooks.error(id, f.err)
|
|
|
return nil
|
|
|
}
|