diff --git a/core/ide/che-core-ide-app/src/main/resources/org/eclipse/che/ide/CoreLocalizationConstant.properties b/core/ide/che-core-ide-app/src/main/resources/org/eclipse/che/ide/CoreLocalizationConstant.properties index ce5b10b554..126ea8175b 100644 --- a/core/ide/che-core-ide-app/src/main/resources/org/eclipse/che/ide/CoreLocalizationConstant.properties +++ b/core/ide/che-core-ide-app/src/main/resources/org/eclipse/che/ide/CoreLocalizationConstant.properties @@ -265,7 +265,7 @@ workspace.start.failed=Failed to start workspace failed.to.load.factory=Failed to load factory workspace.config.undefined=Workspace config is not defined. start.ws.error.title=Start Workspace Error -start.ws.error.content=Workspace {0} failed to start. The reason: {1}. Try restarting it, start existing workspace or create a new one. +start.ws.error.content=Could not start workspace {0}. Reason: {1} ############# Project Explorer ########## project.explorer.project.configuration.failed=Failed to configure project {0} diff --git a/plugins/plugin-docker/che-plugin-docker-client/src/main/java/org/eclipse/che/plugin/docker/client/DockerConnector.java b/plugins/plugin-docker/che-plugin-docker-client/src/main/java/org/eclipse/che/plugin/docker/client/DockerConnector.java index fd95c31e6f..bb0d1d4b4f 100644 --- a/plugins/plugin-docker/che-plugin-docker-client/src/main/java/org/eclipse/che/plugin/docker/client/DockerConnector.java +++ b/plugins/plugin-docker/che-plugin-docker-client/src/main/java/org/eclipse/che/plugin/docker/client/DockerConnector.java @@ -116,7 +116,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return parseResponseStreamAndClose(response.getInputStream(), org.eclipse.che.plugin.docker.client.json.SystemInfo.class); } catch (JsonParseException e) { @@ -137,7 +137,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return parseResponseStreamAndClose(response.getInputStream(), Version.class); } catch (JsonParseException e) { @@ -158,7 +158,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return parseResponseStreamAndClose(response.getInputStream(), Image[].class); } catch (JsonParseException e) { @@ -241,7 +241,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return parseResponseStreamAndClose(response.getInputStream(), ImageInfo.class); } catch (JsonParseException e) { @@ -310,7 +310,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (!(NO_CONTENT.getStatusCode() == status || NOT_MODIFIED.getStatusCode() == status)) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } } } @@ -337,7 +337,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (NO_CONTENT.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } } } @@ -373,7 +373,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (NO_CONTENT.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } } } @@ -398,7 +398,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return parseResponseStreamAndClose(response.getInputStream(), ContainerExitStatus.class).getStatusCode(); } catch (JsonParseException e) { @@ -425,7 +425,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return parseResponseStreamAndClose(response.getInputStream(), ContainerInfo.class); } catch (JsonParseException e) { @@ -461,7 +461,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } try (InputStream responseStream = response.getInputStream()) { new LogMessagePumper(responseStream, containerLogsProcessor).start(); @@ -502,7 +502,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } // TarUtils uses apache commons compress library for working with tar archive and it fails // (e.g. doesn't unpack all files from archive in case of coping directory) when we try to use stream from docker remote API. @@ -538,7 +538,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (status / 100 != 2) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return new Exec(cmd, parseResponseStreamAndClose(response.getInputStream(), ExecCreated.class).getId()); } catch (JsonParseException e) { @@ -563,7 +563,7 @@ public class DockerConnector { // According to last doc (https://docs.docker.com/reference/api/docker_remote_api_v1.15/#exec-start) status must be 201 but // in fact docker API returns 200 or 204 status. if (status / 100 != 2) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } if (status != NO_CONTENT.getStatusCode() && execOutputProcessor != null) { try (InputStream responseStream = response.getInputStream()) { @@ -586,7 +586,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return parseResponseStreamAndClose(response.getInputStream(), ExecInfo.class); } catch (Exception e) { @@ -617,7 +617,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return parseResponseStreamAndClose(response.getInputStream(), ContainerProcesses.class); } catch (JsonParseException e) { @@ -647,7 +647,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (status != OK.getStatusCode()) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return new CloseConnectionInputStream(response.getInputStream(), connection); @@ -695,7 +695,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (status != OK.getStatusCode()) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } } finally { FileCleaner.addFile(tarFile); @@ -742,7 +742,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } try (InputStream responseStream = response.getInputStream()) { @@ -798,7 +798,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } try (InputStream responseStream = response.getInputStream()) { JsonMessageReader progressReader = new JsonMessageReader<>(responseStream, ProgressStatus.class); @@ -854,7 +854,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } } } @@ -876,7 +876,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (status / 100 != 2) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } } } @@ -902,7 +902,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } try (InputStream responseStream = response.getInputStream()) { JsonMessageReader progressReader = new JsonMessageReader<>(responseStream, ProgressStatus.class); @@ -981,7 +981,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (CREATED.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return parseResponseStreamAndClose(response.getInputStream(), ContainerCommited.class).getId(); } catch (JsonParseException e) { @@ -1010,7 +1010,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (OK.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } try (InputStream responseStream = response.getInputStream()) { JsonMessageReader progressReader = new JsonMessageReader<>(responseStream, ProgressStatus.class); @@ -1068,7 +1068,7 @@ public class DockerConnector { final DockerResponse response = connection.request(); final int status = response.getStatus(); if (CREATED.getStatusCode() != status) { - throw new DockerException(getDockerExceptionMessage(response), status); + throw getDockerException(response); } return parseResponseStreamAndClose(response.getInputStream(), ContainerCreated.class); } catch (JsonParseException e) { @@ -1093,12 +1093,12 @@ public class DockerConnector { final int status = response.getStatus(); if (!(NO_CONTENT.getStatusCode() == status || NOT_MODIFIED.getStatusCode() == status)) { - final String errorMessage = getDockerExceptionMessage(response); + final DockerException dockerException = getDockerException(response); if (OK.getStatusCode() == status) { // docker API 1.20 returns 200 with warning message about usage of loopback docker backend - LOG.warn(errorMessage); + LOG.warn(dockerException.getLocalizedMessage()); } else { - throw new DockerException(errorMessage, status); + throw dockerException; } } } @@ -1125,12 +1125,13 @@ public class DockerConnector { } } - private String getDockerExceptionMessage(DockerResponse response) throws IOException { - try (InputStream is = response.getInputStream()) { - return "Error response from docker API, status: " + - response.getStatus() + - ", message: " + - CharStreams.toString(new InputStreamReader(is)); + protected DockerException getDockerException(DockerResponse response) throws IOException { + try (InputStreamReader isr = new InputStreamReader(response.getInputStream())) { + String dockerResponseContent = CharStreams.toString(isr); + return new DockerException( + "Error response from docker API, status: " + response.getStatus() + ", message: " + dockerResponseContent, + dockerResponseContent, + response.getStatus()); } } diff --git a/plugins/plugin-docker/che-plugin-docker-client/src/main/java/org/eclipse/che/plugin/docker/client/DockerException.java b/plugins/plugin-docker/che-plugin-docker-client/src/main/java/org/eclipse/che/plugin/docker/client/DockerException.java index 1a6e952b62..9a28969e9b 100644 --- a/plugins/plugin-docker/che-plugin-docker-client/src/main/java/org/eclipse/che/plugin/docker/client/DockerException.java +++ b/plugins/plugin-docker/che-plugin-docker-client/src/main/java/org/eclipse/che/plugin/docker/client/DockerException.java @@ -16,14 +16,26 @@ import java.io.IOException; * @author andrew00x */ public final class DockerException extends IOException { - private final int status; + private final int status; + private final String originError; public DockerException(String message, int status) { super(message); this.status = status; + this.originError = null; + } + + public DockerException(String message, String originError, int status) { + super(message); + this.status = status; + this.originError = originError; } public int getStatus() { return status; } + + public String getOriginError() { + return originError; + } } diff --git a/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/DockerInstanceProvider.java b/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/DockerInstanceProvider.java index e8839a9e35..a627d37158 100644 --- a/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/DockerInstanceProvider.java +++ b/plugins/plugin-docker/che-plugin-docker-machine/src/main/java/org/eclipse/che/plugin/docker/machine/DockerInstanceProvider.java @@ -438,7 +438,7 @@ public class DockerInstanceProvider implements InstanceProvider { node, outputConsumer); } catch (IOException e) { - throw new MachineException(e); + throw new MachineException(e.getLocalizedMessage(), e); } }