/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.usergrid.batch; import java.util.UUID; import org.apache.usergrid.persistence.entities.JobData; import org.apache.usergrid.persistence.entities.JobStat; /** * Interface to define all operations possible during a job execution. The job execution has several states. * <p/> * <p/> * The Execution has the following state transitions * <p/> * NOT_STARTED->IN_PROGRESS * <p/> * <p/> * IN_PROGRESS->COMPLETED <br/> IN_PROGRESS->FAILED <br/> IN_PROGRESS->DEAD * <p/> * FAILED->IN_PROGRESS * * @author tnine */ public interface JobExecution { /** Retry constant to signal the job should try forever */ public static final int FOREVER = -1; /** Get the data for this execution */ public JobData getJobData(); /** Get the job statistic information */ public JobStat getJobStats(); /** Marke the job as started. If it's failed too many times, don't run it */ public void start( int maxFailures ); /** Mark the job as successfully completed */ public void completed(); /** Mark the job as failed. If it has failed more than maxFailures, mark it as dead */ public void failed(); /** Mark the job as dead */ public void killed(); /** Provide a heartbeat to the job execution to keep it alive */ public void heartbeat(); /** Signal the execution is still running, and delay the timeout for the milliseconds specified */ public void heartbeat( long milliseconds ); /** * Don't treat the execution as complete. Simply delay execution for the specified milliseconds. Similar to * heartbeat but allows the user to specify the timeout for the next attempt instead of the heartbeat default. This * DOES NOT update locks, so your job should use distributed locking internally to ensure single execution */ public void delay( long milliseconds ); /** Get the current status of the execution */ public Status getStatus(); /** Get the name of the job */ public String getJobName(); /** Get the job id */ public UUID getJobId(); /** Get the current transaction Id from the heartbeat */ public UUID getTransactionId(); public enum Status { NOT_STARTED, IN_PROGRESS, COMPLETED, FAILED, DEAD, DELAYED } }