Search in sources :

Example 1 with ContainerDaemonOperations

use of alma.acsdaemon.ContainerDaemonOperations in project ACS by ACS-Community.

the class ContainerUtil method startContainer.

/**
	 * Starts (possibly remote) containers using container daemons. 
	 * <p>
	 * Note that outside of performance tests it is required to start containers either through the OMC
	 * or by the manager in case of CDB-configured autostart containers. 
	 * Here we do it from application code in order to run flexible tests that don't require a CDB setup.
	 * <p>
	 * Similar code from module acscommandcenter (Executor#remoteDaemonForContainers) does not seem to implement
	 * synchronization on the container becoming available. 
	 * 
	 * @param host Name of container host. Can be <code>null</code> for localhost.
	 * @param containerType
	 * @param containerName
	 * @param flags
	 * @param waitContainerReady  If true, waits for the container to be ready, as indicated by a callback from the manager (requires prior login to the manager).
	 * @throws FailedToStartContainerEx 
	 * @throws BadParameterEx 
	 */
public void startContainer(String host, ContainerImplLangType containerType, String containerName, String flags, boolean waitContainerReady) throws AcsJBadParameterEx, AcsJFailedToStartContainerEx {
    if (!loggedInToManager && waitContainerReady) {
        throw new IllegalStateException("must be logged in to the manager if waitContainerReady==true");
    }
    if (host == null || host.isEmpty()) {
        host = ACSPorts.getIP();
    }
    if (flags == null) {
        flags = "";
    }
    ContainerDaemonOperations daemon = getContainerDaemon(host);
    // TODO check that string is as expected by daemon, e.g. "py" vs. "python"
    String containerTypeName = containerType.toString();
    short instanceNumber = (short) ACSPorts.getBasePort();
    try {
        daemon.start_container(containerTypeName, containerName, instanceNumber, new String[0], flags);
    } catch (BadParameterEx ex) {
        throw new AcsJBadParameterEx();
    } catch (FailedToStartContainerEx ex) {
        throw new AcsJFailedToStartContainerEx();
    }
    if (waitContainerReady) {
        boolean containerOK = false;
        try {
            containerOK = managerAdminClient.awaitContainerLogin(containerName, 30, TimeUnit.SECONDS);
        } catch (InterruptedException ex) {
        // just leave containerOK = false
        }
        if (!containerOK) {
            throw new AcsJFailedToStartContainerEx("Did not receive manager notification about container '" + containerName + "' having logged in.");
        }
    }
}
Also used : AcsJBadParameterEx(alma.ACSErrTypeCommon.wrappers.AcsJBadParameterEx) FailedToStartContainerEx(alma.acsdaemonErrType.FailedToStartContainerEx) AcsJFailedToStartContainerEx(alma.acsdaemonErrType.wrappers.AcsJFailedToStartContainerEx) ContainerDaemonOperations(alma.acsdaemon.ContainerDaemonOperations) AcsJBadParameterEx(alma.ACSErrTypeCommon.wrappers.AcsJBadParameterEx) BadParameterEx(alma.ACSErrTypeCommon.BadParameterEx) AcsJFailedToStartContainerEx(alma.acsdaemonErrType.wrappers.AcsJFailedToStartContainerEx)

Example 2 with ContainerDaemonOperations

use of alma.acsdaemon.ContainerDaemonOperations in project ACS by ACS-Community.

the class ContainerUtil method stopContainer.

/**
	 * @param host Name of container host. Can be <code>null</code> for localhost.
	 * @param containerName
	 */
public void stopContainer(String host, String containerName) throws BadParameterEx, FailedToStopContainerEx {
    if (host == null || host.isEmpty()) {
        host = ACSPorts.getIP();
    }
    ContainerDaemonOperations daemon = getContainerDaemon(host);
    short instanceNumber = (short) ACSPorts.getBasePort();
    daemon.stop_container(containerName, instanceNumber, "");
}
Also used : ContainerDaemonOperations(alma.acsdaemon.ContainerDaemonOperations)

Example 3 with ContainerDaemonOperations

use of alma.acsdaemon.ContainerDaemonOperations in project ACS by ACS-Community.

the class ContainerUtil method getContainerDaemon.

/////////////////////////////////////////////////////////////////////
// Container daemon access 
/////////////////////////////////////////////////////////////////////
/**
	 * @TODO possibly cache the daemon references for the various host machines.
	 * @param host
	 * @return
	 */
public ContainerDaemonOperations getContainerDaemon(String host) {
    String daemonCORBALOC = AcsLocations.convertToContainerDaemonLocation(host);
    ContainerDaemonOperations daemon = null;
    try {
        org.omg.CORBA.Object obj = orb.string_to_object(daemonCORBALOC);
        daemon = ContainerDaemonHelper.narrow(obj);
        if (daemon == null) {
            throw new NullPointerException("Daemon object was null");
        }
    } catch (Throwable thr) {
        throw new RuntimeException("Failed to resolve daemon reference for " + daemonCORBALOC, thr);
    }
    return daemon;
}
Also used : ContainerDaemonOperations(alma.acsdaemon.ContainerDaemonOperations)

Aggregations

ContainerDaemonOperations (alma.acsdaemon.ContainerDaemonOperations)3 BadParameterEx (alma.ACSErrTypeCommon.BadParameterEx)1 AcsJBadParameterEx (alma.ACSErrTypeCommon.wrappers.AcsJBadParameterEx)1 FailedToStartContainerEx (alma.acsdaemonErrType.FailedToStartContainerEx)1 AcsJFailedToStartContainerEx (alma.acsdaemonErrType.wrappers.AcsJFailedToStartContainerEx)1