Search in sources :

Example 1 with Environment

use of org.eclipse.che.api.core.model.workspace.config.Environment in project che-server by eclipse-che.

the class LimitsCheckingWorkspaceManager method checkMaxEnvironmentRam.

@VisibleForTesting
void checkMaxEnvironmentRam(WorkspaceConfig config) throws ServerException {
    if (maxRamPerEnvMB < 0) {
        return;
    }
    if (config.getEnvironments().isEmpty()) {
        return;
    }
    for (Map.Entry<String, ? extends Environment> envEntry : config.getEnvironments().entrySet()) {
        Environment env = envEntry.getValue();
        final long workspaceRam = environmentRamCalculator.calculate(env);
        if (workspaceRam > maxRamPerEnvMB) {
            throw new LimitExceededException(format("You are only allowed to use %d mb. RAM per workspace.", maxRamPerEnvMB), ImmutableMap.of("environment_max_ram", Long.toString(maxRamPerEnvMB), "environment_max_ram_unit", "mb", "environment_ram", Long.toString(workspaceRam), "environment_ram_unit", "mb"));
        }
    }
}
Also used : Environment(org.eclipse.che.api.core.model.workspace.config.Environment) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 2 with Environment

use of org.eclipse.che.api.core.model.workspace.config.Environment in project che-server by eclipse-che.

the class WorkspaceRuntimes method recoverOne.

@VisibleForTesting
InternalRuntime<?> recoverOne(RuntimeInfrastructure infra, RuntimeIdentity identity) throws ServerException, ConflictException {
    if (isStartRefused.get()) {
        throw new ConflictException(format("Recovery of the workspace '%s' is rejected by the system, " + "no more workspaces are allowed to start", identity.getWorkspaceId()));
    }
    WorkspaceImpl workspace;
    try {
        workspace = workspaceDao.get(identity.getWorkspaceId());
    } catch (NotFoundException x) {
        throw new ServerException(format("Workspace configuration is missing for the runtime '%s:%s'. Runtime won't be recovered", identity.getWorkspaceId(), identity.getEnvName()));
    }
    Environment environment = null;
    WorkspaceConfigImpl workspaceConfig = workspace.getConfig();
    if (workspaceConfig == null) {
        workspaceConfig = devfileConverter.convert(workspace.getDevfile());
    }
    if (identity.getEnvName() != null) {
        environment = workspaceConfig.getEnvironments().get(identity.getEnvName());
        if (environment == null) {
            throw new ServerException(format("Environment configuration is missing for the runtime '%s:%s'. Runtime won't be recovered", identity.getWorkspaceId(), identity.getEnvName()));
        }
    }
    InternalRuntime runtime;
    try {
        InternalEnvironment internalEnv = createInternalEnvironment(environment, workspaceConfig.getAttributes(), workspaceConfig.getCommands(), workspaceConfig.getDevfile());
        runtime = infra.prepare(identity, internalEnv).getRuntime();
        WorkspaceStatus runtimeStatus = runtime.getStatus();
        try (Unlocker ignored = lockService.writeLock(workspace.getId())) {
            statuses.replace(identity.getWorkspaceId(), runtimeStatus);
            runtimes.putIfAbsent(identity.getWorkspaceId(), runtime);
        }
        LOG.info("Successfully recovered workspace runtime '{}'. Its status is '{}'", identity.getWorkspaceId(), runtimeStatus);
        return runtime;
    } catch (NotFoundException x) {
        LOG.warn("Not able to create internal environment for  '{}'. Reason: '{}'", identity.getWorkspaceId(), x.getMessage());
        try (Unlocker ignored = lockService.writeLock(identity.getWorkspaceId())) {
            runtimes.remove(identity.getWorkspaceId());
            statuses.remove(identity.getWorkspaceId());
        }
        publishWorkspaceStatusEvent(identity.getWorkspaceId(), STOPPED, STOPPING, "Workspace is stopped. Reason: " + x.getMessage(), false);
        throw new ServerException(format("Couldn't recover runtime '%s:%s'. Error: %s", identity.getWorkspaceId(), identity.getEnvName(), x.getMessage()));
    } catch (InfrastructureException | ValidationException x) {
        throw new ServerException(format("Couldn't recover runtime '%s:%s'. Error: %s", identity.getWorkspaceId(), identity.getEnvName(), x.getMessage()));
    }
}
Also used : WorkspaceImpl(org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl) ServerException(org.eclipse.che.api.core.ServerException) ValidationException(org.eclipse.che.api.core.ValidationException) ConflictException(org.eclipse.che.api.core.ConflictException) NotFoundException(org.eclipse.che.api.core.NotFoundException) InternalRuntime(org.eclipse.che.api.workspace.server.spi.InternalRuntime) Unlocker(org.eclipse.che.commons.lang.concurrent.Unlocker) InternalEnvironment(org.eclipse.che.api.workspace.server.spi.environment.InternalEnvironment) InternalEnvironment(org.eclipse.che.api.workspace.server.spi.environment.InternalEnvironment) Environment(org.eclipse.che.api.core.model.workspace.config.Environment) WorkspaceConfigImpl(org.eclipse.che.api.workspace.server.model.impl.WorkspaceConfigImpl) WorkspaceStatus(org.eclipse.che.api.core.model.workspace.WorkspaceStatus) InfrastructureException(org.eclipse.che.api.workspace.server.spi.InfrastructureException) InternalInfrastructureException(org.eclipse.che.api.workspace.server.spi.InternalInfrastructureException) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 3 with Environment

