Unfortunately, exceptions are not the only reason why a job will fail : we left it unsolved to fix it at a later point due to the ambiguity there.
This is definitely a welcome step in the right direction though !

A better approach would be .
a) Set a status variable 'succeeded = false' outside try block.
b) set it to true after main method finishes 'normally.
c) remove the catch block (catching throwable is not a good idea) and replace with finally block - depending on succeeded invoke the appropriate finishApplicationMaster method as has been done here in this PR.