package jenkins.slaves.restarter;
import hudson.ExtensionList;
import hudson.ExtensionPoint;
import java.io.Serializable;
import java.util.logging.Logger;
/**
* Extension point to control how to restart JNLP agent when it loses the connection with the master.
*
* <p>
* Objects are instantiated on the master, then transferred to an agent via serialization.
*
* @author Kohsuke Kawaguchi
*/
public abstract class SlaveRestarter implements ExtensionPoint, Serializable {
/**
* Called on the agent to see if this restarter can work on this agent.
*/
public abstract boolean canWork();
/**
* If {@link #canWork()} method returns true, this method is called later when
* the connection is lost to restart the agent.
*
* <p>
* Note that by the time this method is called, classloader is no longer capable of
* loading any additional classes. Therefore {@link #canWork()} method must have
* exercised enough of the actual restart process so that this call can proceed
* without trying to load additional classes nor resources.
*
* <p>
* This method is not expected to return, and the JVM should terminate before this call returns.
* If the method returns normally, the JNLP agent will move on to the reconnection without restart.
* If an exception is thrown, it is reported as an error and then the JNLP agent will move on to the
* reconnection without restart.
*/
public abstract void restart() throws Exception;
public static ExtensionList<SlaveRestarter> all() {
return ExtensionList.lookup(SlaveRestarter.class);
}
private static final Logger LOGGER = Logger.getLogger(SlaveRestarter.class.getName());
private static final long serialVersionUID = 1L;
}