001/** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019package org.apache.oozie.servlet; 020 021import java.io.IOException; 022 023import javax.servlet.http.HttpServletRequest; 024import javax.servlet.http.HttpServletResponse; 025 026import org.apache.hadoop.conf.Configuration; 027import org.apache.oozie.DagEngine; 028import org.apache.oozie.DagEngineException; 029import org.apache.oozie.client.rest.JsonBean; 030import org.apache.oozie.service.DagEngineService; 031import org.apache.oozie.service.Services; 032import org.json.simple.JSONObject; 033import org.apache.oozie.ErrorCode; 034 035@SuppressWarnings("serial") 036public class V0JobServlet extends BaseJobServlet { 037 038 private static final String INSTRUMENTATION_NAME = "v0job"; 039 040 public V0JobServlet() { 041 super(INSTRUMENTATION_NAME); 042 } 043 044 /* 045 * v0 service method to start a job 046 */ 047 @Override 048 protected void startJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 049 IOException { 050 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request)); 051 052 String jobId = getResourceName(request); 053 try { 054 dagEngine.start(jobId); 055 } 056 catch (DagEngineException ex) { 057 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 058 } 059 } 060 061 /* 062 * v0 service method to resume a job 063 */ 064 @Override 065 protected void resumeJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 066 IOException { 067 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request)); 068 069 String jobId = getResourceName(request); 070 try { 071 dagEngine.resume(jobId); 072 } 073 catch (DagEngineException ex) { 074 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 075 } 076 } 077 078 /* 079 * v0 service method to suspend a job 080 */ 081 @Override 082 protected void suspendJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 083 IOException { 084 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request)); 085 086 String jobId = getResourceName(request); 087 try { 088 dagEngine.suspend(jobId); 089 } 090 catch (DagEngineException ex) { 091 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 092 } 093 } 094 095 /* 096 * v0 service method to kill a job 097 */ 098 @Override 099 protected JSONObject killJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 100 IOException { 101 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(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 return null; 111 } 112 113 /* 114 * v0 service method to change a job 115 */ 116 protected void changeJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 117 IOException { 118 // This code should not be reached. But if it happens somehow, we throw 119 // bad request exception. 120 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E1014); 121 } 122 123 /* 124 * v0 service method to reRun a job 125 */ 126 @Override 127 protected JSONObject reRunJob(HttpServletRequest request, HttpServletResponse response, Configuration conf) 128 throws XServletException, IOException { 129 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(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 149 JsonBean jobBean = null; 150 String jobId = getResourceName(request); 151 try { 152 jobBean = (JsonBean) dagEngine.getJob(jobId); 153 } 154 catch (DagEngineException ex) { 155 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 156 } 157 158 return jobBean; 159 } 160 161 /* 162 * v0 service method to get a job definition in String format 163 */ 164 @Override 165 protected String getJobDefinition(HttpServletRequest request, HttpServletResponse response) 166 throws XServletException, IOException { 167 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request)); 168 169 String wfDefinition = null; 170 String jobId = getResourceName(request); 171 try { 172 wfDefinition = dagEngine.getDefinition(jobId); 173 } 174 catch (DagEngineException ex) { 175 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 176 } 177 return wfDefinition; 178 } 179 180 /* 181 * v0 service method to stream a job log into response object 182 */ 183 @Override 184 protected void streamJobLog(HttpServletRequest request, HttpServletResponse response) throws XServletException, 185 IOException { 186 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request)); 187 188 String jobId = getResourceName(request); 189 try { 190 dagEngine.streamLog(jobId, response.getWriter(), request.getParameterMap()); 191 } 192 catch (DagEngineException ex) { 193 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 194 } 195 } 196 197 @Override 198 protected void streamJobErrorLog(HttpServletRequest request, HttpServletResponse response) throws XServletException, 199 IOException { 200 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0306); 201 } 202 203 @Override 204 protected void streamJobAuditLog(HttpServletRequest request, HttpServletResponse response) throws XServletException, 205 IOException { 206 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0306); 207 } 208 209 /* 210 * Not implemented in v0 211 */ 212 @Override 213 protected void streamJobGraph(HttpServletRequest request, HttpServletResponse response) 214 throws XServletException, IOException { 215 // Should this error code be NOT_IMPLEMENTED? 216 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0306); 217 } 218 219 @Override 220 protected String getJMSTopicName(HttpServletRequest request, HttpServletResponse response) throws XServletException, 221 IOException { 222 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0306); 223 } 224 225 @Override 226 protected JSONObject getJobsByParentId(HttpServletRequest request, HttpServletResponse response) throws XServletException, 227 IOException { 228 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0302, "Not supported in v0"); 229 } 230 231 @Override 232 protected JSONObject updateJob(HttpServletRequest request, HttpServletResponse response, Configuration conf) 233 throws XServletException, IOException { 234 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0302, "Not supported in v0"); 235 } 236 237 @Override 238 protected JSONObject ignoreJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, IOException { 239 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0302, "Not supported in v0"); 240 } 241 242 @Override 243 protected String getJobStatus(HttpServletRequest request, HttpServletResponse response) throws XServletException, 244 IOException { 245 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0302, "Not supported in v0"); 246 } 247 248 @Override 249 void slaEnableAlert(HttpServletRequest request, HttpServletResponse response) throws XServletException, IOException { 250 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0302, "Not supported in v0"); 251 } 252 253 @Override 254 void slaDisableAlert(HttpServletRequest request, HttpServletResponse response) throws XServletException, 255 IOException { 256 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0302, "Not supported in v0"); 257 } 258 259 @Override 260 void slaChange(HttpServletRequest request, HttpServletResponse response) throws XServletException, IOException { 261 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0302, "Not supported in v0"); 262 } 263}