use of org.eclipse.che.api.core.model.workspace.config.Environment in project che-server by eclipse-che.

the class InternalEnvironmentFactoryTest method shouldReturnCreatedInternalEnvironment.

@Test
public void shouldReturnCreatedInternalEnvironment() throws Exception {
    // given
    InternalEnvironment expectedEnv = mock(InternalEnvironment.class);
    when(environmentFactory.doCreate(any(), any(), any())).thenReturn(expectedEnv);
    Environment env = mock(Environment.class);
    // when
    InternalEnvironment createdEnv = environmentFactory.create(env);
    // then
    assertEquals(createdEnv, expectedEnv);
}
Also used : Environment(org.eclipse.che.api.core.model.workspace.config.Environment) Test(org.testng.annotations.Test)

Example 4 with Environment

use of org.eclipse.che.api.core.model.workspace.config.Environment in project devspaces-images by redhat-developer.

the class InternalEnvironmentFactoryTest method testApplyContainerSourceAttributeToTheMachineThatComesFromRecipe.

@Test
public void testApplyContainerSourceAttributeToTheMachineThatComesFromRecipe() throws Exception {
    // given
    final Environment sourceEnv = mock(Environment.class);
    final InternalEnvironment internalEnv = mock(InternalEnvironment.class);
    final InternalMachineConfig internalMachine = new InternalMachineConfig();
    when(internalEnv.getMachines()).thenReturn(ImmutableMap.of("internalMachine", internalMachine));
    when(environmentFactory.doCreate(any(), any(), any())).thenReturn(internalEnv);
    // when
    InternalEnvironment resultEnv = environmentFactory.create(sourceEnv);
    // then
    assertEquals(resultEnv.getMachines().get("internalMachine").getAttributes().get(CONTAINER_SOURCE_ATTRIBUTE), RECIPE_CONTAINER_SOURCE);
}
Also used : Environment(org.eclipse.che.api.core.model.workspace.config.Environment) Test(org.testng.annotations.Test)

Example 5 with Environment

use of org.eclipse.che.api.core.model.workspace.config.Environment in project devspaces-images by redhat-developer.

the class LimitsCheckingWorkspaceManager method checkRamResourcesAvailability.

@VisibleForTesting
void checkRamResourcesAvailability(String accountId, String namespace, WorkspaceConfig config, @Nullable String envName) throws NotFoundException, ServerException, ConflictException {
    if (config.getEnvironments().isEmpty()) {
        return;
    }
    final Environment environment = config.getEnvironments().get(firstNonNull(envName, config.getDefaultEnv()));
    final ResourceImpl ramToUse = new ResourceImpl(RamResourceType.ID, environmentRamCalculator.calculate(environment), RamResourceType.UNIT);
    try {
        resourceManager.checkResourcesAvailability(accountId, singletonList(ramToUse));
    } catch (NoEnoughResourcesException e) {
        final Resource requiredRam = // starting of workspace requires only RAM resource
        e.getRequiredResources().get(0);
        final Resource availableRam = getResourceOrDefault(e.getAvailableResources(), RamResourceType.ID, 0, RamResourceType.UNIT);
        final Resource usedRam = getResourceOrDefault(resourceManager.getUsedResources(accountId), RamResourceType.ID, 0, RamResourceType.UNIT);
        throw new LimitExceededException(format("Workspace %s/%s needs %s to start. Your account has %s available and %s in use. " + "The workspace can't be start. Stop other workspaces or grant more resources.", namespace, config.getName(), printResourceInfo(requiredRam), printResourceInfo(availableRam), printResourceInfo(usedRam)));
    }
}
Also used : NoEnoughResourcesException(org.eclipse.che.multiuser.resource.api.exception.NoEnoughResourcesException) ResourceImpl(org.eclipse.che.multiuser.resource.spi.impl.ResourceImpl) Resource(org.eclipse.che.multiuser.resource.model.Resource) Environment(org.eclipse.che.api.core.model.workspace.config.Environment) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Aggregations

Environment (org.eclipse.che.api.core.model.workspace.config.Environment)16 VisibleForTesting (com.google.common.annotations.VisibleForTesting)6 Test (org.testng.annotations.Test)6 NotFoundException (org.eclipse.che.api.core.NotFoundException)4 ServerException (org.eclipse.che.api.core.ServerException)4 WorkspaceConfigImpl (org.eclipse.che.api.workspace.server.model.impl.WorkspaceConfigImpl)4 InfrastructureException (org.eclipse.che.api.workspace.server.spi.InfrastructureException)4 InternalInfrastructureException (org.eclipse.che.api.workspace.server.spi.InternalInfrastructureException)4 InternalEnvironment (org.eclipse.che.api.workspace.server.spi.environment.InternalEnvironment)4 ImmutableMap (com.google.common.collect.ImmutableMap)2 Map (java.util.Map)2 ConflictException (org.eclipse.che.api.core.ConflictException)2 ValidationException (org.eclipse.che.api.core.ValidationException)2 WorkspaceStatus (org.eclipse.che.api.core.model.workspace.WorkspaceStatus)2 Recipe (org.eclipse.che.api.core.model.workspace.config.Recipe)2 MachineConfigImpl (org.eclipse.che.api.workspace.server.model.impl.MachineConfigImpl)2 WorkspaceImpl (org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl)2 InternalRuntime (org.eclipse.che.api.workspace.server.spi.InternalRuntime)2 Unlocker (org.eclipse.che.commons.lang.concurrent.Unlocker)2 NoEnoughResourcesException (org.eclipse.che.multiuser.resource.api.exception.NoEnoughResourcesException)2