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.servlet;
016
017 import java.io.IOException;
018
019 import javax.servlet.http.HttpServletRequest;
020 import javax.servlet.http.HttpServletResponse;
021
022 import org.apache.hadoop.conf.Configuration;
023 import org.apache.oozie.DagEngine;
024 import org.apache.oozie.DagEngineException;
025 import org.apache.oozie.client.rest.JsonBean;
026 import org.apache.oozie.service.DagEngineService;
027 import org.apache.oozie.service.Services;
028 import org.json.simple.JSONObject;
029 import org.apache.oozie.ErrorCode;
030
031 @SuppressWarnings("serial")
032 public class V0JobServlet extends BaseJobServlet {
033
034 private static final String INSTRUMENTATION_NAME = "v0job";
035
036 public V0JobServlet() {
037 super(INSTRUMENTATION_NAME);
038 }
039
040 /*
041 * v0 service method to start a job
042 */
043 @Override
044 protected void startJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
045 IOException {
046 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
047 getAuthToken(request));
048
049 String jobId = getResourceName(request);
050 try {
051 dagEngine.start(jobId);
052 }
053 catch (DagEngineException ex) {
054 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
055 }
056 }
057
058 /*
059 * v0 service method to resume a job
060 */
061 @Override
062 protected void resumeJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
063 IOException {
064 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
065 getAuthToken(request));
066
067 String jobId = getResourceName(request);
068 try {
069 dagEngine.resume(jobId);
070 }
071 catch (DagEngineException ex) {
072 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
073 }
074 }
075
076 /*
077 * v0 service method to suspend a job
078 */
079 @Override
080 protected void suspendJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
081 IOException {
082 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
083 getAuthToken(request));
084
085 String jobId = getResourceName(request);
086 try {
087 dagEngine.suspend(jobId);
088 }
089 catch (DagEngineException ex) {
090 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
091 }
092 }
093
094 /*
095 * v0 service method to kill a job
096 */
097 @Override
098 protected void killJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
099 IOException {
100 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
101 getAuthToken(request));
102
103 String jobId = getResourceName(request);
104 try {
105 dagEngine.kill(jobId);
106 }
107 catch (DagEngineException ex) {
108 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
109 }
110 }
111
112 /*
113 * v0 service method to change a job
114 */
115 protected void changeJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
116 IOException {
117 // This code should not be reached. But if it happens somehow, we throw
118 // bad request exception.
119 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E1014);
120 }
121
122 /*
123 * v0 service method to reRun a job
124 */
125 @Override
126 protected JSONObject reRunJob(HttpServletRequest request, HttpServletResponse response, Configuration conf)
127 throws XServletException, IOException {
128 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
129 getAuthToken(request));
130
131 String jobId = getResourceName(request);
132 try {
133 dagEngine.reRun(jobId, conf);
134 }
135 catch (DagEngineException ex) {
136 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
137 }
138 return null;
139 }
140
141 /*
142 * v0 service method to get a job in JsonBean representation
143 */
144 @Override
145 protected JsonBean getJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
146 IOException {
147 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
148 getAuthToken(request));
149
150 JsonBean jobBean = null;
151 String jobId = getResourceName(request);
152 try {
153 jobBean = (JsonBean) dagEngine.getJob(jobId);
154 }
155 catch (DagEngineException ex) {
156 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
157 }
158
159 return jobBean;
160 }
161
162 /*
163 * v0 service method to get a job definition in String format
164 */
165 @Override
166 protected String getJobDefinition(HttpServletRequest request, HttpServletResponse response)
167 throws XServletException, IOException {
168 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
169 getAuthToken(request));
170
171 String wfDefinition = null;
172 String jobId = getResourceName(request);
173 try {
174 wfDefinition = dagEngine.getDefinition(jobId);
175 }
176 catch (DagEngineException ex) {
177 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
178 }
179 return wfDefinition;
180 }
181
182 /*
183 * v0 service method to stream a job log into response object
184 */
185 @Override
186 protected void streamJobLog(HttpServletRequest request, HttpServletResponse response) throws XServletException,
187 IOException {
188 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
189 getAuthToken(request));
190
191 String jobId = getResourceName(request);
192 try {
193 dagEngine.streamLog(jobId, response.getWriter());
194 }
195 catch (DagEngineException ex) {
196 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
197 }
198 }
199
200 }