Add support for nested exceptions in Puppet::Error
|Assignee:||Patrick Carlisle||% Done:|
|Affected Puppet version:||Branch:||https://github.com/pcarlisle/puppet/tree/ticket/master/13341-nested-exceptions|
There are a decent number of places in the code where we catch an exception and then raise a Puppet::Error in response. This can be a useful pattern when we have any extra information to add to the exception, but it comes at a painfully high price if we aren’t careful not to lose the backtrace information from the original exception.
I would like to add an optional extra argument to the constructor for Puppet::Error that would allow you to pass in a nested exception, and then tweak the Logging#log_exception method to print the full series of backtraces when it is called with a Puppet::Error that takes advantage of this nesting.
Daniel, can you let me know if you have any concerns about this proposal? If not I will probably tackle it relatively soon because I think it could be extremely helpful for debugging and troubleshooting.
#1 Updated by Daniel Pittman about 1 year ago
This sounds great to me. I can’t see any reason why this wouldn’t be desirable, provided we treat an empty nested exception slot sanely – since third party code can and should raise these. We should consider inserting the minimal support – the accessor – into 2.7.x as well as Telly, so that code that sets the nested exception works across both platforms. The actual printing changes might be more appropriate only in Telly.