Search in sources :

Example 1 with Nullable

use of org.eclipse.che.commons.annotation.Nullable in project che by eclipse.

the class Gdb method next.

/**
     * `next` command.
     */
@Nullable
public GdbInfoLine next() throws IOException, InterruptedException, DebuggerException {
    sendCommand("next");
    GdbInfoProgram gdbInfoProgram = infoProgram();
    if (gdbInfoProgram.getStoppedAddress() == null) {
        return null;
    }
    return infoLine();
}
Also used : GdbInfoProgram(org.eclipse.che.plugin.gdb.server.parser.GdbInfoProgram) Nullable(org.eclipse.che.commons.annotation.Nullable)

Example 2 with Nullable

use of org.eclipse.che.commons.annotation.Nullable in project che by eclipse.

the class EditorPartStackPresenter method getPartByPath.

@Nullable
public PartPresenter getPartByPath(Path path) {
    for (TabItem tab : parts.keySet()) {
        EditorTab editorTab = (EditorTab) tab;
        Path currentPath = editorTab.getFile().getLocation();
        if (currentPath.equals(path)) {
            return parts.get(tab);
        }
    }
    return null;
}
Also used : Path(org.eclipse.che.ide.resource.Path) TabItem(org.eclipse.che.ide.api.parts.PartStackView.TabItem) EditorTab(org.eclipse.che.ide.api.parts.EditorTab) Nullable(org.eclipse.che.commons.annotation.Nullable)

Example 3 with Nullable

use of org.eclipse.che.commons.annotation.Nullable in project che by eclipse.

the class EditorPartStackPresenter method getTabByPath.

@Nullable
@Override
public EditorTab getTabByPath(@NotNull Path path) {
    for (TabItem tab : parts.keySet()) {
        EditorTab editorTab = (EditorTab) tab;
        Path currentPath = editorTab.getFile().getLocation();
        if (currentPath.equals(path)) {
            return editorTab;
        }
    }
    return null;
}
Also used : Path(org.eclipse.che.ide.resource.Path) TabItem(org.eclipse.che.ide.api.parts.PartStackView.TabItem) EditorTab(org.eclipse.che.ide.api.parts.EditorTab) Nullable(org.eclipse.che.commons.annotation.Nullable)

Example 4 with Nullable

use of org.eclipse.che.commons.annotation.Nullable in project che by eclipse.

the class JavaDebuggerUtils method binSearch.

/**
     * Searches the given source range of the container for a member that is
     * not the same as the given type.
     *
     * @param type
     *         the {@link IType}
     * @param start
     *         the starting position
     * @param end
     *         the ending position
     * @return the {@link IMember} from the given start-end range
     * @throws JavaModelException
     *         if there is a problem with the backing Java model
     */
@Nullable
private IMember binSearch(IType type, int start, int end) throws JavaModelException {
    IJavaElement je = getElementAt(type, start);
    if (je != null && !je.equals(type)) {
        return asMember(je);
    }
    if (end > start) {
        je = getElementAt(type, end);
        if (je != null && !je.equals(type)) {
            return asMember(je);
        }
        int mid = ((end - start) / 2) + start;
        if (mid > start) {
            je = binSearch(type, start + 1, mid);
            if (je == null) {
                je = binSearch(type, mid + 1, end - 1);
            }
            return asMember(je);
        }
    }
    return null;
}
Also used : IJavaElement(org.eclipse.jdt.core.IJavaElement) Nullable(org.eclipse.che.commons.annotation.Nullable)

Example 5 with Nullable

use of org.eclipse.che.commons.annotation.Nullable in project che by eclipse.

the class CheEnvironmentEngine method startEnvironmentQueue.

/**
     * Starts all machine from machine queue of environment.
     */
