Search in sources :

Example 11 with Container

use of com.spotify.docker.client.messages.Container in project linuxtools by eclipse.

the class DockerConnection method listContainers.

private List<IDockerContainer> listContainers() throws DockerException {
    final Map<String, IDockerContainer> updatedContainersById = new HashMap<>();
    List<IDockerContainer> sortedContainers;
    synchronized (containerLock) {
        try {
            final List<Container> nativeContainers = new ArrayList<>();
            synchronized (clientLock) {
                // containers list left in the queue
                if (client == null) {
                    // there's no client.
                    return Collections.emptyList();
                }
                nativeContainers.addAll(client.listContainers(DockerClient.ListContainersParam.allContainers()));
            }
            // in the future.
            for (Container nativeContainer : nativeContainers) {
                // them with a logging thread.
                if (nativeContainer.status() != null && nativeContainer.status().startsWith(Messages.Exited_specifier)) {
                    synchronized (loggingThreads) {
                        if (loggingThreads.containsKey(nativeContainer.id())) {
                            loggingThreads.get(nativeContainer.id()).requestStop();
                            loggingThreads.remove(nativeContainer.id());
                        }
                    }
                }
                // skip containers that are being removed
                if (nativeContainer.status() != null && nativeContainer.status().equals(Messages.Removal_In_Progress_specifier)) {
                    continue;
                }
                // re-use info from existing container with same id
                if (this.containers != null && this.containersById.containsKey(nativeContainer.id())) {
                    final IDockerContainer container = this.containersById.get(nativeContainer.id());
                    updatedContainersById.put(nativeContainer.id(), new DockerContainer(this, nativeContainer, container.info()));
                } else {
                    updatedContainersById.put(nativeContainer.id(), new DockerContainer(this, nativeContainer));
                }
            }
        } catch (DockerTimeoutException e) {
            if (isOpen()) {
                Activator.log(new Status(IStatus.WARNING, Activator.PLUGIN_ID, Messages.Docker_Connection_Timeout, e));
                close();
            }
        } catch (com.spotify.docker.client.exceptions.DockerException | InterruptedException e) {
            if (isOpen() && e.getCause() != null && e.getCause().getCause() != null && e.getCause().getCause() instanceof ProcessingException) {
                close();
            } else {
                throw new DockerException(e.getMessage());
            }
        } finally {
            this.containersById = updatedContainersById;
            sortedContainers = sort(updatedContainersById.values(), (container, otherContainer) -> container.name().compareTo(otherContainer.name()));
            this.containers = sortedContainers;
        }
    }
    // perform notification outside of containerLock so we don't have a View
    // causing a deadlock
    // TODO: we should probably notify the listeners only if the containers
    // list changed.
    notifyContainerListeners(sortedContainers);
    return sortedContainers;
}
Also used : IDockerContainer(org.eclipse.linuxtools.docker.core.IDockerContainer) Status(org.eclipse.core.runtime.Status) EnumDockerLoggingStatus(org.eclipse.linuxtools.docker.core.EnumDockerLoggingStatus) IStatus(org.eclipse.core.runtime.IStatus) DockerException(org.eclipse.linuxtools.docker.core.DockerException) BuildParam(com.spotify.docker.client.DockerClient.BuildParam) Arrays(java.util.Arrays) IDockerVersion(org.eclipse.linuxtools.docker.core.IDockerVersion) DockerImageQualifier(org.eclipse.linuxtools.internal.docker.core.DockerImage.DockerImageQualifier) Info(com.spotify.docker.client.messages.Info) IDockerContainer(org.eclipse.linuxtools.docker.core.IDockerContainer) IDockerConnectionInfo(org.eclipse.linuxtools.docker.core.IDockerConnectionInfo) ILogger(org.eclipse.linuxtools.docker.core.ILogger) InetAddress(java.net.InetAddress) DockerClient(com.spotify.docker.client.DockerClient) Map(java.util.Map) IEclipsePreferences(org.eclipse.core.runtime.preferences.IEclipsePreferences) DockerPingConnectionException(org.eclipse.linuxtools.docker.core.DockerPingConnectionException) IDockerImageInfo(org.eclipse.linuxtools.docker.core.IDockerImageInfo) Ipam(com.spotify.docker.client.messages.Ipam) NetworkInterface(java.net.NetworkInterface) Set(java.util.Set) Status(org.eclipse.core.runtime.Status) DockerTimeoutException(com.spotify.docker.client.exceptions.DockerTimeoutException) IDockerConnection(org.eclipse.linuxtools.docker.core.IDockerConnection) InstanceScope(org.eclipse.core.runtime.preferences.InstanceScope) Path(org.eclipse.core.runtime.Path) IDockerConnection2(org.eclipse.linuxtools.docker.core.IDockerConnection2) ProcessingException(javax.ws.rs.ProcessingException) IDockerHostConfig(org.eclipse.linuxtools.docker.core.IDockerHostConfig) NetworkConfig(com.spotify.docker.client.messages.NetworkConfig) IDockerNetworkCreation(org.eclipse.linuxtools.docker.core.IDockerNetworkCreation) IDockerProgressHandler(org.eclipse.linuxtools.docker.core.IDockerProgressHandler) ContainerNotFoundException(com.spotify.docker.client.exceptions.ContainerNotFoundException) ContainerConfig(com.spotify.docker.client.messages.ContainerConfig) DockerCertificateException(com.spotify.docker.client.exceptions.DockerCertificateException) IDockerImage(org.eclipse.linuxtools.docker.core.IDockerImage) ContainerInfo(com.spotify.docker.client.messages.ContainerInfo) IDockerConnectionSettings(org.eclipse.linuxtools.docker.core.IDockerConnectionSettings) ITerminalServiceOutputStreamMonitorListener(org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener) Network(com.spotify.docker.client.messages.Network) ListenerList(org.eclipse.core.runtime.ListenerList) ArrayList(java.util.ArrayList) ITerminalsConnectorConstants(org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants) LogsParam(com.spotify.docker.client.DockerClient.LogsParam) SocketException(java.net.SocketException) IDockerConfParameter(org.eclipse.linuxtools.docker.core.IDockerConfParameter) LxcConfParameter(com.spotify.docker.client.messages.HostConfig.LxcConfParameter) IRegistryAccount(org.eclipse.linuxtools.docker.core.IRegistryAccount) EnumDockerConnectionState(org.eclipse.linuxtools.docker.core.EnumDockerConnectionState) IDockerContainerInfo(org.eclipse.linuxtools.docker.core.IDockerContainerInfo) IOException(java.io.IOException) IDockerNetworkConfig(org.eclipse.linuxtools.docker.core.IDockerNetworkConfig) Messages(org.eclipse.linuxtools.docker.core.Messages) UnknownHostException(java.net.UnknownHostException) BindingType(org.eclipse.linuxtools.docker.core.IDockerConnectionSettings.BindingType) IDockerImageBuildOptions(org.eclipse.linuxtools.docker.core.IDockerImageBuildOptions) ITerminalService(org.eclipse.tm.terminal.view.core.interfaces.ITerminalService) Container(com.spotify.docker.client.messages.Container) ContainerChange(com.spotify.docker.client.messages.ContainerChange) IDockerImageSearchResult(org.eclipse.linuxtools.docker.core.IDockerImageSearchResult) IDockerNetwork(org.eclipse.linuxtools.docker.core.IDockerNetwork) SecurePreferencesFactory(org.eclipse.equinox.security.storage.SecurePreferencesFactory) ImageSearchResult(com.spotify.docker.client.messages.ImageSearchResult) WritableByteChannel(java.nio.channels.WritableByteChannel) FileSystems(java.nio.file.FileSystems) RegistryAuth(com.spotify.docker.client.messages.RegistryAuth) AttachParameter(com.spotify.docker.client.DockerClient.AttachParameter) IDockerIpamConfig(org.eclipse.linuxtools.docker.core.IDockerIpamConfig) ByteBuffer(java.nio.ByteBuffer) EnumDockerLoggingStatus(org.eclipse.linuxtools.docker.core.EnumDockerLoggingStatus) IStatus(org.eclipse.core.runtime.IStatus) Activator(org.eclipse.linuxtools.docker.core.Activator) IDockerImageListener(org.eclipse.linuxtools.docker.core.IDockerImageListener) IPath(org.eclipse.core.runtime.IPath) EncodingUtils(org.eclipse.equinox.security.storage.EncodingUtils) TerminalServiceFactory(org.eclipse.tm.terminal.view.core.TerminalServiceFactory) IDockerContainerChange(org.eclipse.linuxtools.docker.core.IDockerContainerChange) ImageInfo(com.spotify.docker.client.messages.ImageInfo) IDockerPortBinding(org.eclipse.linuxtools.docker.core.IDockerPortBinding) NLS(org.eclipse.osgi.util.NLS) ImmutableMap(com.google.common.collect.ImmutableMap) Collection(java.util.Collection) DockerConnectionManager(org.eclipse.linuxtools.docker.core.DockerConnectionManager) StorageException(org.eclipse.equinox.security.storage.StorageException) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) ContainerExit(com.spotify.docker.client.messages.ContainerExit) List(java.util.List) ExecCreateParam(com.spotify.docker.client.DockerClient.ExecCreateParam) Version(com.spotify.docker.client.messages.Version) Entry(java.util.Map.Entry) IDockerImageHierarchyNode(org.eclipse.linuxtools.docker.core.IDockerImageHierarchyNode) HostConfig(com.spotify.docker.client.messages.HostConfig) IDockerContainerListener(org.eclipse.linuxtools.docker.core.IDockerContainerListener) DockerContainerNotFoundException(org.eclipse.linuxtools.docker.core.DockerContainerNotFoundException) HashMap(java.util.HashMap) LogStream(com.spotify.docker.client.LogStream) HashSet(java.util.HashSet) DockerException(org.eclipse.linuxtools.docker.core.DockerException) IDockerContainerConfig(org.eclipse.linuxtools.docker.core.IDockerContainerConfig) ContainerCreation(com.spotify.docker.client.messages.ContainerCreation) OutputStream(java.io.OutputStream) Job(org.eclipse.core.runtime.jobs.Job) DockerOpenConnectionException(org.eclipse.linuxtools.docker.core.DockerOpenConnectionException) ExecCreation(com.spotify.docker.client.messages.ExecCreation) Image(com.spotify.docker.client.messages.Image) PortBinding(com.spotify.docker.client.messages.PortBinding) Closeable(java.io.Closeable) Comparator(java.util.Comparator) Collections(java.util.Collections) IDockerContainerExit(org.eclipse.linuxtools.docker.core.IDockerContainerExit) InputStream(java.io.InputStream) ISecurePreferences(org.eclipse.equinox.security.storage.ISecurePreferences) IDockerContainer(org.eclipse.linuxtools.docker.core.IDockerContainer) HashMap(java.util.HashMap) DockerTimeoutException(com.spotify.docker.client.exceptions.DockerTimeoutException) ArrayList(java.util.ArrayList) IDockerContainer(org.eclipse.linuxtools.docker.core.IDockerContainer) Container(com.spotify.docker.client.messages.Container) ProcessingException(javax.ws.rs.ProcessingException)

