Gracefully shutdown the agent if it encounters issues on startup #1136
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
If the java agent encounters a serious issue on startup, it calls
System.exit
. It would be better if it gracefully shutdown. This is a particularly troublesome quality when connecting to running applications.I have a demo that connects to a Spring Petclinic app and uses the nri-lsi-java tool to connect the agent. It's causing the app to exit. Here's the repo: https://source.datanerd.us/saxon/java-agent-crash
Overview
This wraps the
Instrumentation
instance so that we can remove class transformers and shutdown the agent if there's an exception. We only do this for the attach (agentmain
) case.premain
works as it does today. When everyone is comfortable with this change it'd be nice to use it for premain as well.Related Github Issue
https://issues.newrelic.com/browse/NR-84187
Testing
I've referenced a test repo to fully reproduce the issue. There are some unit tests for changes.
Checks
[] Are your contributions backwards compatible with relevant frameworks and APIs?
[ ] Does your code contain any breaking changes? Please describe.
[ ] Does your code introduce any new dependencies? Please describe.