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 7e1c4e0281b9503c6ae1dd53dcea9533e97d3a44..9866d90948119046d3e005d76191da0991cc94d1 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 65ec8dce0f43461c57a752ddbb4dae3c2e6932a3..e343e8ca99a38b060ff91c6c25e7d2fe64c0ee7c 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 4463732bf92f352a6a115eca34d166467bffc9a4..8ad7a7634434640e9d89c32fe372671908012fb4 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 f0f69fd359c644d6c3f2ab8432b8e23af37a6cca..ab606c2bff320a0e032dd15ab28c1dd90334373c 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 ea7653f204d7e6bb024b0250d31b36d0940d0679..f3b4a38197db1650817ae34512e2522f03eaa245 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 43a980f91bc6b8b509f48d1c7d521dabb0b2bea3..f184becceb085556314121fcbf87415d04c1653b 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 47e6523e98633fd1073a6f574ad99341f6ddc201..e540ee098676d1781f1beef5398bfc77c23d95aa 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 0be876c3f7d36591422f1b3884f7117816799c4a..eb9a58b8ef4e65f6298f917f7e1dfea4969c8243 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