package water.util;
import water.AutoBuffer;
import water.Freezable;
import water.H2O;
import water.TypeMap;
import java.io.Serializable;
import java.util.Arrays;
/**
* Created by tomas on 3/2/16.
*/
public final class DistributedException extends RuntimeException {
public DistributedException(){truncateStackTrace(true);}
public DistributedException(Throwable cause){ this(cause,true);}
public DistributedException(Throwable cause, boolean keepStackTrace){
super("DistributedException from " + H2O.SELF + ": '" + cause.getMessage() + "'",cause);
truncateStackTrace(keepStackTrace);
}
public DistributedException(String msg, Throwable cause){
super(msg,cause);
try {
truncateStackTrace(true);
}catch(Throwable t) {
// just in case it throws, do nothing, truncating stacktrace not really that important
}
}
public String toString(){return getMessage() + ", caused by " + getCause().toString();}
private void truncateStackTrace(boolean keepStackTrace){
if(keepStackTrace) {
StackTraceElement[] stackTrace = getStackTrace();
int i = 0;
for (; i < stackTrace.length; ++i)
if (stackTrace[i].getFileName() != null && stackTrace[i].getFileName().equals("JettyHTTPD.java"))
break;
setStackTrace(Arrays.copyOf(stackTrace, i));
} else setStackTrace(new StackTraceElement[0]);
}
}