/** * Helper method to create {@link DremioPBError} for client response message. * @param failedFunction Brief description of the failed function. * @param ex Exception thrown * @return */ public static DremioPBError createPBError(final String failedFunction, final Throwable ex) { final String errorId = UUID.randomUUID().toString(); logger.error("Failed to {}. ErrorId: {}", failedFunction, errorId, ex); final DremioPBError.Builder builder = DremioPBError.newBuilder(); builder.setErrorType(ErrorType.SYSTEM); // Metadata requests shouldn't cause any user errors builder.setErrorId(errorId); if (ex.getMessage() != null) { builder.setMessage(ex.getMessage()); } builder.setException(ErrorHelper.getWrapper(ex)); return builder.build(); }
private static ExceptionWrapper.Builder getWrapperBuilder(Throwable ex, boolean includeAllStack) { ExceptionWrapper.Builder ew = ExceptionWrapper.newBuilder(); if(ex.getMessage() != null) { ew.setMessage(ex.getMessage()); } ew.setExceptionClass(ex.getClass().getName()); boolean isHidden = false; StackTraceElement[] stackTrace = ex.getStackTrace(); for(int i = 0; i < stackTrace.length; i++){ StackTraceElement ele = ex.getStackTrace()[i]; if(include(ele, includeAllStack)){ if(isHidden){ isHidden = false; } ew.addStackTrace(getSTWrapper(ele)); }else{ if(!isHidden){ isHidden = true; ew.addStackTrace(getEmptyST()); } } } if(ex.getCause() != null && ex.getCause() != ex){ ew.setCause(getWrapper(ex.getCause())); } return ew; }
/** * returns or creates a DremioPBError object corresponding to this user exception. * * @param verbose should the error object contain the verbose error message ? * @return protobuf error object */ public DremioPBError getOrCreatePBError(final boolean verbose) { final DremioPBError.Builder builder = DremioPBError.newBuilder(); builder.setErrorType(errorType); builder.setErrorId(context.getErrorId()); if (context.getEndpoint() != null) { builder.setEndpoint(context.getEndpoint()); } builder.setMessage(getVerboseMessage()); builder.setOriginalMessage(getOriginalMessage()); if (getCause() != null) { // some unit tests use this information to make sure a specific exception was thrown in the server builder.setException(ErrorHelper.getWrapper(getCause())); } builder.addAllContext(context.getContextAsStrings()); if (rawAdditionalContext != null) { builder.setTypeSpecificContext(rawAdditionalContext); } return builder.build(); }