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.command.coord; 016 017 import java.util.Date; 018 019 import org.apache.oozie.CoordinatorActionBean; 020 import org.apache.oozie.CoordinatorJobBean; 021 import org.apache.oozie.client.CoordinatorAction; 022 import org.apache.oozie.client.CoordinatorJob; 023 import org.apache.oozie.command.CommandException; 024 import org.apache.oozie.store.CoordinatorStore; 025 import org.apache.oozie.store.StoreException; 026 import org.apache.oozie.util.XLog; 027 028 public class CoordActionTimeOut extends CoordinatorCommand<Void> { 029 private CoordinatorActionBean actionBean; 030 private final XLog log = XLog.getLog(getClass()); 031 032 public CoordActionTimeOut(CoordinatorActionBean actionBean) { 033 super("coord_action_timeout", "coord_action_timeout", 1, XLog.STD); 034 this.actionBean = actionBean; 035 } 036 037 @Override 038 protected Void call(CoordinatorStore store) throws StoreException, CommandException { 039 // actionBean = store.getCoordinatorAction(actionBean.getId(), false); 040 actionBean = store.getEntityManager().find(CoordinatorActionBean.class, actionBean.getId()); 041 if (actionBean.getStatus() == CoordinatorAction.Status.WAITING) { 042 actionBean.setStatus(CoordinatorAction.Status.TIMEDOUT); 043 queueCallable(new CoordActionNotification(actionBean), 100); 044 store.updateCoordinatorAction(actionBean); 045 } 046 return null; 047 } 048 049 @Override 050 protected Void execute(CoordinatorStore store) throws StoreException, CommandException { 051 String jobId = actionBean.getJobId(); 052 setLogInfo(actionBean); 053 log.info("STARTED CoordinatorActionTimeOut for Action Id " + actionBean.getId() + " of job Id :" 054 + actionBean.getJobId() + ". Timeout value is " + actionBean.getTimeOut() + " mins"); 055 try { 056 if (lock(jobId)) { 057 call(store); 058 } 059 else { 060 queueCallable(new CoordActionTimeOut(actionBean), LOCK_FAILURE_REQUEUE_INTERVAL); 061 log.warn("CoordinatorActionTimeOut lock was not acquired - " + " failed " + jobId 062 + ". Requeing the same."); 063 } 064 } 065 catch (InterruptedException e) { 066 queueCallable(new CoordActionTimeOut(actionBean), LOCK_FAILURE_REQUEUE_INTERVAL); 067 log.warn("CoordinatorActionTimeOut lock acquiring failed " + " with exception " + e.getMessage() 068 + " for job id " + jobId + ". Requeing the same."); 069 } 070 finally { 071 log.info("ENDED CoordinatorActionTimeOut for Action Id " + actionBean.getId()); 072 } 073 return null; 074 } 075 }