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