use of org.corfudb.infrastructure.ManagementServer in project CorfuDB by CorfuDB.
the class QCSMRobject method main.
public static String[] main(String[] args) {
if (args != null && args.length > 0 && args[0].contentEquals("reboot")) {
ManagementServer ms = CorfuServer.getManagementServer();
ms.shutdown();
CorfuServer.addManagementServer();
LogUnitServer ls = CorfuServer.getLogUnitServer();
if (ls != null) {
ls.shutdown();
CorfuServer.addLogUnit();
return replyOk();
} else {
return replyErr("No active log server");
}
}
// Parse the options given, using docopt.
Map<String, Object> opts = new Docopt(USAGE).withVersion(GitRepositoryState.getRepositoryState().describe).parse(args);
// Get a org.corfudb.runtime instance from the options.
String config = (String) opts.get("--config");
String qapp = (String) opts.get("--quickcheck-ap-prefix");
String addressportPrefix = "";
if (qapp != null) {
addressportPrefix = qapp;
}
CorfuRuntime rt;
if (rtMap.get(addressportPrefix + config) == null) {
rt = configureRuntime(opts);
rtMap.putIfAbsent(addressportPrefix + config, rt);
}
rt = (CorfuRuntime) rtMap.get(addressportPrefix + config);
String argz = ((String) opts.get("<args>"));
int arity;
String[] split;
if (argz == null) {
split = new String[0];
arity = 0;
} else {
split = argz.split(",");
if (argz.charAt(argz.length() - 1) == ',') {
arity = split.length + 1;
String[] new_split = new String[arity];
for (int i = 0; i < arity - 1; i++) {
new_split[i] = split[i];
}
new_split[arity - 1] = "";
split = new_split;
} else {
arity = split.length;
}
}
// Attempt to open the object
Class<?> cls;
try {
cls = Class.forName((String) opts.get("<class>"));
} catch (ClassNotFoundException cnfe) {
throw new RuntimeException(cnfe);
}
Object o = rt.getObjectsView().build().setStreamName((String) opts.get("--stream-id")).setType(cls).open();
// Use reflection to find the method...
Method m;
try {
m = Arrays.stream(cls.getDeclaredMethods()).filter(x -> x.getName().equals(opts.get("<method>"))).filter(x -> x.getParameterCount() == arity).findFirst().get();
} catch (NoSuchElementException nsee) {
return replyErr("Method " + opts.get("<method>") + " with " + arity + " arguments not found!");
}
if (m == null) {
return replyErr("Method " + opts.get("<method>") + " with " + arity + " arguments not found!");
}
Object ret;
final int c10 = 10, c50 = 50;
for (int i = 0; i < c10; i++) {
try {
ret = m.invoke(o, split);
} catch (InvocationTargetException e) {
Throwable c = ExceptionUtils.getCause(e);
if (c.getClass() == org.corfudb.runtime.exceptions.NetworkException.class && c.toString().matches(".*Disconnected endpoint.*")) {
// caused by a disconnection with the remote endpoint.
try {
Thread.sleep(c50);
} catch (InterruptedException ie) {
}
;
continue;
} else {
return replyErr("exception", e.getClass().getSimpleName(), "stack: " + ExceptionUtils.getStackTrace(e), "cause: " + ExceptionUtils.getCause(e));
}
} catch (IllegalAccessException e) {
return replyErr("exception", e.getClass().getSimpleName(), "stack: " + ExceptionUtils.getStackTrace(e));
} catch (Exception e) {
return replyErr("Exception on object: " + e, "stack: " + ExceptionUtils.getStackTrace(e), "cause: " + ExceptionUtils.getCause(e));
}
if (ret != null) {
return replyOk(ret.toString());
} else {
return replyOk();
}
}
return replyErr("Exhausted for loop retries");
}
Aggregations