From a4118b5511381a1c447b168efa857a6703d2c181 Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Mon, 28 Feb 2022 16:49:14 +0100 Subject: [PATCH] Fixed conflict, closes #137 Former-commit-id: aa052276434494b29a379cf170b73ba830395e33 --- .fda-deployment/teardown | 4 ++-- .../tuwien/endpoints/ContainerEndpoint.java | 2 +- .../endpoint/ContainerEndpointUnitTest.java | 6 +++--- .../ContainerServiceIntegrationTest.java | 4 ++-- .../ContainerAlreadyExistsException.java | 21 +++++++++++++++++++ .../at/tuwien/service/ContainerService.java | 2 +- .../service/impl/ContainerServiceImpl.java | 4 ++-- 7 files changed, 32 insertions(+), 11 deletions(-) create mode 100644 fda-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java diff --git a/.fda-deployment/teardown b/.fda-deployment/teardown index 3e6b1e5ba2..bda6f753d4 100755 --- a/.fda-deployment/teardown +++ b/.fda-deployment/teardown @@ -1,6 +1,6 @@ #!/bin/bash -docker container stop $(docker container ls -aq) || true -docker container rm $(docker container ls -aq) || true +docker container stop $(docker container ls -aq -f name=^/fda-.*) || true +docker container rm $(docker container ls -aq -f name=^/fda-.*) || true docker volume rm $(docker volume ls -q) || true docker network rm fda-userdb || true docker network rm fda-public || true \ No newline at end of file diff --git a/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java index 9eb1460800..fcbd14d942 100644 --- a/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java +++ b/fda-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java @@ -64,7 +64,7 @@ public class ContainerEndpoint { @ApiResponse(code = 404, message = "The container was not found after creation."), }) public ResponseEntity<ContainerBriefDto> create(@Valid @RequestBody ContainerCreateRequestDto data) - throws ImageNotFoundException, DockerClientException { + throws ImageNotFoundException, DockerClientException, ContainerAlreadyExistsException { final Container container = containerService.create(data); final ContainerBriefDto response = containerMapper.containerToDatabaseContainerBriefDto(container); return ResponseEntity.status(HttpStatus.CREATED) diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java index cec3ce6acf..ef8d4d557b 100644 --- a/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java +++ b/fda-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java @@ -54,7 +54,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { } @Test - public void create_succeeds() throws ImageNotFoundException, DockerClientException { + public void create_succeeds() throws ImageNotFoundException, DockerClientException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .name(CONTAINER_1_NAME) .repository(IMAGE_1.getRepository()) @@ -72,7 +72,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { @Disabled @Test - public void create_noImage_fails() throws DockerClientException, ImageNotFoundException { + public void create_noImage_fails() throws DockerClientException, ImageNotFoundException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .name(CONTAINER_1_NAME) .repository("image") @@ -89,7 +89,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { @Disabled @Test - public void create_docker_fails() throws DockerClientException, ImageNotFoundException { + public void create_docker_fails() throws DockerClientException, ImageNotFoundException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .name(CONTAINER_1_NAME) .repository(IMAGE_1.getRepository()) diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java index ebbbc7bb99..a478b2a6c1 100644 --- a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java +++ b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java @@ -146,7 +146,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { } @Test - public void create_succeeds() throws DockerClientException, ImageNotFoundException { + public void create_succeeds() throws DockerClientException, ImageNotFoundException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .repository(IMAGE_1_REPOSITORY) .tag(IMAGE_1_TAG) @@ -159,7 +159,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { } @Test - public void create_conflictingNames_fails() throws DockerClientException, ImageNotFoundException { + public void create_conflictingNames_fails() throws DockerClientException, ImageNotFoundException, ContainerAlreadyExistsException { final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() .repository(IMAGE_1_REPOSITORY) .tag(IMAGE_1_TAG) diff --git a/fda-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java b/fda-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java new file mode 100644 index 0000000000..fb7031bfba --- /dev/null +++ b/fda-container-service/services/src/main/java/at/tuwien/exception/ContainerAlreadyExistsException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.CONFLICT, reason = "Container name exists") +public class ContainerAlreadyExistsException extends Exception { + + public ContainerAlreadyExistsException(String message) { + super(message); + } + + public ContainerAlreadyExistsException(String message, Throwable thr) { + super(message, thr); + } + + public ContainerAlreadyExistsException(Throwable thr) { + super(thr); + } + +} diff --git a/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java b/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java index 346d7034df..1b0c7db406 100644 --- a/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ b/fda-container-service/services/src/main/java/at/tuwien/service/ContainerService.java @@ -9,7 +9,7 @@ import java.util.List; public interface ContainerService { @Transactional - Container create(ContainerCreateRequestDto createDto) throws ImageNotFoundException, DockerClientException; + Container create(ContainerCreateRequestDto createDto) throws ImageNotFoundException, DockerClientException, ContainerAlreadyExistsException; @Transactional Container stop(Long containerId) throws ContainerNotFoundException, DockerClientException; diff --git a/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java index 3662f91b11..d930f276d5 100644 --- a/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java +++ b/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java @@ -53,7 +53,7 @@ public class ContainerServiceImpl implements ContainerService { @Override @Transactional - public Container create(ContainerCreateRequestDto createDto) throws ImageNotFoundException, DockerClientException { + public Container create(ContainerCreateRequestDto createDto) throws ImageNotFoundException, DockerClientException, ContainerAlreadyExistsException { final Optional<ContainerImage> image = imageRepository.findByRepositoryAndTag(createDto.getRepository(), createDto.getTag()); if (image.isEmpty()) { log.error("failed to get image with name {}:{}", createDto.getRepository(), createDto.getTag()); @@ -82,7 +82,7 @@ public class ContainerServiceImpl implements ContainerService { .exec(); } catch (ConflictException e) { log.error("Conflicting names {}", createDto.getName()); - throw new DockerClientException("Unexpected behavior", e); + throw new ContainerAlreadyExistsException("Unexpected behavior", e); } catch (NotFoundException e) { log.error("The image {}:{} not available on the container service", createDto.getRepository(), createDto.getTag()); log.debug("payload was {}", createDto); -- GitLab