Detect missing panic recovery in goroutines in plugins
Issue by insomniacslk
Tuesday Feb 04, 2020 at 16:25 GMT
Originally opened as https://github.com/facebookincubator/contest/issues/5
Panic in goroutines other than the main one cannot be recovered explicitly, they have to be handled in the goroutine itself[1]. For ConTest this means that if a test step or any other plugin has a goroutine that panics, we are not able to catch it.
We should write a tool to detect (statically or dynamically) whether each spawned goroutine attempts to recover, and warn that the plugin may break the service run.
[1] https://stackoverflow.com/questions/50409011/handling-panics-in-go-routines
Comment by xaionaro
Monday Mar 02, 2020 at 12:37 GMT
We may:
- Write a special function to create safe goroutines, we may declare it as
goroutine.Run(func()). - Write a static-analysis tool using the
go/set of packages to find any directgouse (and warn about it). This way we will enforce to usegoroutine.Runinstead. This should be easy because there's methodInspectout-of-the-box. So we just need to callInspect()and comparing incoming data withgo.
What are your thoughts?
Update: Looks relevant: https://github.com/studiosol/async