private void startEnvironmentQueue(String namespace, String workspaceId, String devMachineName, String networkId, boolean recover, MachineStartedHandler startedHandler) throws ServerException, EnvironmentException {
    // Starting all machines in environment one by one by getting configs
    // from the corresponding starting queue.
    // Config will be null only if there are no machines left in the queue
    String envName;
    MessageConsumer<MachineLogMessage> envLogger;
    String creator = EnvironmentContext.getCurrent().getSubject().getUserId();
    try (@SuppressWarnings("unused") Unlocker u = stripedLocks.readLock(workspaceId)) {
        EnvironmentHolder environmentHolder = environments.get(workspaceId);
        if (environmentHolder == null) {
            throw new ServerException("Environment start is interrupted.");
        }
        envName = environmentHolder.name;
        envLogger = environmentHolder.logger;
    }
    try {
        machineProvider.createNetwork(networkId);
        String machineName = queuePeekOrFail(workspaceId);
        while (machineName != null) {
            boolean isDev = devMachineName.equals(machineName);
            // Environment start is failed when any machine start is failed, so if any error
            // occurs during machine creation then environment start fail is reported and
            // start resources such as queue and descriptor must be cleaned up
            CheServiceImpl service;
            @Nullable ExtendedMachine extendedMachine;
            try (@SuppressWarnings("unused") Unlocker u = stripedLocks.readLock(workspaceId)) {
                EnvironmentHolder environmentHolder = environments.get(workspaceId);
                if (environmentHolder == null) {
                    throw new ServerException("Environment start is interrupted.");
                }
                service = environmentHolder.environment.getServices().get(machineName);
                extendedMachine = environmentHolder.environmentConfig.getMachines().get(machineName);
            }
            // should not happen
            if (service == null) {
                LOG.error("Start of machine with name {} in workspace {} failed. Machine not found in start queue", machineName, workspaceId);
                throw new ServerException(format("Environment of workspace with ID '%s' failed due to internal error", workspaceId));
            }
            final String finalMachineName = machineName;
            // needed to reuse startInstance method and
            // create machine instances by different implementation-specific providers
            MachineStarter machineStarter = (machineLogger, machineSource) -> {
                CheServiceImpl serviceWithNormalizedSource = normalizeServiceSource(service, machineSource);
                return machineProvider.startService(namespace, workspaceId, envName, finalMachineName, isDev, networkId, serviceWithNormalizedSource, machineLogger);
            };
            MachineImpl machine = MachineImpl.builder().setConfig(MachineConfigImpl.builder().setDev(isDev).setLimits(new MachineLimitsImpl(bytesToMB(service.getMemLimit()))).setType("docker").setName(machineName).setEnvVariables(service.getEnvironment()).build()).setId(service.getId()).setWorkspaceId(workspaceId).setStatus(MachineStatus.CREATING).setEnvName(envName).setOwner(creator).build();
            checkInterruption(workspaceId, envName);
            Instance instance = startInstance(recover, envLogger, machine, machineStarter);
            checkInterruption(workspaceId, envName);
            startedHandler.started(instance, extendedMachine);
            checkInterruption(workspaceId, envName);
            // Machine destroying is an expensive operation which must be
            // performed outside of the lock, this section checks if
            // the environment wasn't stopped while it is starting and sets
            // polled flag to true if the environment wasn't stopped.
            // Also polls the proceeded machine configuration from the queue
            boolean queuePolled = false;
            try (@SuppressWarnings("unused") Unlocker u = stripedLocks.writeLock(workspaceId)) {
                ensurePreDestroyIsNotExecuted();
                EnvironmentHolder environmentHolder = environments.get(workspaceId);
                if (environmentHolder != null) {
                    final Queue<String> queue = environmentHolder.startQueue;
                    if (queue != null) {
                        queue.poll();
                        queuePolled = true;
                    }
                }
            }
            // must be destroyed
            if (!queuePolled) {
                try {
                    eventService.publish(newDto(MachineStatusEvent.class).withEventType(MachineStatusEvent.EventType.DESTROYING).withDev(isDev).withMachineName(machineName).withMachineId(instance.getId()).withWorkspaceId(workspaceId));
                    instance.destroy();
                    removeMachine(workspaceId, instance.getId());
                    eventService.publish(newDto(MachineStatusEvent.class).withEventType(MachineStatusEvent.EventType.DESTROYED).withDev(isDev).withMachineName(machineName).withMachineId(instance.getId()).withWorkspaceId(workspaceId));
                } catch (MachineException e) {
                    LOG.error(e.getLocalizedMessage(), e);
                }
                throw new ServerException("Workspace '" + workspaceId + "' start interrupted. Workspace stopped before all its machines started");
            }
            machineName = queuePeekOrFail(workspaceId);
        }
    } catch (RuntimeException | ServerException | EnvironmentStartInterruptedException e) {
        boolean interrupted = Thread.interrupted();
        EnvironmentHolder env;
        try (@SuppressWarnings("unused") Unlocker u = stripedLocks.writeLock(workspaceId)) {
            env = environments.remove(workspaceId);
        }
        try {
            destroyEnvironment(env.networkId, env.machines);
        } catch (Exception remEx) {
            LOG.error(remEx.getLocalizedMessage(), remEx);
        }
        if (interrupted) {
            throw new EnvironmentStartInterruptedException(workspaceId, envName);
        }
        try {
            throw e;
        } catch (ServerException | EnvironmentStartInterruptedException rethrow) {
            throw rethrow;
        } catch (Exception wrap) {
            throw new ServerException(wrap.getMessage(), wrap);
        }
    }
}
Also used : MachineStatusEvent(org.eclipse.che.api.machine.shared.dto.event.MachineStatusEvent) MachineStatus(org.eclipse.che.api.core.model.machine.MachineStatus) EnvironmentImpl(org.eclipse.che.api.workspace.server.model.impl.EnvironmentImpl) MachineLimitsImpl(org.eclipse.che.api.machine.server.model.impl.MachineLimitsImpl) AgentImpl(org.eclipse.che.api.agent.shared.model.impl.AgentImpl) StripedLocks(org.eclipse.che.commons.lang.concurrent.StripedLocks) WorkspaceSharedPool(org.eclipse.che.api.workspace.server.WorkspaceSharedPool) AgentException(org.eclipse.che.api.agent.server.exception.AgentException) Utils.getDevMachineName(org.eclipse.che.api.workspace.shared.Utils.getDevMachineName) PreDestroy(javax.annotation.PreDestroy) Unlocker(org.eclipse.che.commons.lang.concurrent.Unlocker) EnvironmentStartInterruptedException(org.eclipse.che.api.environment.server.exception.EnvironmentStartInterruptedException) Map(java.util.Map) EnvironmentNotRunningException(org.eclipse.che.api.environment.server.exception.EnvironmentNotRunningException) MessageConsumer(org.eclipse.che.api.core.util.MessageConsumer) CheServiceBuildContextImpl(org.eclipse.che.api.environment.server.model.CheServiceBuildContextImpl) NameGenerator(org.eclipse.che.commons.lang.NameGenerator) EventService(org.eclipse.che.api.core.notification.EventService) ConcurrentCompositeLineConsumer(org.eclipse.che.api.core.util.lineconsumer.ConcurrentCompositeLineConsumer) EventSubscriber(org.eclipse.che.api.core.notification.EventSubscriber) Collections.emptyList(java.util.Collections.emptyList) MachineConfig(org.eclipse.che.api.core.model.machine.MachineConfig) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) DtoFactory.newDto(org.eclipse.che.dto.server.DtoFactory.newDto) SourceNotFoundException(org.eclipse.che.api.machine.server.exception.SourceNotFoundException) MachineSource(org.eclipse.che.api.core.model.machine.MachineSource) MachineLogMessageImpl(org.eclipse.che.api.machine.server.model.impl.MachineLogMessageImpl) Nullable(org.eclipse.che.commons.annotation.Nullable) String.format(java.lang.String.format) IoUtil(org.eclipse.che.commons.lang.IoUtil) Objects(java.util.Objects) EnvironmentException(org.eclipse.che.api.environment.server.exception.EnvironmentException) List(java.util.List) Environment(org.eclipse.che.api.core.model.workspace.Environment) PostConstruct(javax.annotation.PostConstruct) ServerConfImpl(org.eclipse.che.api.machine.server.model.impl.ServerConfImpl) Queue(java.util.Queue) Pattern(java.util.regex.Pattern) CheServiceImpl(org.eclipse.che.api.environment.server.model.CheServiceImpl) AgentRegistry(org.eclipse.che.api.agent.server.AgentRegistry) ConcurrentFileLineConsumer(org.eclipse.che.api.core.util.lineconsumer.ConcurrentFileLineConsumer) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) MachineInstanceProviders(org.eclipse.che.api.machine.server.MachineInstanceProviders) AgentKeyImpl(org.eclipse.che.api.agent.shared.model.impl.AgentKeyImpl) Size(org.eclipse.che.commons.lang.Size) LineConsumer(org.eclipse.che.api.core.util.LineConsumer) AbstractLineConsumer(org.eclipse.che.api.core.util.AbstractLineConsumer) ExtendedMachineImpl(org.eclipse.che.api.workspace.server.model.impl.ExtendedMachineImpl) Singleton(javax.inject.Singleton) OOM(org.eclipse.che.api.machine.server.event.InstanceStateEvent.Type.OOM) CheServicesEnvironmentImpl(org.eclipse.che.api.environment.server.model.CheServicesEnvironmentImpl) SnapshotImpl(org.eclipse.che.api.machine.server.model.impl.SnapshotImpl) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) EnvironmentContext(org.eclipse.che.commons.env.EnvironmentContext) InstanceProvider(org.eclipse.che.api.machine.server.spi.InstanceProvider) ApiException(org.eclipse.che.api.core.ApiException) ServerConf2(org.eclipse.che.api.core.model.workspace.ServerConf2) ConflictException(org.eclipse.che.api.core.ConflictException) InstanceStateEvent(org.eclipse.che.api.machine.server.event.InstanceStateEvent) Named(javax.inject.Named) Instance(org.eclipse.che.api.machine.server.spi.Instance) SnapshotDao(org.eclipse.che.api.machine.server.spi.SnapshotDao) MachineException(org.eclipse.che.api.machine.server.exception.MachineException) Logger(org.slf4j.Logger) ExtendedMachine(org.eclipse.che.api.core.model.workspace.ExtendedMachine) ServerConf(org.eclipse.che.api.core.model.machine.ServerConf) IOException(java.io.IOException) MachineLogMessage(org.eclipse.che.api.core.model.machine.MachineLogMessage) NotFoundException(org.eclipse.che.api.core.NotFoundException) File(java.io.File) Machine(org.eclipse.che.api.core.model.machine.Machine) MachineSourceImpl(org.eclipse.che.api.machine.server.model.impl.MachineSourceImpl) Collectors.toList(java.util.stream.Collectors.toList) MachineImpl(org.eclipse.che.api.machine.server.model.impl.MachineImpl) RecipeDownloader(org.eclipse.che.api.machine.server.util.RecipeDownloader) ServerException(org.eclipse.che.api.core.ServerException) MachineConfigImpl(org.eclipse.che.api.machine.server.model.impl.MachineConfigImpl) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) VisibleForTesting(com.google.common.annotations.VisibleForTesting) ArrayDeque(java.util.ArrayDeque) DIE(org.eclipse.che.api.machine.server.event.InstanceStateEvent.Type.DIE) ServerException(org.eclipse.che.api.core.ServerException) ExtendedMachineImpl(org.eclipse.che.api.workspace.server.model.impl.ExtendedMachineImpl) MachineImpl(org.eclipse.che.api.machine.server.model.impl.MachineImpl) CheServiceImpl(org.eclipse.che.api.environment.server.model.CheServiceImpl) Instance(org.eclipse.che.api.machine.server.spi.Instance) EnvironmentStartInterruptedException(org.eclipse.che.api.environment.server.exception.EnvironmentStartInterruptedException) MachineLimitsImpl(org.eclipse.che.api.machine.server.model.impl.MachineLimitsImpl) ExtendedMachine(org.eclipse.che.api.core.model.workspace.ExtendedMachine) AgentException(org.eclipse.che.api.agent.server.exception.AgentException) EnvironmentStartInterruptedException(org.eclipse.che.api.environment.server.exception.EnvironmentStartInterruptedException) EnvironmentNotRunningException(org.eclipse.che.api.environment.server.exception.EnvironmentNotRunningException) SourceNotFoundException(org.eclipse.che.api.machine.server.exception.SourceNotFoundException) EnvironmentException(org.eclipse.che.api.environment.server.exception.EnvironmentException) ApiException(org.eclipse.che.api.core.ApiException) ConflictException(org.eclipse.che.api.core.ConflictException) MachineException(org.eclipse.che.api.machine.server.exception.MachineException) IOException(java.io.IOException) NotFoundException(org.eclipse.che.api.core.NotFoundException) ServerException(org.eclipse.che.api.core.ServerException) Unlocker(org.eclipse.che.commons.lang.concurrent.Unlocker) MachineException(org.eclipse.che.api.machine.server.exception.MachineException) MachineLogMessage(org.eclipse.che.api.core.model.machine.MachineLogMessage) Nullable(org.eclipse.che.commons.annotation.Nullable)

Aggregations

Nullable (org.eclipse.che.commons.annotation.Nullable)7 ArrayList (java.util.ArrayList)2 EditorTab (org.eclipse.che.ide.api.parts.EditorTab)2 TabItem (org.eclipse.che.ide.api.parts.PartStackView.TabItem)2 Path (org.eclipse.che.ide.resource.Path)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 LanguageServer (io.typefox.lsapi.services.LanguageServer)1 File (java.io.File)1 IOException (java.io.IOException)1 String.format (java.lang.String.format)1 ArrayDeque (java.util.ArrayDeque)1 Collections.emptyList (java.util.Collections.emptyList)1 List (java.util.List)1 Map (java.util.Map)1 Objects (java.util.Objects)1 Queue (java.util.Queue)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)1 Pattern (java.util.regex.Pattern)1 Collectors.toList (java.util.stream.Collectors.toList)1