Repository: lens Updated Branches: refs/heads/master 309a7ed5d -> ab74f6ea4
http://git-wip-us.apache.org/repos/asf/lens/blob/fb235faa/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 ac1c558..603d7cb 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,9 +31,7 @@ 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; @@ -43,27 +41,13 @@ import lombok.NonNull; * The Class LensException. */ @SuppressWarnings("serial") -public class LensException extends Exception implements Comparable<LensException> { +public class LensException extends Exception { 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()); - - private Object[] errorMsgFormattingArgs = new Object[0]; @Getter - private final LensErrorInfo errorInfo; - - public int getErrorCode() { - return errorInfo.getErrorCode(); - } - - public int getErrorWeight() { - return errorInfo.getErrorWeight(); - } - + private final int errorCode; + private Object[] errorMsgFormattingArgs = new Object[0]; /** * The lensResponse prepared by {@link #buildLensErrorResponse(ErrorCollection, String, String)} @@ -77,7 +61,7 @@ public class LensException extends Exception implements Comparable<LensException * @see Exception#Exception(String) */ public LensException(String errorMsg) { - this(errorMsg, defaultErrorInfo); + this(errorMsg, DEFAULT_LENS_EXCEPTION_ERROR_CODE); } /** @@ -86,7 +70,7 @@ public class LensException extends Exception implements Comparable<LensException * @see Exception#Exception(String, Throwable) */ public LensException(String errorMsg, Throwable cause) { - this(errorMsg, defaultErrorInfo, cause); + this(errorMsg, DEFAULT_LENS_EXCEPTION_ERROR_CODE, cause); } /** @@ -95,7 +79,7 @@ public class LensException extends Exception implements Comparable<LensException * @see Exception#Exception() */ public LensException() { - this(null, defaultErrorInfo); + this(null, DEFAULT_LENS_EXCEPTION_ERROR_CODE); } /** @@ -104,100 +88,79 @@ public class LensException extends Exception implements Comparable<LensException * @see Exception#Exception(Throwable) */ public LensException(Throwable cause) { - this(defaultErrorInfo, cause); + this(null, DEFAULT_LENS_EXCEPTION_ERROR_CODE, cause); } /** - * Constructs a new Lens Exception with error info. + * Constructs a new Lens Exception with error code. * * @see Exception#Exception() */ - public LensException(final LensErrorInfo errorInfo) { - this(null, errorInfo); + public LensException(final int errorCode) { + this(null, errorCode); } /** - * Constructs a new Lens Exception with error msg and error info. + * Constructs a new Lens Exception with error msg and error code. * * @see Exception#Exception() */ - public LensException(final String errorMsg, final LensErrorInfo errorInfo) { - this(errorMsg, errorInfo, null); + public LensException(final String errorMsg, final int errorCode) { + this(errorMsg, errorCode, null); } /** - * Constructs a new Lens Exception with error info, cause and error msg formatting arguments. + * Constructs a new Lens Exception with error code, cause and error msg formatting arguments. * * @see Exception#Exception(Throwable) */ - public LensException(final LensErrorInfo errorInfo, final Throwable cause, - @NonNull final Object... errorMsgFormattingArgs) { - this(null, errorInfo, cause, errorMsgFormattingArgs); + public LensException(final int errorCode, final Throwable cause, @NonNull final Object... errorMsgFormattingArgs) { + this(null, errorCode, cause, errorMsgFormattingArgs); } /** - * Constructs a new Lens Exception with error info and error msg formatting arguments. + * Constructs a new Lens Exception with error code and error msg formatting arguments. * * @see Exception#Exception(Throwable) */ - public LensException(final LensErrorInfo errorInfo, @NonNull final Object... errorMsgFormattingArgs) { - this(null, errorInfo, null, errorMsgFormattingArgs); + public LensException(final int errorCode, @NonNull final Object... errorMsgFormattingArgs) { + this(null, errorCode, null, errorMsgFormattingArgs); } + /** - * Constructs a new Lens Exception with exception error message, error info, cause and error msg formatting arguments. + * Constructs a new Lens Exception with exception error message, error code, cause and error msg formatting arguments. * * @see Exception#Exception(Throwable) */ - public LensException(final String errorMsg, final LensErrorInfo errorInfo, final Throwable cause, + public LensException(final String errorMsg, final int errorcode, final Throwable cause, @NonNull final Object... errorMsgFormattingArgs) { - super(getErrorMessage(errorMsg, errorInfo, errorMsgFormattingArgs), cause); - checkArgument(errorInfo.getErrorCode() > 0); + super(errorMsg, cause); + checkArgument(errorcode > 0); - this.errorInfo = errorInfo; + this.errorCode = errorcode; 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(getErrorCode()); + final LensError lensError = errorCollection.getLensError(errorCode); 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(getErrorCode()); + final LensError lensError = errorCollection.getLensError(errorCode); return buildLensErrorTO(errorCollection, lensError); } protected LensErrorTO buildLensErrorTO(final ErrorCollection errorCollection, final String errorMsg, final String stackTrace) { - return LensErrorTO.composedOf(getErrorCode(), errorMsg, stackTrace); + return LensErrorTO.composedOf(errorCode, errorMsg, stackTrace); } private LensErrorTO buildLensErrorTO(final ErrorCollection errorCollection, final LensError lensError) { @@ -219,7 +182,7 @@ public class LensException extends Exception implements Comparable<LensException } LensException e = (LensException) o; - if (errorInfo.equals(e.errorInfo) && isErrorMsgEqual(e) + if (errorCode == e.errorCode && isErrorMsgEqual(e) && Arrays.deepEquals(errorMsgFormattingArgs, e.errorMsgFormattingArgs)) { return true; } @@ -253,7 +216,7 @@ public class LensException extends Exception implements Comparable<LensException final int PRIME = 59; int result = 1; - result = result * PRIME + errorInfo.hashCode(); + result = result * PRIME + errorCode; result = result * PRIME + (this.getMessage() == null ? 0 : this.getMessage().hashCode()); result = result * PRIME + Arrays.deepHashCode(errorMsgFormattingArgs); return result; @@ -265,9 +228,4 @@ public class LensException extends Exception implements Comparable<LensException } 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/fb235faa/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 5248489..af9e33a 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,7 +18,10 @@ */ package org.apache.lens.server.api.error; -import java.util.Collections; +import static org.apache.lens.api.error.LensCommonErrorCode.INTERNAL_SERVER_ERROR; + +import static com.google.common.base.Preconditions.checkArgument; + import java.util.LinkedList; import java.util.List; @@ -26,7 +29,6 @@ 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; @@ -48,14 +50,14 @@ public class LensMultiCauseException extends LensException { @Getter(AccessLevel.PROTECTED) private final ImmutableList<LensException> causes; - public LensMultiCauseException(@NonNull final ImmutableList<LensException> excpList) { - super(getAppropriateError(excpList)); - this.causes = excpList; - } + 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."); - // Get appropriate error code - public static LensException getAppropriateError(final ImmutableList<LensException> excpList) { - return Collections.max(excpList); + this.causes = causes; } @Override http://git-wip-us.apache.org/repos/asf/lens/blob/fb235faa/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 dc20f0f..917eba3 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,22 +18,20 @@ */ package org.apache.lens.server.error; -import org.apache.lens.server.api.LensErrorInfo; - public enum LensServerErrorCode { - SESSION_ID_NOT_PROVIDED(2001, 0), - NULL_OR_EMPTY_OR_BLANK_QUERY(2002, 0), - UNSUPPORTED_QUERY_SUBMIT_OPERATION(2003, 0); + SESSION_ID_NOT_PROVIDED(2001), + NULL_OR_EMPTY_OR_BLANK_QUERY(2002), + UNSUPPORTED_QUERY_SUBMIT_OPERATION(2003); - public LensErrorInfo getLensErrorInfo() { - return this.errorInfo; + public int getValue() { + return this.errorCode; } - LensServerErrorCode(final int code, final int weight) { - this.errorInfo = new LensErrorInfo(code, weight, name()); + private LensServerErrorCode(final int code) { + this.errorCode = code; } - private final LensErrorInfo errorInfo; + private final int errorCode; } http://git-wip-us.apache.org/repos/asf/lens/blob/fb235faa/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 d90f8fd..366b306 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.getLensErrorInfo()); + super(UNSUPPORTED_QUERY_SUBMIT_OPERATION.getValue()); } public UnSupportedQuerySubmitOpException(final Throwable cause) { - super(UNSUPPORTED_QUERY_SUBMIT_OPERATION.getLensErrorInfo(), cause); + super(UNSUPPORTED_QUERY_SUBMIT_OPERATION.getValue(), cause); } @Override http://git-wip-us.apache.org/repos/asf/lens/blob/fb235faa/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 23cc748..c29a1ac 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(ImmutableList.copyOf(causes)); + throw new LensMultiCauseException(StringUtils.join(failureCauses, '\n'), ImmutableList.copyOf(causes)); } } throw firstCause; @@ -1555,11 +1555,15 @@ public class QueryExecutionServiceImpl extends BaseLensService implements QueryE if (prepared != null) { destroyPreparedQuery(prepared); } - throw e; - } catch (UnsupportedEncodingException e) { - 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; + } catch (UnsupportedEncodingException e) { throw new LensException(e); } finally { release(sessionHandle); @@ -2255,16 +2259,25 @@ 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/fb235faa/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 96f6aea..6bfd77a 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.getLensErrorInfo()); + throw new LensException(SESSION_ID_NOT_PROVIDED.getValue()); } } @@ -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.getLensErrorInfo()); + throw new LensException(NULL_OR_EMPTY_OR_BLANK_QUERY.getValue()); } } /** @@ -340,24 +340,19 @@ 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 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(); - + 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) { try { checkSessionId(sessionid); checkQuery(query); SubmitOp sop = null; - QuerySubmitResult result; try { sop = SubmitOp.valueOf(operation.toUpperCase()); } catch (IllegalArgumentException e) { @@ -368,20 +363,17 @@ public class QueryServiceResource { } switch (sop) { case PREPARE: - result = queryServer.prepare(sessionid, query, conf, queryName); - break; + return queryServer.prepare(sessionid, query, conf, queryName); case EXPLAIN_AND_PREPARE: - result = queryServer.explainAndPrepare(sessionid, query, conf, queryName); - break; + return queryServer.explainAndPrepare(sessionid, query, conf, queryName); default: throw new BadRequestException("Invalid operation type: " + operation + prepareClue); } - return LensAPIResult.composedOf(null, requestId, result); } catch (LensException e) { - e.buildLensErrorResponse(errorCollection, null, requestId); - throw e; + throw new WebApplicationException(e); } } + /** * Destroy all the prepared queries; Can be filtered with user. * @@ -398,11 +390,10 @@ 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/fb235faa/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 4d4f137..38b5ea0 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.getMessage(), expectedLensErrorTO.getMessage()); + assertEquals(actualLensErrorTO, expectedLensErrorTO); /* Assert receipt of valid stacktraces */ assertTrue(lensAPIResult.areValidStackTracesPresent(), "Received Lens Response:" + lensAPIResult); http://git-wip-us.apache.org/repos/asf/lens/blob/fb235faa/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 2f74ceb..64a75ce 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("Simulated Estimate Failure"); + throw new LensException(); } } http://git-wip-us.apache.org/repos/asf/lens/blob/fb235faa/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 18a8c8d..2189eb8 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.getLensErrorInfo().getErrorCode(), expectedErrMsg, MOCK_STACK_TRACE); + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(SESSION_ID_NOT_PROVIDED.getValue(), 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.getLensErrorInfo().getErrorCode(), expectedErrMsg, MOCK_STACK_TRACE); + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(NULL_OR_EMPTY_OR_BLANK_QUERY.getValue(), expectedErrMsg, + MOCK_STACK_TRACE); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(BAD_REQUEST, expectedLensErrorTO); expectedData.verify(response); @@ -144,8 +144,7 @@ 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.getLensErrorInfo().getErrorCode(), + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(UNSUPPORTED_QUERY_SUBMIT_OPERATION.getValue(), expectedErrMsg, MOCK_STACK_TRACE, new SupportedQuerySubmitOperations()); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(BAD_REQUEST, expectedLensErrorTO); @@ -166,9 +165,11 @@ 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)); + expectedErrMsg, MOCK_STACK_TRACE, Arrays.asList(childError1, childError2, childError3)); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(Status.INTERNAL_SERVER_ERROR, expectedLensErrorTO); @@ -184,7 +185,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.getLensErrorInfo().getErrorCode(), + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(SYNTAX_ERROR.getValue(), expectedErrMsg, MOCK_STACK_TRACE); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(BAD_REQUEST, expectedLensErrorTO); @@ -289,9 +290,8 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest { final ColUnAvailableInTimeRange expectedErrorPayload = new ColUnAvailableInTimeRange(testDimensionField, expecAvailableFrom, expecAvailableTill); - LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf( - COLUMN_UNAVAILABLE_IN_TIME_RANGE.getLensErrorInfo().getErrorCode(), - expectedErrMsg, MOCK_STACK_TRACE, expectedErrorPayload, null); + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(COLUMN_UNAVAILABLE_IN_TIME_RANGE.getValue(), + 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/fb235faa/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 fa8d6ee..b3f5d93 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), - new GenericType<LensAPIResult<QueryPlan>>() {}).getData(); + QueryPlan.class); assertEquals(plan2.getTablesQueried().size(), 1); assertTrue(plan2.getTablesQueried().get(0).endsWith(TEST_TABLE.toLowerCase())); assertNotNull(plan2.getPrepareHandle()); @@ -387,41 +387,47 @@ public class TestQueryService extends LensJerseyTest { * Test explain failure. * * @throws InterruptedException the interrupted exception - * @throws UnsupportedEncodingException */ @Test - public void testExplainFailure() throws InterruptedException, UnsupportedEncodingException { + public void testExplainFailure() throws InterruptedException { 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)); - - final Response responseExplain = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); + MediaType.APPLICATION_XML_TYPE)); - assertEquals(responseExplain.getStatus(), Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); + 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)")); // 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)); - - final Response responseExplainAndPrepare = target.request().post( - Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); + MediaType.APPLICATION_XML_TYPE)); - assertEquals(responseExplainAndPrepare.getStatus(), Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); + 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)")); } // post to preparedqueries @@ -451,7 +457,7 @@ public class TestQueryService extends LensJerseyTest { MediaType.APPLICATION_XML_TYPE)); final QueryPrepareHandle pHandle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), - new GenericType<LensAPIResult<QueryPrepareHandle>>() {}).getData(); + QueryPrepareHandle.class); // Get all prepared queries List<QueryPrepareHandle> allQueries = (List<QueryPrepareHandle>) target.queryParam("sessionid", lensSessionId) @@ -549,9 +555,7 @@ public class TestQueryService extends LensJerseyTest { MediaType.APPLICATION_XML_TYPE)); final QueryPlan plan = target.request() - .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), - new GenericType<LensAPIResult<QueryPlan>>() {}).getData(); - + .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), QueryPlan.class); assertEquals(plan.getTablesQueried().size(), 1); assertTrue(plan.getTablesQueried().get(0).endsWith(TEST_TABLE.toLowerCase())); assertNotNull(plan.getPrepareHandle()); @@ -1421,9 +1425,7 @@ 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.getLensErrorInfo().getErrorCode(), + LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(LensCubeErrorCode.NEITHER_CUBE_NOR_DIMENSION.getValue(), "Neither cube nor dimensions accessed in the query", TestDataUtils.MOCK_STACK_TRACE); ErrorResponseExpectedData expectedData = new ErrorResponseExpectedData(BAD_REQUEST, expectedLensErrorTO);
