| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| # Language used for error configuration: HOCON: Human Optimized Config Object Notation |
| # It keeps the semantics (tree structure; set of types; encoding/escaping)from JSON, |
| # and makes it more convenient and readable for humans ). |
| # More reading: https://github.com/typesafehub/config/blob/master/HOCON.md |
| # Typesafe config library license: Apache License Version 2.0, January 2004 |
| |
| # Define HTTP status codes |
| |
| BAD_REQUEST = 400 |
| NOT_FOUND = 404 |
| UNAUTHORIZED = 401 |
| GONE = 410 |
| TOO_MANY_REQUESTS = 429 |
| INTERNAL_SERVER_ERROR = 500 |
| |
| # Define all module specific errors |
| |
| # lensCommonErrors: Defined for lens-api module and expected to be used by every other module |
| |
| lensCommonErrors = [ |
| |
| { |
| errorCode = 1001 |
| httpStatusCode = ${INTERNAL_SERVER_ERROR} |
| errorMsg = "Internal Server Error." |
| } |
| |
| { |
| errorCode = 1002 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "XML invalid: %s" |
| } |
| |
| { |
| errorCode = 1003 |
| httpStatusCode = ${NOT_FOUND} |
| errorMsg = "The specified %s with identifier %s does not exist" |
| } |
| |
| { |
| errorCode = 1004 |
| httpStatusCode = ${UNAUTHORIZED} |
| errorMsg = "User does not have %s access to %s:%s" |
| } |
| |
| { |
| errorCode = 1005 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "These parameters are missing and are required : %s" |
| } |
| |
| { |
| errorCode = 1006 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Value provided {%s} for parameter {%s} is invalid due to {%s}" |
| } |
| |
| ] |
| |
| # lensServerErrors: Defined for lens-server module |
| |
| lensServerErrors = [ |
| |
| { |
| errorCode = 2001 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Session id not provided. Please provide a session id." |
| } |
| |
| { |
| errorCode = 2002 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Query is not provided, or it is empty or blank. Please provide a valid query." |
| } |
| |
| { |
| errorCode = 2003 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Provided Operation is not supported. Supported Operations are: [%s]" |
| payloadClass = org.apache.lens.api.SupportedOperations |
| } |
| |
| { |
| errorCode = 2004 |
| httpStatusCode = ${TOO_MANY_REQUESTS} |
| errorMsg = "Too many opened sessions for [%s] user. Session limit [%d] is already reached" |
| } |
| |
| { |
| errorCode = 2005 |
| httpStatusCode = ${GONE} |
| errorMsg = "Session %s was closed" |
| } |
| |
| { |
| errorCode = 2006 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Invalid Handle: %s" |
| } |
| |
| { |
| errorCode = 2007 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Unsupported null value received for argument type: %s" |
| } |
| ] |
| |
| # lensCubeErrors: Defined for lens-cube module |
| |
| lensCubeErrorsForQuery = [ |
| |
| { |
| errorCode = 3001 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Syntax Error: %s" |
| } |
| |
| { |
| errorCode = 3002 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "%s. Please remove conflicting fields and try again." |
| payloadClass = org.apache.lens.cube.error.ConflictingFields |
| } |
| |
| { |
| errorCode = 3003 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "More than one cube accessed in query : %s and %s" |
| } |
| |
| { |
| errorCode = 3004 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Neither cube nor dimensions accessed in the query" |
| } |
| |
| { |
| errorCode = 3005 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No timerange filter specified" |
| } |
| |
| { |
| errorCode = 3006 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "%s is not timed dimension" |
| } |
| |
| { |
| errorCode = 3007 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Error in parsing input date format. Expected format %s, date provided %s" |
| } |
| |
| { |
| errorCode = 3008 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Date value cannot be null or empty" |
| } |
| |
| { |
| errorCode = 3009 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Invalid time unit %s" |
| } |
| |
| { |
| errorCode = 3010 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Selecting all columns is not supported" |
| } |
| |
| { |
| errorCode = 3011 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Ambiguous column %s, in dimensions %s and %s" |
| } |
| |
| { |
| errorCode = 3012 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Ambiguous column %s, in cube: %s and in dimension: %s" |
| } |
| |
| { |
| errorCode = 3013 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "%s : Not a cube column" |
| } |
| |
| { |
| errorCode = 3014 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Invalid time range" |
| } |
| |
| { |
| errorCode = 3015 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "From date: %s should be smaller than to date: %s" |
| } |
| |
| { |
| errorCode = 3016 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Join target table: %s is neither dimension nor cube" |
| } |
| |
| { |
| errorCode = 3017 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Configured timerange writer cannot be used. Reason %s" |
| } |
| |
| { |
| errorCode = 3018 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Default aggregate is not set for measure: %s" |
| } |
| |
| { |
| errorCode = 3019 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Expression %s is not available in any fact" |
| } |
| |
| { |
| errorCode = 3020 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No join condition available" |
| } |
| |
| { |
| errorCode = 3021 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No join path defined from %s to %s" |
| } |
| |
| { |
| errorCode = 3022 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "%s can only be queried %s. Please adjust the selected time range accordingly." |
| payloadClass = org.apache.lens.cube.error.ColUnAvailableInTimeRange |
| } |
| |
| { |
| errorCode = 3023 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No dimension table has the queried columns for %s, columns: %s" |
| } |
| |
| { |
| errorCode = 3024 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No fact table has the queried columns : %s" |
| } |
| |
| { |
| errorCode = 3025 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No reference column available for : %s " |
| } |
| |
| { |
| errorCode = 3026 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Could not find the table containing column: %s" |
| } |
| |
| { |
| errorCode = 3027 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No candidate dimension table available to answer the query, because %s" |
| } |
| |
| { |
| errorCode = 3028 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No candidate fact table available to answer the query, because %s" |
| } |
| |
| { |
| errorCode = 3029 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No candidate dimension storage tables for dimension because %s" |
| } |
| |
| { |
| errorCode = 3030 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No storage table available for candidate fact: %s" |
| } |
| |
| { |
| errorCode = 3031 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "The query is answerable from two storages but union is disabled." |
| } |
| |
| { |
| errorCode = 3032 |
| httpStatusCode = ${INTERNAL_SERVER_ERROR} |
| errorMsg = "Could not parse expression %s" |
| } |
| |
| { |
| errorCode = 3033 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Could not find queried table or chain: %s" |
| } |
| |
| { |
| errorCode = 3034 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "%s does not have any facts that can cover the requested time range : %s and queried measure set : %s" |
| } |
| |
| { |
| errorCode = 3035 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "%s does not have any facts that can cover the queried measure set : %s" |
| } |
| |
| |
| ] |
| |
| lensCubeErrorsForMetastore = [ |
| { |
| errorCode = 3101 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Problem in submitting entity: %s" |
| } |
| |
| { |
| errorCode = 3102 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "No timeline found for fact=%s, storage=%s, update period=%s, partition column=%s." |
| } |
| |
| { |
| errorCode = 3103 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "The Expression %s is Not Parsable." |
| } |
| |
| { |
| errorCode = 3104 |
| httpStatusCode = ${NOT_FOUND} |
| errorMsg = "%s %s Not found." |
| } |
| ] |
| |
| lensDriverErrors = [ |
| { |
| errorCode = 4001 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Semantic Error : %s" |
| } |
| |
| { |
| errorCode = 4002 |
| httpStatusCode = ${INTERNAL_SERVER_ERROR} |
| errorMsg = "Driver Execution Error : %s" |
| } |
| ] |
| |
| lensCubeErrors = ${lensCubeErrorsForQuery}${lensCubeErrorsForMetastore} |
| |
| lensSchedulerErrors = [ |
| { |
| errorCode = 5001 |
| httpStatusCode = ${INTERNAL_SERVER_ERROR} |
| errorMsg = "Can't submit the job %s" |
| } |
| { |
| errorCode = 5002 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Invalid event %s on current state %s for job %s" |
| } |
| { |
| errorCode = 5003 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Invalid event %s, for state %s of job instance %s of job %s" |
| } |
| { |
| errorCode = 5004 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "The current user %s for session %s is not the same as job owner %s" |
| } |
| { |
| errorCode = 5005 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Job with handle %s is not scheduled. The current state of job is %s" |
| } |
| { |
| errorCode = 5006 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Job instance with handle %s of job %s is not yet run" |
| } |
| { |
| errorCode = 5007 |
| httpStatusCode = ${INTERNAL_SERVER_ERROR} |
| errorMsg = "Cannot update %s with handle %s" |
| } |
| { |
| errorCode = 5008 |
| httpStatusCode = ${INTERNAL_SERVER_ERROR} |
| errorMsg = "Cannot %s job in AlarmService with handle %s" |
| } |
| { |
| errorCode = 5009 |
| httpStatusCode = ${BAD_REQUEST} |
| errorMsg = "Cannot submit the job because user already has %d scheduled jobs" |
| } |
| ] |
| |
| # Overriding errors in lens-errors.conf via lens-errors-override.conf: |
| # |
| # Step 1: Copy contents of lens-errors.conf to lens-errors-override.conf |
| # Step 2: Modify the error objects to be changed. |
| # |
| # lens-errors-override.conf can be deployed via any debian. However, it should be available on lens server and |
| # lens-client class path. Lens client has to be aware of error payload classes defined with errors in configuration |
| # files to unmarshall the error payloads propagated with errors. lens-errors-override.conf is an optional file and it |
| # is not mandatory to be present in classpath. |
| # |
| # Error object preferrence rule: If an error object with same error code is defined multiple times within same array |
| # or different arrays, then the error object defined later will completely override the object defined earlier. |
| # Two error objects are considered same when they have same error code. This is done to ensure that there is only one |
| # error configuration per error code. |
| |
| # Adding more errors via lens-errors-override.conf: |
| # |
| # Pluggable code in lens which is not shipped with lens distribution can define new errors using |
| # lens-errors-override.conf. |
| # |
| # E.g.: Say pluggable code has new errors collection named lensXyzErrors to be configured. |
| # |
| # Step 1: Copy contents of lens-errors.conf to lens-errors-override.conf |
| # Step 2: Define lensXyzErrors before defining errors property. |
| # Step 3: Append it to the end of errors property as shown below. |
| # errors = ${lensCommonErrors}${lensServerErrors}${lensCubeErrors}${lensXyzErrors} |
| |
| # Prepare errors array for Lens server and Lens client. |
| # Lens server and Lens client are only aware of errors array. They are not aware of any other array defined in |
| # error configuration files. Hence an errors array is prepared which is a concatenation of all other error arrays. |
| |
| errors = ${lensCommonErrors}${lensServerErrors}${lensCubeErrors}${lensDriverErrors}${lensSchedulerErrors} |