Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
Here's the snippet from the startup sequence of the SamzaContainer.
startProducers startTask startConsumers startSecurityManger info("Entering run loop.") addShutdownHook runLoop.run } catch { case e: Exception => error("Caught exception in process loop.", e) throw e } finally { info("Shutting down.") shutdownConsumers shutdownTask shutdownStores
In this case, the catch block merely catches Exceptions and not Errors.
Consider the following sequence:
1. `NoSuchMethodError` thrown in the startup sequence.
2. The error is not caught in the catch block (hence, not logged) and the control reaches the finally block.
3. The finally block throws an exception in one of the shutdown methods.
4. The thrown exception completely masks the underlying NoSuchMethodError.
Catching all Throwables will atleast help log the error.
Ideally, finally block should be idempotent and not throw exceptions (but, that's for a different ticket since it's larger in scope)
Attachments
Issue Links
- links to