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        E0404(XLog.STD, "Only one of the properties are allowed [{0}]"),
069    
070        E0420(XLog.STD, "Invalid jobs filter [{0}], {1}"),
071    
072        E0500(XLog.OPS, "Not authorized, {0}"),
073        E0501(XLog.OPS, "Could not perform authorization operation, {0}"),
074        E0502(XLog.OPS, "User [{0}] does not belong to group [{1}]"),
075        E0503(XLog.OPS, "User [{0}] does not have admin privileges"),
076        E0504(XLog.OPS, "App directory [{0}] does not exist"),
077        E0505(XLog.OPS, "App definition [{0}] does not exist"),
078        E0506(XLog.OPS, "App definition [{0}] is not a file"),
079        E0507(XLog.OPS, "Could not access to [{0}], {1}"),
080        E0508(XLog.OPS, "User [{0}] not authorized for WF job [{1}]"),
081        E0509(XLog.OPS, "User [{0}] not authorized for Coord job [{1}]"),
082        E0510(XLog.OPS, "Unable to get Credential [{0}]"),
083    
084        E0600(XLog.OPS, "Could not get connection, {0}"),
085        E0601(XLog.OPS, "Could not close connection, {0}"),
086        E0602(XLog.OPS, "Could not commit connection, {0}"),
087        E0603(XLog.OPS, "SQL error in operation [{0}], {1}"),
088        E0604(XLog.STD, "Job does not exist [{0}]"),
089        E0605(XLog.STD, "Action does not exist [{0}]"),
090        E0606(XLog.STD, "Could not get lock [{0}], timed out [{1}]ms"),
091        E0607(XLog.OPS, "Other error in operation [{0}], {1}"),
092        E0608(XLog.OPS, "JDBC setup error [{0}], {1}"),
093        E0609(XLog.OPS, "Missing [{0}] ORM file [{1}]"),
094        E0610(XLog.OPS, "Missing JPAService, StoreService cannot run without a JPAService"),
095    
096        E0700(XLog.STD, "XML error, {0}"),
097        E0701(XLog.STD, "XML schema error, {0}"),
098        E0702(XLog.STD, "IO error, {0}"),
099        E0703(XLog.STD, "Invalid workflow element [{0}]"),
100        E0704(XLog.STD, "Definition already complete, application [{0}]"),
101        E0705(XLog.STD, "Nnode already defined, node [{0}]"),
102        E0706(XLog.STD, "Node cannot transition to itself node [{0}]"),
103        E0707(XLog.STD, "Loop detected at parsing, node [{0}]"),
104        E0708(XLog.STD, "Invalid transition, node [{0}] transition [{1}]"),
105        E0709(XLog.STD, "Loop detected at runtime, node [{0}]"),
106        E0710(XLog.STD, "Could not read the workflow definition, {0}"),
107        E0711(XLog.STD, "Invalid application URI [{0}], {1}"),
108        E0712(XLog.STD, "Could not create lib paths list for application [{0}], {1}"),
109        E0713(XLog.OPS, "SQL error, {0}"),
110        E0714(XLog.OPS, "Workflow lib error, {0}"),
111        E0715(XLog.OPS, "Invalid signal value for the start node, signal [{0}]"),
112        E0716(XLog.OPS, "Workflow not running"),
113        E0717(XLog.OPS, "Workflow not suspended"),
114        E0718(XLog.OPS, "Workflow already completed"),
115        E0719(XLog.OPS, "Job already started"),
116        E0720(XLog.OPS, "Fork/join mismatch, node [{0}]"),
117        E0721(XLog.OPS, "Invalid signal/transition, decision node [{0}] signal [{1}]"),
118        E0722(XLog.OPS, "Action signals can only be OK or ERROR, action node [{0}]"),
119        E0723(XLog.STD, "Unsupported action type, node [{0}] type [{1}]"),
120        E0724(XLog.STD, "Invalid node name, {0}"),
121        E0725(XLog.STD, "Workflow instance can not be killed, {0}"),
122        E0726(XLog.STD, "Workflow action can not be killed, {0}"),
123        E0727(XLog.STD, "Workflow Job can not be suspended as its not in running state, {0}, Status: {1}"),
124        E0728(XLog.STD, "Coordinator Job can not be suspended as job finished or failed or killed, id : {0}, status : {1}"),
125    
126        E0800(XLog.STD, "Action it is not running its in [{1}] state, action [{0}]"),
127        E0801(XLog.STD, "Workflow already running, workflow [{0}]"),
128        E0802(XLog.STD, "Invalid action type [{0}]"),
129        E0803(XLog.STD, "IO error, {0}"),
130        E0804(XLog.STD, "Disallowed default property [{0}]"),
131        E0805(XLog.STD, "Workflow job not completed, status [{0}]"),
132        E0806(XLog.STD, "Action did not complete in previous run, action [{0}]"),
133        E0807(XLog.STD, "Some skip actions were not executed [{0}]"),
134        E0808(XLog.STD, "Disallowed user property [{0}]"),
135        E0809(XLog.STD, "Workflow action is not eligible to start [{0}]"),
136        E0810(XLog.STD, "Job state is not [{0}]. Skipping ActionStart Execution"),
137        E0811(XLog.STD, "Job state is not [{0}]. Skipping ActionEnd Execution"),
138        E0812(XLog.STD, "Action pending=[{0}], status=[{1}]. Skipping ActionEnd Execution"),
139        E0813(XLog.STD, "Workflow not RUNNING, current status [{0}]"),
140        E0814(XLog.STD, "SignalCommand for action id=[{0}] is already processed, status=[{1}], , pending=[{2}]"),
141        E0815(XLog.STD, "Action pending=[{0}], status=[{1}]. Skipping ActionCheck Execution"),
142        E0816(XLog.STD, "Action pending=[{0}], status=[{1}]. Skipping ActionStart Execution"),
143        E0817(XLog.STD, "The wf action [{0}] has been udated recently. Ignoring ActionCheck."),
144        E0818(XLog.STD, "Action [{0}] status is running but WF Job [{1}] status is [{2}]. Expected status is RUNNING."),
145        E0819(XLog.STD, "Unable to delete the temp dir of job WF Job [{1}]."),
146    
147        E0900(XLog.OPS, "Jobtracker [{0}] not allowed, not in Oozie's whitelist"),
148        E0901(XLog.OPS, "Namenode [{0}] not allowed, not in Oozie's whitelist"),
149        E0902(XLog.OPS, "Exception occured: [{0}]"),
150    
151        E1001(XLog.STD, "Could not read the coordinator job definition, {0}"),
152        E1002(XLog.STD, "Invalid coordinator application URI [{0}], {1}"),
153        E1003(XLog.STD, "Invalid coordinator application attributes [{0}], {1}"),
154        E1004(XLog.STD, "Expression language evaluation error [{0}], {1}"),
155        E1005(XLog.STD, "Could not read the coordinator job configuration read from DB, {0}"),
156        E1006(XLog.STD, "Invalid coordinator application [{0}], {1}"),
157        E1007(XLog.STD, "Unable to add record to SLA table. [{0}], {1}"),
158        E1008(XLog.STD, "Not implemented. [{0}]"),
159        E1009(XLog.STD, "Unable to parse XML response. [{0}]"),
160        E1010(XLog.STD, "Invalid data in coordinator xml. [{0}]"),
161        E1011(XLog.STD, "Cannot update coordinator job [{0}], {1}"),
162        E1012(XLog.STD, "Coord Job Materialization Error: {0}"),
163        E1013(XLog.STD, "Coord Job Recovery Error: {0}"),
164        E1014(XLog.STD, "Coord job change command not supported"),
165        E1015(XLog.STD, "Invalid coordinator job change value {0}, {1}"),
166        E1016(XLog.STD, "Cannot change a killed coordinator job"),
167        E1017(XLog.STD, "Cannot change a workflow job"),
168        E1018(XLog.STD, "Coord Job Rerun Error: {0}"),
169        E1019(XLog.STD, "Could not submit coord job, [{0}]"),
170        E1020(XLog.STD, "Could not kill coord job, this job either finished successfully or does not exist , [{0}]"),
171        E1021(XLog.STD, "Coord Action Input Check Error: {0}"),
172    
173        E1100(XLog.STD, "Command precondition does not hold before execution"),
174    
175        E1101(XLog.STD, "SLA Nominal time is required."),
176        E1102(XLog.STD, "SLA should-start can't be empty."),
177    
178        E1201(XLog.STD, "State [{0}] is invalid for job [{1}]."),
179    
180        E1301(XLog.STD, "Could not read the bundle job definition, [{0}]"),
181        E1302(XLog.STD, "Invalid bundle application URI [{0}], {1}"),
182        E1303(XLog.STD, "Invalid bundle application attributes [{0}], {1}"),
183        E1304(XLog.STD, "Duplicate bundle application coordinator name [{0}]"),
184        E1305(XLog.STD, "Empty bundle application coordinator name."),
185        E1306(XLog.STD, "Could not read the bundle job configuration, [{0}]"),
186        E1307(XLog.STD, "Could not read the bundle coord job configuration, [{0}]"),
187        E1308(XLog.STD, "Bundle Action Status  [{0}] is not matching with coordinator previous status [{1}]."),
188        E1309(XLog.STD, "Bundle Action for bundle ID  [{0}] and Coordinator [{1}] could not be update by BundleStatusUpdateXCommand"),
189        E1310(XLog.STD, "Bundle Job submission Error: [{0}]"),
190        E1311(XLog.STD, "Bundle Action for bundle ID  [{0}] could not be get."),
191        E1312(XLog.STD, "Bundle Job can not be suspended as job finished or failed or killed, id : {0}, status : {1}"),
192        E1313(XLog.STD, "Bundle Job can not be changed as job finished, {0}, Status: {1}"),
193        E1314(XLog.STD, "Bundle Job can not be changed as job does not exist, {0}"),
194        E1315(XLog.STD, "Bundle job can not be paused, {0}"),
195        E1316(XLog.STD, "Bundle job can not be unpaused, {0}"),
196        E1317(XLog.STD, "Invalid bundle job change value {0}, {1}"),
197        E1318(XLog.STD, "No coord jobs for the bundle=[{0}], fail the bundle"),
198        E1319(XLog.STD, "Invalid bundle coord job namespace, [{0}]"),
199    
200        ETEST(XLog.STD, "THIS SHOULD HAPPEN ONLY IN TESTING, invalid job id [{0}]"),;
201    
202        private String template;
203        private int logMask;
204    
205        /**
206         * Create an error code.
207         *
208         * @param template template for the exception message.
209         * @param logMask log mask for the exception.
210         */
211        private ErrorCode(int logMask, String template) {
212            this.logMask = logMask;
213            this.template = template;
214        }
215    
216        /**
217         * Return the message (StringFormat) template for the error code.
218         *
219         * @return message template.
220         */
221        public String getTemplate() {
222            return template;
223        }
224    
225        /**
226         * Return the log mask (to which log the exception should be logged) of the error.
227         *
228         * @return error log mask.
229         */
230        public int getLogMask() {
231            return logMask;
232        }
233    
234        /**
235         * Return a templatized error message for the error code.
236         *
237         * @param args the parameters for the templatized message.
238         * @return error message.
239         */
240        public String format(Object... args) {
241            return XLog.format("{0}: {1}", toString(), XLog.format(getTemplate(), args));
242        }
243    
244    }