/*
* JBoss, Home of Professional Open Source.
* Copyright 2011, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.process;

/**
 * Reserved process exit codes handled differently
 *
 * @author <a href="kabir.khan@jboss.com">Kabir Khan</a>
 */
public class ExitCodes {

    /**
     * Exit code which indicates normal process exit.
     */
    public static final int NORMAL = 0;

    /**
     * Exit code which indicates a process failure. In a managed domain, if the process emitting this code is
     * a {@code HostController}, the process controller will react to this code by attempting to respawn the host
     * controller. For other processes this code has no special semantic associated with it.
     */
    public static final int FAILED = 1;

    /**
     * Exit code which serves two functions:
     * <ul>
     *   <li>
     *     <b>standalone mode:</b> - if a standalone server's exit code the startup script will start up the server again.
     *  </li>
     *  <li>
     *     <b>domain mode:</b> - if the host controller process returns this exit code, the process controller will terminate
     *      with this exit code, and the domain's startup script will start up the process controller again, which in turn will start up
     *      the host controller and any {@code autostart="true"} servers.
     *  </li>
     * </ul>
     */
    public static final int RESTART_PROCESS_FROM_STARTUP_SCRIPT = 10;

    /**
     * Exit code to invoke the installation manager scripts. It serves two functions:
     * <ul>
     *   <li>
     *     <b>standalone mode:</b> - if a standalone server's exit code the startup script will invoke the installation manager script and start up the server again.
     *  </li>
     *  <li>
     *     <b>domain mode:</b> - if the host controller process returns this exit code, the process controller will terminate
     *      with this exit code, and the domain's startup script will invoke the installation manager script and start up the process controller again,
     *      which in turn will start up the host controller and any {@code autostart="true"} servers.
     *  </li>
     * </ul>
     */
    public static final int PERFORM_INSTALLATION_FROM_STARTUP_SCRIPT = 20;

    /**
     * Exit code from host controller which indicates a critical boot failure. The process controller
     * will only try to respawn the host controller if there are no running servers; if there aren't,
     * the process controller will shut down in turn. If there are running servers, the process controller
     * will attempt to respawn the host controller, but with longer delays between respawn attempts
     * than would be the case with {@link #FAILED}. The expectation is a critical boot failure will require
     * some sort of human intervention to resolve, so immediately respawning will just result in
     * noise in the logs.
     */
    public static final int HOST_CONTROLLER_ABORT_EXIT_CODE = 99;
}
