APIClient: Fix error handling if connection to API server fails
Running 'nodetool status' now reports the following if the JMX proxy is not able to connect to an API server: nodetool: Unable to connect to Scylla API server: java.net.ConnectException: Connection refused See 'nodetool help' or 'nodetool help <command>'. instead of the scary-looking: error: javax.ws.rs.ProcessingException (no security manager: RMI class loader disabled) -- StackTrace -- java.lang.ClassNotFoundException: javax.ws.rs.ProcessingException (no security manager: RMI class loader disabled) at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:393) at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:185) at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:637) at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:264) at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:214) That happens because the MBean propagates a 'javax.ws.rs.ProcessingException' to nodetool which does not have it in it's classpath and loading via RMI fails. Fixes #25. Message-Id: <1457697628-31792-1-git-send-email-penberg@scylladb.com>
This commit is contained in:
parent
a38bbfd603
commit
02e0598506
@ -23,6 +23,7 @@ import javax.json.JsonReaderFactory;
|
|||||||
import javax.json.JsonString;
|
import javax.json.JsonString;
|
||||||
import javax.management.openmbean.TabularData;
|
import javax.management.openmbean.TabularData;
|
||||||
import javax.management.openmbean.TabularDataSupport;
|
import javax.management.openmbean.TabularDataSupport;
|
||||||
|
import javax.ws.rs.ProcessingException;
|
||||||
import javax.ws.rs.client.Client;
|
import javax.ws.rs.client.Client;
|
||||||
import javax.ws.rs.client.ClientBuilder;
|
import javax.ws.rs.client.ClientBuilder;
|
||||||
import javax.ws.rs.client.Entity;
|
import javax.ws.rs.client.Entity;
|
||||||
@ -141,27 +142,31 @@ public class APIClient {
|
|||||||
|
|
||||||
public String getRawValue(String string,
|
public String getRawValue(String string,
|
||||||
MultivaluedMap<String, String> queryParams, long duration) {
|
MultivaluedMap<String, String> queryParams, long duration) {
|
||||||
if (string.equals("")) {
|
try {
|
||||||
return "";
|
if (string.equals("")) {
|
||||||
}
|
return "";
|
||||||
String key = getCacheKey(string, queryParams, duration);
|
}
|
||||||
String res = getStringFromCache(key, duration);
|
String key = getCacheKey(string, queryParams, duration);
|
||||||
if (res != null) {
|
String res = getStringFromCache(key, duration);
|
||||||
return res;
|
if (res != null) {
|
||||||
}
|
return res;
|
||||||
Response response = get(string, queryParams).get(Response.class);
|
}
|
||||||
|
Response response = get(string, queryParams).get(Response.class);
|
||||||
|
|
||||||
if (response.getStatus() != Response.Status.OK.getStatusCode() ) {
|
if (response.getStatus() != Response.Status.OK.getStatusCode()) {
|
||||||
// TBD
|
// TBD
|
||||||
// We are currently not caching errors,
|
// We are currently not caching errors,
|
||||||
// it should be reconsider.
|
// it should be reconsider.
|
||||||
throw getException(response.readEntity(String.class));
|
throw getException(response.readEntity(String.class));
|
||||||
|
}
|
||||||
|
res = response.readEntity(String.class);
|
||||||
|
if (duration > 0) {
|
||||||
|
cache.put(key, new CacheEntry(res));
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
} catch (ProcessingException e) {
|
||||||
|
throw new IllegalStateException("Unable to connect to Scylla API server: " + e.getMessage());
|
||||||
}
|
}
|
||||||
res = response.readEntity(String.class);
|
|
||||||
if (duration > 0) {
|
|
||||||
cache.put(key, new CacheEntry(res));
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRawValue(String string,
|
public String getRawValue(String string,
|
||||||
|
Loading…
Reference in New Issue
Block a user