/** * generates the message that will be displayed to the client. The message also contains the stack trace. * * @return verbose error message */ public String getVerboseMessage() { return getVerboseMessage(true); }
public static QueryProfile.Builder addError(UserException ex, QueryProfile.Builder profileBuilder) { if (ex != null) { profileBuilder.setError(ex.getMessage()) .setVerboseError(ex.getVerboseMessage(false)) .setErrorId(ex.getErrorId()); if (ex.getErrorLocation() != null) { profileBuilder.setErrorNode(ex.getErrorLocation()); } } return profileBuilder; } }
@Test public void convertExceptionToFailureInfo() { // Fake logger to not pollute logs org.slf4j.Logger logger = mock(org.slf4j.Logger.class); SqlParseException parseException = new SqlParseException("test message", new SqlParserPos(7, 42, 13, 57), null, null, null); UserException userException = SqlExceptionHelper.parseError("SELECT FOO", parseException) .build(logger); String verboseError = userException.getVerboseMessage(false); JobFailureInfo jobFailureInfo = JobsServiceUtil.toFailureInfo(verboseError); assertEquals(JobFailureInfo.Type.PARSE, jobFailureInfo.getType()); assertEquals(1, jobFailureInfo.getErrorsList().size()); JobFailureInfo.Error error = jobFailureInfo.getErrorsList().get(0); assertEquals("test message", error.getMessage()); assertEquals(7, (int) error.getStartLine()); assertEquals(42, (int) error.getStartColumn()); assertEquals(13, (int) error.getEndLine()); assertEquals(57, (int) error.getEndColumn()); } }
/** * 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(); }