Robert Burke created BEAM-11095:
-----------------------------------

             Summary: Improve error messages from Invalid element types in 
emitter signatures
                 Key: BEAM-11095
                 URL: https://issues.apache.org/jira/browse/BEAM-11095
             Project: Beam
          Issue Type: Improvement
          Components: sdk-go
            Reporter: Robert Burke


If a DoFn's `ProcessElement`uses an emitter `func(MyType)` where `MyType` is 
not a concrete type, (such as having function type fields, which are not valid) 
the pipeline can fail with incomprehensible errors that don't explain the 
problem correctly. eg.


{{panic: inserting ParDo in scopeĀ *mypackage.studyGenerationElement
 constructing DoFn
invalid DoFn
 caused by:
method ProcessElement invalid
 caused by:
bad parameter type for reflect.methodValueCall: 
func(*mypackage.studyGenerationElement)

goroutine 740 [running]:
panic(0x55e4c34f3e80, 0xc005952680)
go/gc/src/runtime/panic.go:1066+0x47e fp=0xc0061a18c8 sp=0xc0061a17d8 
pc=0x55e49ff4b67e
testing.tRunner.func1.1(0x55e4c34f3e80, 0xc005952680)
go/gc/src/testing/testing.go:1076 +0x30d fp=0xc0061a1980 sp=0xc0061a18c8 
pc=0x55e4a097254d
testing.tRunner.func1(0xc005046900)
go/gc/src/testing/testing.go:1079 +0x41a fp=0xc0061a1a28 sp=0xc0061a1980 
pc=0x55e4a097297a
runtime.call32(0x0, 0x55e4c3f0e388, 0xc0050dbf38, 0x800000008)
go/gc/src/runtime/asm_amd64.s:540 +0x40 fp=0xc0061a1a58 sp=0xc0061a1a28 
pc=0x55e49ff86fc0
runtime.reflectcallSave(0xc0061a1b88, 0x55e4c3f0e388, 0xc0050dbf38, 
0x55e400000008)
go/gc/src/runtime/panic.go:881 +0x5a fp=0xc0061a1a88 sp=0xc0061a1a58 
pc=0x55e49ff4b13a
runtime.runOpenDeferFrame(0xc0035bc180, 0xc0050dbef0, 0xc0061a1c08)
go/gc/src/runtime/panic.go:855 +0x2cd fp=0xc0061a1b18 sp=0xc0061a1a88 
pc=0x55e49ff4afed
panic(0x55e4c34f3e80, 0xc005952680)
go/gc/src/runtime/panic.go:969 +0x175 fp=0xc0061a1c08 sp=0xc0061a1b18 
pc=0x55e49ff4b375
...pkg/beam/beam.MustN(...)...pkg/beam/util.go:104
...pkg/beam/beam.ParDo(0xc00507d9e0, 0xc0052a7b30, 0x55e4c30faae0, 
0xc0053244e0, 0xc0053245a0, 0x0, 0x0, 0x0, 0x0)
...pkg/beam/pardo.go:358 +0x135 fp=0xc0061a1c80 sp=0xc0061a1c08 
pc=0x55e4a0f3cc95
}}


In particular this message is generated by 
[funcx.New|https://github.com/apache/beam/blob/master/sdks/go/pkg/beam/core/funcx/fn.go#L323]
 and occurs because we don't maintain an error state when trying to analyze the 
DoFn.
We would catch most errors like this if we provide a justification for it 
better.

This will likely mean reimplementing the IsConcrete function and similar in 
terms of errors with the explanations, and having a justification handler to 
return that error from funcx.New if the type is invalid. This is subtle as 
while most errors are due to a type not being concrete, but the type might be 
nested in a emitter or iterator function.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to