From b059ef3419c999336ee347f14b6eb1de9a79fe2f Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Mon, 31 May 2021 14:14:07 +0200 Subject: [PATCH] fixed some deletion bugs, merge should now be complete --- .../tuwien/endpoints/ContainerEndpoint.java | 16 +--------- .../at/tuwien/service/ContainerService.java | 32 +++++++++++++++++-- .../tuwien/entities/container/Container.java | 9 +++++- .../at/tuwien/entities/database/Database.java | 4 +-- .../tuwien/entities/database/table/Table.java | 2 +- .../tuwien/entities/database/table/View.java | 2 +- .../at/tuwien/service/PostgresService.java | 8 ++--- .../java/at/tuwien/service/TableService.java | 6 ++-- 8 files changed, 51 insertions(+), 28 deletions(-) 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 7e1c4e0281..9866d90948 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 @@ -81,22 +81,8 @@ public class ContainerEndpoint { public ResponseEntity<ContainerDto> findById(@NotNull @PathVariable Long id) throws DockerClientException, ContainerNotFoundException { final Container container = containerService.getById(id); final ContainerDto containerDto = containerMapper.containerToContainerDto(container); - try { - containerService.findIpAddresses(container.getHash()) - .forEach((key, value) -> containerDto.setIpAddress(IpAddressDto.builder() - .ipv4(value) - .build())); - } catch (ContainerNotRunningException e) { - throw new DockerClientException("Could not get container IP", e); - } - final ContainerStateDto stateDto = containerService.getContainerState(container.getHash()); - try { - containerDto.setState(stateDto); - } catch (NullPointerException e) { - throw new DockerClientException("Could not get container state"); - } return ResponseEntity.ok() - .body(containerDto); + .body(containerService.packInspectResponse(container, containerDto)); } @Transactional 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 65ec8dce0f..e343e8ca99 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 @@ -3,6 +3,7 @@ package at.tuwien.service; import at.tuwien.api.container.ContainerCreateRequestDto; import at.tuwien.api.container.ContainerDto; import at.tuwien.api.container.ContainerStateDto; +import at.tuwien.api.container.network.IpAddressDto; import at.tuwien.entities.container.Container; import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.exception.*; @@ -25,6 +26,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.SocketUtils; import org.springframework.transaction.annotation.Transactional; + import java.time.Instant; import java.util.HashMap; import java.util.List; @@ -139,6 +141,33 @@ public class ContainerService { return container.get(); } + /** + * Packs the container state into a response dto, return less information when the container is not running + * + * @param container The container + * @param out The response dto + * @return Information about the container + * @throws DockerClientException Upon failure to communicate with the Docker daemon + */ + public ContainerDto packInspectResponse(Container container, ContainerDto out) throws DockerClientException { + final ContainerStateDto stateDto = getContainerState(container.getHash()); + try { + out.setState(stateDto); + } catch (NullPointerException e) { + throw new DockerClientException("Could not get container state"); + } + try { + findIpAddresses(container.getHash()) + .forEach((key, value) -> out.setIpAddress(IpAddressDto.builder() + .ipv4(value) + .build())); + } catch (ContainerNotRunningException e) { + log.warn("could not get container ip: {}", e.getMessage()); + return out; + } + return out; + } + @Transactional public List<Container> getAll() { return containerRepository.findAll(); @@ -173,7 +202,6 @@ public class ContainerService { } final Map<String, String> networks = new HashMap<>(); if (!response.getState().getRunning()) { - log.warn("cannot get IPv4 of container that is not running"); throw new ContainerNotRunningException("container is not running"); } response.getNetworkSettings() @@ -195,7 +223,7 @@ public class ContainerService { log.error("docker client failed {}", e.getMessage()); throw new DockerClientException("docker client failed", e); } - log.debug("received container state {}", response); + log.debug("received container state {}", response.getState()); final ContainerDto dto = containerMapper.inspectContainerResponseToContainerDto(response); return dto.getState(); } diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java index 4463732bf9..8ad7a76344 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java @@ -1,6 +1,7 @@ package at.tuwien.entities.container; import at.tuwien.entities.container.image.ContainerImage; +import at.tuwien.entities.database.Database; import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.annotation.CreatedDate; @@ -9,6 +10,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; import java.time.Instant; +import java.util.List; @Data @Entity @@ -53,9 +55,14 @@ public class Container { private Integer port; @ToString.Include - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) private ContainerImage image; +// @ToString.Include +// @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) +// private List<Database> databases; + + @Column(nullable = false, updatable = false) @CreatedDate private Instant created; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java index f0f69fd359..ab606c2bff 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java @@ -34,7 +34,7 @@ public class Database { ) private Long id; - @ToString.Include + @ToString.Exclude @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) private Container container; @@ -46,7 +46,7 @@ public class Database { @Column(nullable = false) private String internalName; - @ToString.Exclude + @ToString.Include @OneToMany(mappedBy = "id", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<Table> tables; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java index ea7653f204..f3b4a38197 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java @@ -48,7 +48,7 @@ public class Table { @Column(nullable = false, unique = true) private String internalName; - @ToString.Include + @ToString.Exclude @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "tdbid", insertable = false, updatable = false) private Database database; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/View.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/View.java index 43a980f91b..f184becceb 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/View.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/View.java @@ -12,7 +12,7 @@ import java.time.Instant; import java.util.List; @Data -@Entity +/*@Entity // not yet in metadata db */ @Builder @AllArgsConstructor @NoArgsConstructor diff --git a/fda-table-service/services/src/main/java/at/tuwien/service/PostgresService.java b/fda-table-service/services/src/main/java/at/tuwien/service/PostgresService.java index 47e6523e98..e540ee0986 100644 --- a/fda-table-service/services/src/main/java/at/tuwien/service/PostgresService.java +++ b/fda-table-service/services/src/main/java/at/tuwien/service/PostgresService.java @@ -190,8 +190,8 @@ public class PostgresService extends JdbcConnector { final PreparedStatement statement = getDeleteStatement(getConnection(table.getDatabase()), table); statement.execute(); } catch (SQLException e) { - log.error("The SQL statement seems to contain invalid syntax"); - throw new TableMalformedException("The SQL statement seems to contain invalid syntax", e); + log.error("The SQL statement seems to contain invalid syntax or table not existing"); + throw new TableMalformedException("The SQL statement seems to contain invalid syntax or table not existing", e); } } @@ -204,8 +204,8 @@ public class PostgresService extends JdbcConnector { try { return connection.prepareStatement(deleteQuery.toString()); } catch (SQLException e) { - log.error("invalid syntax: {}", e.getMessage()); - throw new DataProcessingException("invalid syntax", e); + log.error("invalid syntax or not existing table: {}", e.getMessage()); + throw new DataProcessingException("invalid syntax or not existing table", e); } } diff --git a/fda-table-service/services/src/main/java/at/tuwien/service/TableService.java b/fda-table-service/services/src/main/java/at/tuwien/service/TableService.java index 0be876c3f7..eb9a58b8ef 100644 --- a/fda-table-service/services/src/main/java/at/tuwien/service/TableService.java +++ b/fda-table-service/services/src/main/java/at/tuwien/service/TableService.java @@ -66,14 +66,16 @@ public class TableService { log.error("Unable to find database {}", databaseId); throw new DatabaseNotFoundException("Unable to find database."); } - return database.get().getTables(); + final List<Table> tables = tableRepository.findByDatabase(database.get()); + log.debug("found tables {} in database: {}", tables, database.get()); + return tables; } @Transactional public void delete(Long databaseId, Long tableId) throws TableNotFoundException, DatabaseConnectionException, TableMalformedException, DataProcessingException, DatabaseNotFoundException, ImageNotSupportedException { final Table table = findById(databaseId, tableId); postgresService.deleteTable(table); - tableRepository.deleteById(tableId); + tableRepository.delete(table); } @Transactional -- GitLab