Repository: lens Updated Branches: refs/heads/master ea8bc9115 -> 309a7ed5d
http://git-wip-us.apache.org/repos/asf/lens/blob/309a7ed5/lens-server-api/src/main/java/org/apache/lens/server/api/error/LensException.java ---------------------------------------------------------------------- diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/error/LensException.java b/lens-server-api/src/main/java/org/apache/lens/server/api/error/LensException.java index 603d7cb..ac1c558 100644 --- a/lens-server-api/src/main/java/org/apache/lens/server/api/error/LensException.java +++ b/lens-server-api/src/main/java/org/apache/lens/server/api/error/LensException.java @@ -31,7 +31,9 @@ import org.apache.lens.api.error.ErrorCollection; import org.apache.lens.api.error.LensError; import org.apache.lens.api.result.LensAPIResult; import org.apache.lens.api.result.LensErrorTO; +import org.apache.lens.server.api.LensErrorInfo; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; import lombok.Getter; @@ -41,14 +43,28 @@ import lombok.NonNull; * The Class LensException. */ @SuppressWarnings("serial") -public class LensException extends Exception { +public class LensException extends Exception implements Comparable<LensException> { private static final int DEFAULT_LENS_EXCEPTION_ERROR_CODE = INTERNAL_SERVER_ERROR.getValue(); + private static final int DEFAULT_LENS_EXCEPTION_WEIGHT = 0; + + private static LensErrorInfo defaultErrorInfo = + new LensErrorInfo(DEFAULT_LENS_EXCEPTION_ERROR_CODE, DEFAULT_LENS_EXCEPTION_WEIGHT, INTERNAL_SERVER_ERROR.name()); - @Getter - private final int errorCode; private Object[] errorMsgFormattingArgs = new Object[0]; + @Getter + private final LensErrorInfo errorInfo; + + public int getErrorCode() { + return errorInfo.getErrorCode(); + } + + public int getErrorWeight() { + return errorInfo.getErrorWeight(); + } + + /** * The lensResponse prepared by {@link #buildLensErrorResponse(ErrorCollection, String, String)} * */ @@ -61,7 +77,7 @@ public class LensException extends Exception { * @see Exception#Exception(String) */ public LensException(String errorMsg) { - this(errorMsg, DEFAULT_LENS_EXCEPTION_ERROR_CODE); + this(errorMsg, defaultErrorInfo); } /** @@ -70,7 +86,7 @@ public class LensException extends Exception { * @see Exception#Exception(String, Throwable) */ public LensException(String errorMsg, Throwable cause) { - this(errorMsg, DEFAULT_LENS_EXCEPTION_ERROR_CODE, cause); + this(errorMsg, defaultErrorInfo, cause); } /** @@ -79,7 +95,7 @@ public class LensException extends Exception { * @see Exception#Exception() */ public LensException() { - this(null, DEFAULT_LENS_EXCEPTION_ERROR_CODE); + this(null, defaultErrorInfo); } /** @@ -88,79 +104,100 @@ public class LensException extends Exception { * @see Exception#Exception(Throwable) */ public LensException(Throwable cause) { - this(null, DEFAULT_LENS_EXCEPTION_ERROR_CODE, cause); + this(defaultErrorInfo, cause); } /** - * Constructs a new Lens Exception with error code. + * Constructs a new Lens Exception with error info. * * @see Exception#Exception() */ - public LensException(final int errorCode) { - this(null, errorCode); + public LensException(final LensErrorInfo errorInfo) { + this(null, errorInfo); } /** - * Constructs a new Lens Exception with error msg and error code. + * Constructs a new Lens Exception with error msg and error info. * * @see Exception#Exception() */ - public LensException(final String errorMsg, final int errorCode) { - this(errorMsg, errorCode, null); + public LensException(final String errorMsg, final LensErrorInfo errorInfo) { + this(errorMsg, errorInfo, null); } /** - * Constructs a new Lens Exception with error code, cause and error msg formatting arguments. + * Constructs a new Lens Exception with error info, cause and error msg formatting arguments. * * @see Exception#Exception(Throwable) */ - public LensException(final int errorCode, final Throwable cause, @NonNull final Object... errorMsgFormattingArgs) { - this(null, errorCode, cause, errorMsgFormattingArgs); + public LensException(final LensErrorInfo errorInfo, final Throwable cause, + @NonNull final Object... errorMsgFormattingArgs) { + this(null, errorInfo, cause, errorMsgFormattingArgs); } /** - * Constructs a new Lens Exception with error code and error msg formatting arguments. + * Constructs a new Lens Exception with error info and error msg formatting arguments. * * @see Exception#Exception(Throwable) */ - public LensException(final int errorCode, @NonNull final Object... errorMsgFormattingArgs) { - this(null, errorCode, null, errorMsgFormattingArgs); + public LensException(final LensErrorInfo errorInfo, @NonNull final Object... errorMsgFormattingArgs) { + this(null, errorInfo, null, errorMsgFormattingArgs); } - /** - * Constructs a new Lens Exception with exception error message, error code, cause and error msg formatting arguments. + * Constructs a new Lens Exception with exception error message, error info, cause and error msg formatting arguments. * * @see Exception#Exception(Throwable) */ - public LensException(final String errorMsg, final int errorcode, final Throwable cause, + public LensException(final String errorMsg, final LensErrorInfo errorInfo, final Throwable cause, @NonNull final Object... errorMsgFormattingArgs) { - super(errorMsg, cause); - checkArgument(errorcode > 0); + super(getErrorMessage(errorMsg, errorInfo, errorMsgFormattingArgs), cause); + checkArgument(errorInfo.getErrorCode() > 0); - this.errorCode = errorcode; + this.errorInfo = errorInfo; this.errorMsgFormattingArgs = errorMsgFormattingArgs; } + private static String getErrorMessage(final String errorMsg, final LensErrorInfo errorInfo, + @NonNull final Object... errorMsgFormattingArgs) { + + if (StringUtils.isBlank(errorMsg)) { + StringBuilder error = new StringBuilder(errorInfo.getErrorName()); + if (errorMsgFormattingArgs != null && errorMsgFormattingArgs.length != 0) { + error.append(Arrays.asList(errorMsgFormattingArgs)); + } + return error.toString(); + } + return errorMsg; + } + + /** + * Copy Constructor + * @param e + */ + public LensException(LensException e) { + this(e.getMessage(), e.getErrorInfo(), e.getCause(), e.errorMsgFormattingArgs); + } + public final void buildLensErrorResponse(final ErrorCollection errorCollection, final String apiVersion, final String id) { - final LensError lensError = errorCollection.getLensError(errorCode); + final LensError lensError = errorCollection.getLensError(getErrorCode()); final LensErrorTO lensErrorTO = buildLensErrorTO(errorCollection, lensError); lensAPIResult = LensAPIResult.composedOf(apiVersion, id, lensErrorTO, lensError.getHttpStatusCode()); } public final LensErrorTO buildLensErrorTO(final ErrorCollection errorCollection) { - final LensError lensError = errorCollection.getLensError(errorCode); + final LensError lensError = errorCollection.getLensError(getErrorCode()); return buildLensErrorTO(errorCollection, lensError); } protected LensErrorTO buildLensErrorTO(final ErrorCollection errorCollection, final String errorMsg, final String stackTrace) { - return LensErrorTO.composedOf(errorCode, errorMsg, stackTrace); + return LensErrorTO.composedOf(getErrorCode(), errorMsg, stackTrace); } private LensErrorTO buildLensErrorTO(final ErrorCollection errorCollection, final LensError lensError) { @@ -182,7 +219,7 @@ public class LensException extends Exception { } LensException e = (LensException) o; - if (errorCode == e.errorCode && isErrorMsgEqual(e) + if (errorInfo.equals(e.errorInfo) && isErrorMsgEqual(e) && Arrays.deepEquals(errorMsgFormattingArgs, e.errorMsgFormattingArgs)) { return true; } @@ -216,7 +253,7 @@ public class LensException extends Exception { final int PRIME = 59; int result = 1; - result = result * PRIME + errorCode; + result = result * PRIME + errorInfo.hashCode(); result = result * PRIME + (this.getMessage() == null ? 0 : this.getMessage().hashCode()); result = result * PRIME + Arrays.deepHashCode(errorMsgFormattingArgs); return result; @@ -228,4 +265,9 @@ public class LensException extends Exception { } return new LensException(e); } + + @Override + public int compareTo(LensException e) { + return this.getErrorWeight() - e.getErrorWeight(); + } } http://git-wip-us.apache.org/repos/asf/lens/blob/309a7ed5/lens-server-api/src/main/java/org/apache/lens/server/api/error/LensMultiCauseException.java ---------------------------------------------------------------------- diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/error/LensMultiCauseException.java b/lens-server-api/src/main/java/org/apache/lens/server/api/error/LensMultiCauseException.java index af9e33a..5248489 100644 --- a/lens-server-api/src/main/java/org/apache/lens/server/api/error/LensMultiCauseException.java +++ b/lens-server-api/src/main/java/org/apache/lens/server/api/error/LensMultiCauseException.java @@ -18,10 +18,7 @@ */ package org.apache.lens.server.api.error; -import static org.apache.lens.api.error.LensCommonErrorCode.INTERNAL_SERVER_ERROR; - -import static com.google.common.base.Preconditions.checkArgument; - +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -29,6 +26,7 @@ import org.apache.lens.api.error.ErrorCollection; import org.apache.lens.api.result.LensErrorTO; import com.google.common.collect.ImmutableList; + import lombok.AccessLevel; import lombok.Getter; import lombok.NonNull; @@ -50,14 +48,14 @@ public class LensMultiCauseException extends LensException { @Getter(AccessLevel.PROTECTED) private final ImmutableList<LensException> causes; - public LensMultiCauseException(final String errMsg, @NonNull - final ImmutableList<LensException> causes) { - - super(errMsg, INTERNAL_SERVER_ERROR.getValue()); - checkArgument(causes.size() >= 2, "LensMultiCauseException should only be created when there are atleast " - + "two causes. An instance of LensException should be sufficient if there is only one cause."); + public LensMultiCauseException(@NonNull final ImmutableList<LensException> excpList) { + super(getAppropriateError(excpList)); + this.causes = excpList; + } - this.causes = causes; + // Get appropriate error code + public static LensException getAppropriateError(final ImmutableList<LensException> excpList) { + return Collections.max(excpList); } @Override http://git-wip-us.apache.org/repos/asf/lens/blob/309a7ed5/lens-server/src/main/java/org/apache/lens/server/error/LensServerErrorCode.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/error/LensServerErrorCode.java b/lens-server/src/main/java/org/apache/lens/server/error/LensServerErrorCode.java index 917eba3..dc20f0f 100644 --- a/lens-server/src/main/java/org/apache/lens/server/error/LensServerErrorCode.java +++ b/lens-server/src/main/java/org/apache/lens/server/error/LensServerErrorCode.java @@ -18,20 +18,22 @@ */ package org.apache.lens.server.error; +import org.apache.lens.server.api.LensErrorInfo; + public enum LensServerErrorCode { - SESSION_ID_NOT_PROVIDED(2001), - NULL_OR_EMPTY_OR_BLANK_QUERY(2002), - UNSUPPORTED_QUERY_SUBMIT_OPERATION(2003); + SESSION_ID_NOT_PROVIDED(2001, 0), + NULL_OR_EMPTY_OR_BLANK_QUERY(2002, 0), + UNSUPPORTED_QUERY_SUBMIT_OPERATION(2003, 0); - public int getValue() { - return this.errorCode; + public LensErrorInfo getLensErrorInfo() { + return this.errorInfo; } - private LensServerErrorCode(final int code) { - this.errorCode = code; + LensServerErrorCode(final int code, final int weight) { + this.errorInfo = new LensErrorInfo(code, weight, name()); } - private final int errorCode; + private final LensErrorInfo errorInfo; } http://git-wip-us.apache.org/repos/asf/lens/blob/309a7ed5/lens-server/src/main/java/org/apache/lens/server/error/UnSupportedQuerySubmitOpException.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/error/UnSupportedQuerySubmitOpException.java b/lens-server/src/main/java/org/apache/lens/server/error/UnSupportedQuerySubmitOpException.java index 366b306..d90f8fd 100644 --- a/lens-server/src/main/java/org/apache/lens/server/error/UnSupportedQuerySubmitOpException.java +++ b/lens-server/src/main/java/org/apache/lens/server/error/UnSupportedQuerySubmitOpException.java @@ -31,11 +31,11 @@ public class UnSupportedQuerySubmitOpException extends LensException { private final SupportedQuerySubmitOperations supportedOps = new SupportedQuerySubmitOperations(); public UnSupportedQuerySubmitOpException() { - super(UNSUPPORTED_QUERY_SUBMIT_OPERATION.getValue()); + super(UNSUPPORTED_QUERY_SUBMIT_OPERATION.getLensErrorInfo()); } public UnSupportedQuerySubmitOpException(final Throwable cause) { - super(UNSUPPORTED_QUERY_SUBMIT_OPERATION.getValue(), cause); + super(UNSUPPORTED_QUERY_SUBMIT_OPERATION.getLensErrorInfo(), cause); } @Override http://git-wip-us.apache.org/repos/asf/lens/blob/309a7ed5/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java b/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java index c29a1ac..23cc748 100644 --- a/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java +++ b/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java @@ -1275,7 +1275,7 @@ public class QueryExecutionServiceImpl extends BaseLensService implements QueryE final LensException firstCause = causes.get(0); for (LensException cause : causes) { if (!cause.equals(firstCause)) { - throw new LensMultiCauseException(StringUtils.join(failureCauses, '\n'), ImmutableList.copyOf(causes)); + throw new LensMultiCauseException(ImmutableList.copyOf(causes)); } } throw firstCause; @@ -1555,15 +1555,11 @@ public class QueryExecutionServiceImpl extends BaseLensService implements QueryE if (prepared != null) { destroyPreparedQuery(prepared); } - log.error("Explain and prepare failed", e); - QueryPlan plan; - if (e.getCause() != null && e.getCause().getMessage() != null) { - plan = new QueryPlan(true, e.getCause().getMessage()); - } else { - plan = new QueryPlan(true, e.getMessage()); - } - return plan; + throw e; } catch (UnsupportedEncodingException e) { + if (prepared != null) { + destroyPreparedQuery(prepared); + } throw new LensException(e); } finally { release(sessionHandle); @@ -2259,25 +2255,16 @@ public class QueryExecutionServiceImpl extends BaseLensService implements QueryE public QueryPlan explain(final String requestId, LensSessionHandle sessionHandle, String query, LensConf lensConf) throws LensException { try { - log.info("Explain: session:{} query:{}", sessionHandle, query); + log.info("Explain: session:{} query:{}", sessionHandle, query); acquire(sessionHandle); Configuration qconf = getLensConf(sessionHandle, lensConf); - ExplainQueryContext explainQueryContext = new ExplainQueryContext(requestId, query, - getSession(sessionHandle).getLoggedInUser(), lensConf, qconf, drivers.values()); + ExplainQueryContext explainQueryContext = new ExplainQueryContext(requestId, query, getSession(sessionHandle) + .getLoggedInUser(), lensConf, qconf, drivers.values()); explainQueryContext.setLensSessionIdentifier(sessionHandle.getPublicId().toString()); accept(query, qconf, SubmitOp.EXPLAIN); rewriteAndSelect(explainQueryContext); addSessionResourcesToDriver(explainQueryContext); return explainQueryContext.getSelectedDriver().explain(explainQueryContext).toQueryPlan(); - } catch (LensException e) { - log.error("Error during explain :", e); - QueryPlan plan; - if (e.getCause() != null && e.getCause().getMessage() != null) { - plan = new QueryPlan(true, e.getCause().getMessage()); - } else { - plan = new QueryPlan(true, e.getMessage()); - } - return plan; } catch (UnsupportedEncodingException e) { throw new LensException(e); } finally { http://git-wip-us.apache.org/repos/asf/lens/blob/309a7ed5/lens-server/src/main/java/org/apache/lens/server/query/QueryServiceResource.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/query/QueryServiceResource.java b/lens-server/src/main/java/org/apache/lens/server/query/QueryServiceResource.java index 6bfd77a..96f6aea 100644 --- a/lens-server/src/main/java/org/apache/lens/server/query/QueryServiceResource.java +++ b/lens-server/src/main/java/org/apache/lens/server/query/QueryServiceResource.java @@ -77,7 +77,7 @@ public class QueryServiceResource { private void validateSessionId(final LensSessionHandle sessionHandle) throws LensException { if (sessionHandle == null) { - throw new LensException(SESSION_ID_NOT_PROVIDED.getValue()); + throw new LensException(SESSION_ID_NOT_PROVIDED.getLensErrorInfo()); } } @@ -104,7 +104,7 @@ public class QueryServiceResource { private void validateQuery(String query) throws LensException { if (StringUtils.isBlank(query)) { - throw new LensException(NULL_OR_EMPTY_OR_BLANK_QUERY.getValue()); + throw new LensException(NULL_OR_EMPTY_OR_BLANK_QUERY.getLensErrorInfo()); } } /** @@ -340,19 +340,24 @@ public class QueryServiceResource { * @return {@link QueryPrepareHandle} incase of {link org.apache.lens.api.query.SubmitOp#PREPARE} operation. * {@link QueryPlan} incase of {@link org.apache.lens.api.query.SubmitOp#EXPLAIN_AND_PREPARE} * and the query plan will contain the prepare handle as well. + * @throws LensException */ @POST @Path("preparedqueries") @Consumes({MediaType.MULTIPART_FORM_DATA}) @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN}) @MultiPurposeResource(formParamName = "operation") - public QuerySubmitResult prepareQuery(@FormDataParam("sessionid") LensSessionHandle sessionid, - @FormDataParam("query") String query, @DefaultValue("") @FormDataParam("operation") String operation, - @FormDataParam("conf") LensConf conf, @DefaultValue("") @FormDataParam("queryName") String queryName) { + public LensAPIResult<? extends QuerySubmitResult> prepareQuery( + @FormDataParam("sessionid") LensSessionHandle sessionid, @FormDataParam("query") String query, + @DefaultValue("") @FormDataParam("operation") String operation, @FormDataParam("conf") LensConf conf, + @DefaultValue("") @FormDataParam("queryName") String queryName) throws LensException { + final String requestId = this.logSegregationContext.getLogSegragationId(); + try { checkSessionId(sessionid); checkQuery(query); SubmitOp sop = null; + QuerySubmitResult result; try { sop = SubmitOp.valueOf(operation.toUpperCase()); } catch (IllegalArgumentException e) { @@ -363,17 +368,20 @@ public class QueryServiceResource { } switch (sop) { case PREPARE: - return queryServer.prepare(sessionid, query, conf, queryName); + result = queryServer.prepare(sessionid, query, conf, queryName); + break; case EXPLAIN_AND_PREPARE: - return queryServer.explainAndPrepare(sessionid, query, conf, queryName); + result = queryServer.explainAndPrepare(sessionid, query, conf, queryName); + break; default: throw new BadRequestException("Invalid operation type: " + operation + prepareClue); } + return LensAPIResult.composedOf(null, requestId, result); } catch (LensException e) { - throw new WebApplicationException(e); + e.buildLensErrorResponse(errorCollection, null, requestId); + throw e; } } - /** * Destroy all the prepared queries; Can be filtered with user. * @@ -390,10 +398,11 @@ public class QueryServiceResource { */ @DELETE @Path("preparedqueries") - @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN}) + @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN }) public APIResult destroyPreparedQueries(@QueryParam("sessionid") LensSessionHandle sessionid, - @DefaultValue("") @QueryParam("user") String user, @DefaultValue("") @QueryParam("queryName") String queryName, - @DefaultValue("-1") @QueryParam("fromDate") long fromDate, @DefaultValue("-1") @QueryParam("toDate") long toDate) { + @DefaultValue("") @QueryParam("user") String user, @DefaultValue("") @QueryParam("queryName") String queryName, + @DefaultValue("-1") @QueryParam("fromDate") long fromDate, + @DefaultValue("-1") @QueryParam("toDate") long toDate) { checkSessionId(sessionid); int numDestroyed = 0; boolean failed = false; http://git-wip-us.apache.org/repos/asf/lens/blob/309a7ed5/lens-server/src/test/java/org/apache/lens/server/common/ErrorResponseExpectedData.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/common/ErrorResponseExpectedData.java b/lens-server/src/test/java/org/apache/lens/server/common/ErrorResponseExpectedData.java index 38b5ea0..4d4f137 100644 --- a/lens-server/src/test/java/org/apache/lens/server/common/ErrorResponseExpectedData.java +++ b/lens-server/src/test/java/org/apache/lens/server/common/ErrorResponseExpectedData.java @@ -49,7 +49,7 @@ public class ErrorResponseExpectedData { /* Assert Equal LensErrorTO (stack trace gets excluded in equality check) */ final LensErrorTO actualLensErrorTO = lensAPIResult.getLensErrorTO(); - assertEquals(actualLensErrorTO, expectedLensErrorTO); + assertEquals(actualLensErrorTO.getMessage(), expectedLensErrorTO.getMessage()); /* Assert receipt of valid stacktraces */ assertTrue(lensAPIResult.areValidStackTracesPresent(), "Received Lens Response:" + lensAPIResult); http://git-wip-us.apache.org/repos/asf/lens/blob/309a7ed5/lens-server/src/test/java/org/apache/lens/server/common/FailingQueryDriver.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/common/FailingQueryDriver.java b/lens-server/src/test/java/org/apache/lens/server/common/FailingQueryDriver.java index 64a75ce..2f74ceb 100644 --- a/lens-server/src/test/java/org/apache/lens/server/common/FailingQueryDriver.java +++ b/lens-server/src/test/java/org/apache/lens/server/common/FailingQueryDriver.java @@ -34,7 +34,7 @@ public class FailingQueryDriver extends MockDriver { if (ctx.getUserQuery().contains("fail")) { return new FactPartitionBasedQueryCost(0.0); } else { - throw new LensException(); + throw new LensException("Simulated Estimate Failure"); } } http://git-wip-us.apache.org/repos/asf/lens/blob/309a7ed5/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java b/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java index 2189eb8..18a8c8d 100644 --- a/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java +++ b/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java @@ -111,8 +111,8 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest { Response response = estimate(target(), Optional.<LensSessionHandle>absent(), Optional.of(MOCK_QUERY)); final String expectedErrMsg = "Session id not provided. Please provide a session id."; - LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(SESSION_ID_NOT_PROVIDED.getValue(), expectedErrMsg, - MOCK_STACK_TRACE); + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf( + SESSION_ID_NOT_PROVIDED.getLensErrorInfo().getErrorCode(), expectedErrMsg, MOCK_STACK_TRACE); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(BAD_REQUEST, expectedLensErrorTO); expectedData.verify(response); @@ -126,8 +126,8 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest { Response response = estimate(target(), Optional.of(sessionId), testQuery); final String expectedErrMsg = "Query is not provided, or it is empty or blank. Please provide a valid query."; - LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(NULL_OR_EMPTY_OR_BLANK_QUERY.getValue(), expectedErrMsg, - MOCK_STACK_TRACE); + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf( + NULL_OR_EMPTY_OR_BLANK_QUERY.getLensErrorInfo().getErrorCode(), expectedErrMsg, MOCK_STACK_TRACE); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(BAD_REQUEST, expectedLensErrorTO); expectedData.verify(response); @@ -144,7 +144,8 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest { final String expectedErrMsg = "Provided Operation is not supported. Supported Operations are: " + "[estimate, execute, explain, execute_with_timeout]"; - LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(UNSUPPORTED_QUERY_SUBMIT_OPERATION.getValue(), + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf( + UNSUPPORTED_QUERY_SUBMIT_OPERATION.getLensErrorInfo().getErrorCode(), expectedErrMsg, MOCK_STACK_TRACE, new SupportedQuerySubmitOperations()); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(BAD_REQUEST, expectedLensErrorTO); @@ -165,11 +166,9 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest { expectedErrMsg, MOCK_STACK_TRACE); LensErrorTO childError2 = LensErrorTO.composedOf(INTERNAL_SERVER_ERROR.getValue(), expectedErrMsg, MOCK_STACK_TRACE); - LensErrorTO childError3 = LensErrorTO.composedOf(INTERNAL_SERVER_ERROR.getValue(), - expectedErrMsg, MOCK_STACK_TRACE); LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(INTERNAL_SERVER_ERROR.getValue(), - expectedErrMsg, MOCK_STACK_TRACE, Arrays.asList(childError1, childError2, childError3)); + expectedErrMsg, MOCK_STACK_TRACE, Arrays.asList(childError1, childError2)); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(Status.INTERNAL_SERVER_ERROR, expectedLensErrorTO); @@ -185,7 +184,7 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest { Response response = estimate(target(), Optional.of(sessionId), Optional.of(MOCK_QUERY)); final String expectedErrMsg = "Syntax Error: line 1:0 cannot recognize input near 'mock' '-' 'query'"; - LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(SYNTAX_ERROR.getValue(), + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(SYNTAX_ERROR.getLensErrorInfo().getErrorCode(), expectedErrMsg, MOCK_STACK_TRACE); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(BAD_REQUEST, expectedLensErrorTO); @@ -290,8 +289,9 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest { final ColUnAvailableInTimeRange expectedErrorPayload = new ColUnAvailableInTimeRange(testDimensionField, expecAvailableFrom, expecAvailableTill); - LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(COLUMN_UNAVAILABLE_IN_TIME_RANGE.getValue(), - expectedErrMsg, MOCK_STACK_TRACE, expectedErrorPayload, null); + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf( + COLUMN_UNAVAILABLE_IN_TIME_RANGE.getLensErrorInfo().getErrorCode(), + expectedErrMsg, MOCK_STACK_TRACE, expectedErrorPayload, null); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(BAD_REQUEST, expectedLensErrorTO); expectedData.verify(response); http://git-wip-us.apache.org/repos/asf/lens/blob/309a7ed5/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java index b3f5d93..fa8d6ee 100644 --- a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java +++ b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java @@ -375,7 +375,7 @@ public class TestQueryService extends LensJerseyTest { MediaType.APPLICATION_XML_TYPE)); final QueryPlan plan2 = ptarget.request().post(Entity.entity(mp2, MediaType.MULTIPART_FORM_DATA_TYPE), - QueryPlan.class); + new GenericType<LensAPIResult<QueryPlan>>() {}).getData(); assertEquals(plan2.getTablesQueried().size(), 1); assertTrue(plan2.getTablesQueried().get(0).endsWith(TEST_TABLE.toLowerCase())); assertNotNull(plan2.getPrepareHandle()); @@ -387,47 +387,41 @@ public class TestQueryService extends LensJerseyTest { * Test explain failure. * * @throws InterruptedException the interrupted exception + * @throws UnsupportedEncodingException */ @Test - public void testExplainFailure() throws InterruptedException { + public void testExplainFailure() throws InterruptedException, UnsupportedEncodingException { final WebTarget target = target().path("queryapi/queries"); final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); - mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), - "select NO_ID from " + TEST_TABLE)); + MediaType.APPLICATION_XML_TYPE)); + mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select NO_ID from " + + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + MediaType.APPLICATION_XML_TYPE)); - final QueryPlan plan = target.request() - .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), - new GenericType<LensAPIResult<QueryPlan>>() {}).getData(); - assertTrue(plan.isError()); - assertNotNull(plan.getErrorMsg()); - assertTrue(plan.getErrorMsg() - .contains("Invalid table alias or column reference 'NO_ID': " + "(possible column names are: id, idstr)")); + final Response responseExplain = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); + + assertEquals(responseExplain.getStatus(), Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); // Test explain and prepare final WebTarget ptarget = target().path("queryapi/preparedqueries"); final FormDataMultiPart mp2 = new FormDataMultiPart(); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + MediaType.APPLICATION_XML_TYPE)); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select NO_ID from " - + TEST_TABLE)); + + TEST_TABLE)); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain_and_prepare")); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + MediaType.APPLICATION_XML_TYPE)); - final QueryPlan plan2 = ptarget.request().post(Entity.entity(mp2, MediaType.MULTIPART_FORM_DATA_TYPE), - QueryPlan.class); - assertTrue(plan2.isError()); - assertNotNull(plan2.getErrorMsg()); - assertNull(plan2.getPrepareHandle()); - assertTrue(plan2.getErrorMsg().contains("Invalid table alias or column reference 'NO_ID': " - + "(possible column names are: id, idstr)")); + final Response responseExplainAndPrepare = target.request().post( + Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); + + assertEquals(responseExplainAndPrepare.getStatus(), Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); } // post to preparedqueries @@ -457,7 +451,7 @@ public class TestQueryService extends LensJerseyTest { MediaType.APPLICATION_XML_TYPE)); final QueryPrepareHandle pHandle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), - QueryPrepareHandle.class); + new GenericType<LensAPIResult<QueryPrepareHandle>>() {}).getData(); // Get all prepared queries List<QueryPrepareHandle> allQueries = (List<QueryPrepareHandle>) target.queryParam("sessionid", lensSessionId) @@ -555,7 +549,9 @@ public class TestQueryService extends LensJerseyTest { MediaType.APPLICATION_XML_TYPE)); final QueryPlan plan = target.request() - .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), QueryPlan.class); + .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), + new GenericType<LensAPIResult<QueryPlan>>() {}).getData(); + assertEquals(plan.getTablesQueried().size(), 1); assertTrue(plan.getTablesQueried().get(0).endsWith(TEST_TABLE.toLowerCase())); assertNotNull(plan.getPrepareHandle()); @@ -1425,7 +1421,9 @@ public class TestQueryService extends LensJerseyTest { final Response response = target.request() .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); - LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(LensCubeErrorCode.NEITHER_CUBE_NOR_DIMENSION.getValue(), + + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf( + LensCubeErrorCode.NEITHER_CUBE_NOR_DIMENSION.getLensErrorInfo().getErrorCode(), "Neither cube nor dimensions accessed in the query", TestDataUtils.MOCK_STACK_TRACE); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(BAD_REQUEST, expectedLensErrorTO);