001    /**
002     * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
003     * Licensed under the Apache License, Version 2.0 (the "License");
004     * you may not use this file except in compliance with the License.
005     * You may obtain a copy of the License at
006     *
007     *   http://www.apache.org/licenses/LICENSE-2.0
008     *
009     *  Unless required by applicable law or agreed to in writing, software
010     *  distributed under the License is distributed on an "AS IS" BASIS,
011     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012     *  See the License for the specific language governing permissions and
013     *  limitations under the License. See accompanying LICENSE file.
014     */
015    package org.apache.oozie;
016    
017    import org.apache.oozie.util.XLog;
018    
019    public enum ErrorCode {
020        E0000(XLog.STD, "System property 'oozie.home.dir' not defined"),
021        E0001(XLog.OPS, "Could not create runtime directory, {0}"),
022        E0002(XLog.STD, "System is in safe mode"),
023        E0003(XLog.OPS, "Oozie home directory must be an absolute path [{0}]"),
024        E0004(XLog.OPS, "Oozie home directory does not exist [{0}]"),
025    
026        E0010(XLog.OPS, "Could not initialize log service, {0}"),
027        E0011(XLog.OPS, "Log4j file must be a file name [{0}]"),
028        E0012(XLog.OPS, "Log4j file must be a '.properties' file [{0}]"),
029        E0013(XLog.OPS, "Log4j file [{0}] not found in configuration dir [{1}] neither in classpath"),
030    
031        E0020(XLog.OPS, "Environment variable {0} not defined"),
032        E0022(XLog.OPS, "Configuration file must be a file name [{0}]"),
033        E0023(XLog.OPS, "Default configuration file [{0}] not found in classpath"),
034        E0024(XLog.OPS, "Oozie configuration directory does not exist [{0}]"),
035        E0025(XLog.OPS, "Configuration service internal error, it should never happen, {0}"),
036        E0026(XLog.OPS, "Missing required configuration property [{0}]"),
037    
038        E0100(XLog.OPS, "Could not initialize service [{0}], {1}"),
039        E0110(XLog.OPS, "Could not parse or validate EL definition [{0}], {1}"),
040        E0111(XLog.OPS, "class#method not found [{0}#{1}]"),
041        E0112(XLog.OPS, "class#method does not have PUBLIC or STATIC modifier [{0}#{1}]"),
042        E0113(XLog.OPS, "class not found [{0}]"),
043        E0114(XLog.OPS, "class#constant does not have PUBLIC or STATIC modifier [{0}#{1}]"),
044        E0115(XLog.OPS, "class#constant not found"),
045        E0116(XLog.OPS, "class#constant does not have PUBLIC or STATIC modifier [{0}#{1}]"),
046        E0120(XLog.OPS, "UUID, invalid generator type [{0}]"),
047        E0130(XLog.OPS, "Could not parse workflow schemas file/s, {0}"),
048        E0131(XLog.OPS, "Could not read workflow schemas file/s, {0}"),
049        E0140(XLog.OPS, "Could not access database, {0}"),
050        E0141(XLog.OPS, "Could not create DataSource connection pool, {0}"),
051        E0150(XLog.OPS, "Actionexecutor type already registered [{0}]"),
052        E0160(XLog.OPS, "Could not read admin users file [{0}], {1}"),
053    
054        E0300(XLog.STD, "Invalid content-type [{0}]"),
055        E0301(XLog.STD, "Invalid resource [{0}]"),
056        E0302(XLog.STD, "Invalid parameter [{0}]"),
057        E0303(XLog.STD, "Invalid parameter value, [{0}] = [{1}]"),
058        E0304(XLog.STD, "Invalid parameter type, parameter [{0}] expected type [{1}]"),
059        E0305(XLog.STD, "Missing parameter [{0}]"),
060        E0306(XLog.STD, "Invalid parameter"),
061        E0307(XLog.STD, "Runtime error [{0}]"),
062    
063    
064        E0400(XLog.STD, "User mismatch, request user [{0}] configuration user [{1}]"),
065        E0401(XLog.STD, "Missing configuration property [{0}]"),
066        E0402(XLog.STD, "Invalid callback ID [{0}]"),
067        E0403(XLog.STD, "Invalid callback data, {0}"),
068    
069        E0420(XLog.STD, "Invalid jobs filter [{0}], {1}"),
070    
071        E0500(XLog.OPS, "Not authorized, {0}"),
072        E0501(XLog.OPS, "Could not perform authorization operation, {0}"),
073        E0502(XLog.OPS, "User [{0}] does not belong to group [{1}]"),
074        E0503(XLog.OPS, "User [{0}] does not have admin privileges"),
075        E0504(XLog.OPS, "Workflow app directory [{0}] does not exist"),
076        E0505(XLog.OPS, "Workflow app definition [{0}] does not exist"),
077        E0506(XLog.OPS, "Workflow app definition [{0}] is not a file"),
078        E0507(XLog.OPS, "Could not access to [{0}], {1}"),
079        E0508(XLog.OPS, "User [{0}] not authorized for WF job [{1}]"),
080        E0509(XLog.OPS, "User [{0}] not authorized for Coord job [{1}]"),
081    
082        E0600(XLog.OPS, "Could not get connection, {0}"),
083        E0601(XLog.OPS, "Could not close connection, {0}"),
084        E0602(XLog.OPS, "Could not commit connection, {0}"),
085        E0603(XLog.OPS, "SQL error in operation [{0}], {1}"),
086        E0604(XLog.STD, "Job does not exist [{0}]"),
087        E0605(XLog.STD, "Action does not exist [{0}]"),
088        E0606(XLog.STD, "Could not get lock [{0}]"),
089        E0607(XLog.OPS, "Other error in operation [{0}], {1}"),
090        E0608(XLog.OPS, "JDBC setup error [{0}], {1}"),
091        E0609(XLog.OPS, "Missing [{0}] ORM file [{1}]"),
092    
093        E0700(XLog.STD, "XML error, {0}"),
094        E0701(XLog.STD, "XML schema error, {0}"),
095        E0702(XLog.STD, "IO error, {0}"),
096        E0703(XLog.STD, "Invalid workflow element [{0}]"),
097        E0704(XLog.STD, "Definition already complete, application [{0}]"),
098        E0705(XLog.STD, "Nnode already defined, node [{0}]"),
099        E0706(XLog.STD, "Node cannot transition to itself node [{0}]"),
100        E0707(XLog.STD, "Loop detected at parsing, node [{0}]"),
101        E0708(XLog.STD, "Invalid transition, node [{0}] transition [{1}]"),
102        E0709(XLog.STD, "Loop detected at runtime, node [{0}]"),
103        E0710(XLog.STD, "Could not read the workflow definition, {0}"),
104        E0711(XLog.STD, "Invalid application URI [{0}], {1}"),
105        E0712(XLog.STD, "Could not create lib paths list for application [{0}], {1}"),
106        E0713(XLog.OPS, "SQL error, {0}"),
107        E0714(XLog.OPS, "Workflow lib error, {0}"),
108        E0715(XLog.OPS, "Invalid signal value for the start node, signal [{0}]"),
109        E0716(XLog.OPS, "Workflow not running"),
110        E0717(XLog.OPS, "Workflow not suspended"),
111        E0718(XLog.OPS, "Workflow already completed"),
112        E0719(XLog.OPS, "Job already started"),
113        E0720(XLog.OPS, "Fork/join mismatch, node [{0}]"),
114        E0721(XLog.OPS, "Invalid signal/transition, decision node [{0}] signal [{1}]"),
115        E0722(XLog.OPS, "Action signals can only be OK or ERROR, action node [{0}]"),
116        E0723(XLog.STD, "Unsupported action type, node [{0}] type [{1}]"),
117        E0724(XLog.STD, "Invalid node name, {0}"),
118    
119        E0800(XLog.STD, "Action it is not running its in [{1}] state, action [{0}]"),
120        E0801(XLog.STD, "Workflow already running, workflow [{0}]"),
121        E0802(XLog.STD, "Invalid action type [{0}]"),
122        E0803(XLog.STD, "IO error, {0}"),
123        E0804(XLog.STD, "Disallowed default property [{0}]"),
124        E0805(XLog.STD, "Workflow job not completed, status [{0}]"),
125        E0806(XLog.STD, "Action did not complete in previous run, action [{0}]"),
126        E0807(XLog.STD, "Some skip actions were not executed [{0}]"),
127        E0808(XLog.STD, "Disallowed user property [{0}]"),
128        E0819(XLog.STD, "Unable to delete the temp dir of job WF Job [{1}]."),
129    
130        E0900(XLog.OPS, "Jobtracker [{0}] not allowed, not in Oozie's whitelist"),
131        E0901(XLog.OPS, "Namenode [{0}] not allowed, not in Oozie's whitelist"),
132        E0902(XLog.OPS, "Exception occured: [{0}]"),
133        E0903(XLog.OPS, "Configuration does not have Jobtracker Kerberos name or rule"),
134        E0904(XLog.OPS, "Configuration does not have Namenode Kerberos name or rule"),
135    
136        E1001(XLog.STD, "Could not read the coordinator job definition, {0}"),
137        E1002(XLog.STD, "Invalid coordinator application URI [{0}], {1}"),
138        E1003(XLog.STD, "Invalid coordinator application attributes [{0}], {1}"),
139        E1004(XLog.STD, "Expression language evaluation error [{0}], {1}"),
140        E1005(XLog.STD, "Could not read the coordinator job configuration read from DB, {0}"),
141        E1006(XLog.STD, "Invalid coordinator application [{0}], {1}"),
142        E1007(XLog.STD, "Unable to add record to SLA table. [{0}], {1}"),
143        E1008(XLog.STD, "Not implemented. [{0}]"),
144        E1009(XLog.STD, "Unable to parse XML response. [{0}]"),
145        E1010(XLog.STD, "Invalid data in coordinator xml. [{0}]"),
146        E1011(XLog.STD, "Cannot update coordinator job [{0}], {1}"),
147        E1012(XLog.STD, "Coord Job Materialization Error: {0}"),
148        E1013(XLog.STD, "Coord Job Recovery Error: {0}"),
149        E1014(XLog.STD, "Coord job change command not supported"),
150        E1015(XLog.STD, "Invalid coordinator job change value [{0}], {1}"),
151        E1016(XLog.STD, "Cannot change a killed coordinator job"),
152        E1017(XLog.STD, "Cannot change a workflow job"),
153        E1018(XLog.STD, "Coord Job Rerun Error: {0}"),
154    
155        ETEST(XLog.STD, "THIS SHOULD HAPPEN ONLY IN TESTING, invalid job id [{0}]"),;
156    
157        private String template;
158        private int logMask;
159    
160        /**
161         * Create an error code.
162         *
163         * @param template template for the exception message.
164         * @param logMask log mask for the exception.
165         */
166        private ErrorCode(int logMask, String template) {
167            this.logMask = logMask;
168            this.template = template;
169        }
170    
171        /**
172         * Return the message (StringFormat) template for the error code.
173         *
174         * @return message template.
175         */
176        public String getTemplate() {
177            return template;
178        }
179    
180        /**
181         * Return the log mask (to which log the exception should be logged) of the error.
182         *
183         * @return error log mask.
184         */
185        public int getLogMask() {
186            return logMask;
187        }
188    
189        /**
190         * Return a templatized error message for the error code.
191         *
192         * @param args the parameters for the templatized message.
193         * @return error message.
194         */
195        public String format(Object... args) {
196            return XLog.format("{0}: {1}", toString(), XLog.format(getTemplate(), args));
197        }
198    
199    }