contest icon indicating copy to clipboard operation
contest copied to clipboard

Detect missing panic recovery in goroutines in plugins

Open mimir-d opened this issue 4 years ago • 1 comments

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

mimir-d avatar Oct 28 '21 23:10 mimir-d

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 direct go use (and warn about it). This way we will enforce to use goroutine.Run instead. This should be easy because there's method Inspect out-of-the-box. So we just need to call Inspect() and comparing incoming data with go.

What are your thoughts?


Update: Looks relevant: https://github.com/studiosol/async

mimir-d avatar Oct 28 '21 23:10 mimir-d