def handle(msg, fexp, err)
err = RaisedError.new(err) unless err.respond_to?(:backtrace)
meta = err.is_a?(Ruote::MetaError)
fei = msg['fei'] || (fexp.h.fei rescue nil)
wfid = msg['wfid'] || (fei || {})['wfid']
return if ( ! meta) && fexp && fexp.handle_on_error(msg, err)
herr = deflate(err, fei, fexp)
@context.storage.put(
herr.merge(
'type' => 'errors',
'_id' => "err_#{Ruote.to_storage_id(fei)}",
'message' => err.inspect,
'trace' => (err.backtrace || []).join("\n"),
'msg' => msg)
) if fei
@context.storage.put_msg(
'error_intercepted',
'error' => herr, 'wfid' => wfid, 'fei' => fei, 'msg' => msg)
rescue => e
raise e unless @context.worker
@context.worker.send(
:handle_step_error,
e,
{ 'action' => 'error_intercepted',
'error' => deflate(err, fei),
'fei' => fei,
'wfid' => wfid,
'msg' => msg })
end