in priam/src/main/java/com/netflix/priam/connection/JMXNodeTool.java [188:255]
private static JMXNodeTool createConnection(final IConfiguration config)
throws JMXConnectionException {
// If Cassandra is started then only start the monitoring
if (!CassandraMonitor.hasCassadraStarted()) {
String exceptionMsg =
"Cannot perform connection to remove jmx agent as Cassandra has not yet started, check back again later";
logger.debug(exceptionMsg);
throw new JMXConnectionException(exceptionMsg);
}
if (tool
!= null) { // lets make sure we properly close any existing (even if it's corrupted)
// connection to the remote jmx agent
try {
tool.close();
} catch (IOException e) {
logger.warn(
"Exception performing house cleaning -- closing current connection to jmx remote agent. Msg: {}",
e.getLocalizedMessage(),
e);
}
}
try {
tool =
new BoundedExponentialRetryCallable<JMXNodeTool>() {
@Override
public JMXNodeTool retriableCall() throws Exception {
JMXNodeTool nodetool;
if ((config.getJmxUsername() == null
|| config.getJmxUsername().isEmpty())
&& (config.getJmxPassword() == null
|| config.getJmxPassword().isEmpty())) {
nodetool = new JMXNodeTool("localhost", config.getJmxPort());
} else {
nodetool =
new JMXNodeTool(
"localhost",
config.getJmxPort(),
config.getJmxUsername(),
config.getJmxPassword());
}
Field fields[] = NodeProbe.class.getDeclaredFields();
for (Field field : fields) {
if (!field.getName().equals("mbeanServerConn")) continue;
field.setAccessible(true);
nodetool.mbeanServerConn =
(MBeanServerConnection) field.get(nodetool);
}
return nodetool;
}
}.call();
} catch (Exception e) {
logger.error(e.getMessage(), e);
throw new JMXConnectionException(e.getMessage());
}
logger.info("Connected to remote jmx agent, will notify interested parties!");
for (INodeToolObserver observer : observers) {
observer.nodeToolHasChanged(tool);
}
return tool;
}