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 }