Aggregations

Container (com.spotify.docker.client.messages.Container)11 DockerClient (com.spotify.docker.client.DockerClient)9 Test (org.junit.Test)5 Image (com.spotify.docker.client.messages.Image)3 HeliosClient (com.spotify.helios.client.HeliosClient)3 JobId (com.spotify.helios.common.descriptors.JobId)3 Integer.toHexString (java.lang.Integer.toHexString)3 IDockerContainer (org.eclipse.linuxtools.docker.core.IDockerContainer)3 Matchers.containsString (org.hamcrest.Matchers.containsString)3 ContainerNotFoundException (com.spotify.docker.client.exceptions.ContainerNotFoundException)2 DockerTimeoutException (com.spotify.docker.client.exceptions.DockerTimeoutException)2 ContainerCreation (com.spotify.docker.client.messages.ContainerCreation)2 ContainerInfo (com.spotify.docker.client.messages.ContainerInfo)2 ImageInfo (com.spotify.docker.client.messages.ImageInfo)2 TaskStatus (com.spotify.helios.common.descriptors.TaskStatus)2 IOException (java.io.IOException)2 IDockerImage (org.eclipse.linuxtools.docker.core.IDockerImage)2 ImmutableMap (com.google.common.collect.ImmutableMap)1 Service (com.google.common.util.concurrent.Service)1 DefaultDockerClient (com.spotify.docker.client.DefaultDockerClient)1