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 java.io.IOException;
018 import java.io.Writer;
019 import java.util.ArrayList;
020 import java.util.HashMap;
021 import java.util.HashSet;
022 import java.util.List;
023 import java.util.Map;
024 import java.util.Properties;
025 import java.util.Set;
026 import java.util.StringTokenizer;
027
028 import org.apache.hadoop.conf.Configuration;
029 import org.apache.oozie.client.CoordinatorJob;
030 import org.apache.oozie.client.OozieClient;
031 import org.apache.oozie.client.WorkflowJob;
032 import org.apache.oozie.command.CommandException;
033 import org.apache.oozie.command.wf.CompletedActionCommand;
034 import org.apache.oozie.command.wf.DefinitionCommand;
035 import org.apache.oozie.command.wf.ExternalIdCommand;
036 import org.apache.oozie.command.wf.JobCommand;
037 import org.apache.oozie.command.wf.JobsCommand;
038 import org.apache.oozie.command.wf.KillCommand;
039 import org.apache.oozie.command.wf.ReRunCommand;
040 import org.apache.oozie.command.wf.ResumeCommand;
041 import org.apache.oozie.command.wf.StartCommand;
042 import org.apache.oozie.command.wf.SubmitCommand;
043 import org.apache.oozie.command.wf.SuspendCommand;
044 import org.apache.oozie.service.DagXLogInfoService;
045 import org.apache.oozie.service.Services;
046 import org.apache.oozie.service.XLogService;
047 import org.apache.oozie.util.ParamChecker;
048 import org.apache.oozie.util.XLog;
049 import org.apache.oozie.util.XLogStreamer;
050
051 public abstract class BaseEngine {
052
053 protected String user;
054 protected String authToken;
055
056 /**
057 * Return the user name.
058 *
059 * @return the user name.
060 */
061 public String getUser() {
062 return user;
063 }
064
065 /**
066 * Return the authentication token.
067 *
068 * @return the authentication token.
069 */
070 protected String getAuthToken() {
071 return authToken;
072 }
073
074 /**
075 * Submit a job. <p/> It validates configuration properties.
076 *
077 * @param conf job configuration.
078 * @param startJob indicates if the job should be started or not.
079 * @return the job Id.
080 * @throws BaseEngineException thrown if the job could not be created.
081 */
082 public abstract String submitJob(Configuration conf, boolean startJob) throws BaseEngineException;
083
084 /**
085 * Start a job.
086 *
087 * @param jobId job Id.
088 * @throws BaseEngineException thrown if the job could not be started.
089 */
090 public abstract void start(String jobId) throws BaseEngineException;
091
092 /**
093 * Resume a job.
094 *
095 * @param jobId job Id.
096 * @throws BaseEngineException thrown if the job could not be resumed.
097 */
098 public abstract void resume(String jobId) throws BaseEngineException;
099
100 /**
101 * Suspend a job.
102 *
103 * @param jobId job Id.
104 * @throws BaseEngineException thrown if the job could not be suspended.
105 */
106 public abstract void suspend(String jobId) throws BaseEngineException;
107
108 /**
109 * Kill a job.
110 *
111 * @param jobId job Id.
112 * @throws BaseEngineException thrown if the job could not be killed.
113 */
114 public abstract void kill(String jobId) throws BaseEngineException;
115
116 /**
117 * Change a coordinator job.
118 *
119 * @param jobId job Id.
120 * @param changeValue change value.
121 * @throws BaseEngineException thrown if the job could not be changed.
122 */
123 public abstract void change(String jobId, String changeValue) throws BaseEngineException;
124
125 /**
126 * Rerun a job.
127 *
128 * @param jobId job Id to rerun.
129 * @param conf configuration information for the rerun.
130 * @throws BaseEngineException thrown if the job could not be rerun.
131 */
132 public abstract void reRun(String jobId, Configuration conf) throws BaseEngineException;
133
134
135 /**
136 * Return the info about a wf job.
137 *
138 * @param jobId job Id.
139 * @return the workflow job info.
140 * @throws DagEngineException thrown if the job info could not be obtained.
141 */
142 public abstract WorkflowJob getJob(String jobId) throws BaseEngineException;
143
144 /**
145 * Return the info about a wf job with actions subset.
146 *
147 * @param jobId job Id
148 * @param start starting from this index in the list of actions belonging to the job
149 * @param length number of actions to be returned
150 * @return the workflow job info.
151 * @throws DagEngineException thrown if the job info could not be obtained.
152 */
153 public abstract WorkflowJob getJob(String jobId, int start, int length) throws BaseEngineException;
154
155 /**
156 * Return the info about a coord job.
157 *
158 * @param jobId job Id.
159 * @return the coord job info.
160 * @throws BaseEngineException thrown if the job info could not be obtained.
161 */
162 public abstract CoordinatorJob getCoordJob(String jobId) throws BaseEngineException;
163
164 /**
165 * Return the info about a coord job with actions subset.
166 *
167 * @param jobId job Id.
168 * @param start starting from this index in the list of actions belonging to the job
169 * @param length number of actions to be returned
170 * @return the coord job info.
171 * @throws BaseEngineException thrown if the job info could not be obtained.
172 */
173 public abstract CoordinatorJob getCoordJob(String jobId, int start, int length) throws BaseEngineException;
174
175 /**
176 * Return the a job definition.
177 *
178 * @param jobId job Id.
179 * @return the job definition.
180 * @throws BaseEngineException thrown if the job definition could no be obtained.
181 */
182 public abstract String getDefinition(String jobId) throws BaseEngineException;
183
184 /**
185 * Stream the log of a job.
186 *
187 * @param jobId job Id.
188 * @param writer writer to stream the log to.
189 * @throws IOException thrown if the log cannot be streamed.
190 * @throws BaseEngineException thrown if there is error in getting the Workflow/Coordinator Job Information for
191 * jobId.
192 */
193 public abstract void streamLog(String jobId, Writer writer) throws IOException, BaseEngineException;
194
195 /**
196 * Return the workflow Job ID for an external ID. <p/> This is reverse lookup for recovery purposes.
197 *
198 * @param externalId external ID provided at job submission time.
199 * @return the associated workflow job ID if any, <code>null</code> if none.
200 * @throws BaseEngineException thrown if the lookup could not be done.
201 */
202 public abstract String getJobIdForExternalId(String externalId) throws BaseEngineException;
203
204 public abstract String dryrunSubmit(Configuration conf, boolean startJob)
205 throws BaseEngineException;
206
207 }