Thanks for the quick response!
I'm still having a hard time trying to wrap my head around connecting these JIDs together. From my tests I can see that there's new JID generated for each job retry. Just to clarify, assuming I want to report to my exception handler on the 5th time Timeout::Error is raised:
{ "jid": "000", "error_class": "Timeout::Error", "retry_count": 1 } => ignore since 1st time
{ "jid": "111", "error_class": "Timeout::Error", "retry_count": 2 } => ignore since 2nd time
{ "jid": "222", "error_class": "Timeout::Error", "retry_count": 3 } => ignore since 3rd time
{ "jid": "333", "error_class": "Sidekiq::Shutdown", "retry_count": 4 } => ignore since not Timeout:Error
{ "jid": "444", "error_class": "Sidekiq::Shutdown", "retry_count": 5 } => ignore since not Timeout:Error
{ "jid": "555", "error_class": "Sidekiq::Shutdown", "retry_count": 6 } => ignore since not Timeout:Error
{ "jid": "666", "error_class": "Timeout::Error", "retry_count": 7 } => ignore since 4th time
{ "jid": "777", "error_class": "Timeout::Error", "retry_count": 8 } => report since 5th time
or am I mistaken that JID is actually persisted somehow across these retries?