From b4e11d2864d20e674a6ae7a99ec9270127691f3f Mon Sep 17 00:00:00 2001 From: Nicola Fulvio Calabria <nicola.calabria@inaf.it> Date: Thu, 2 Dec 2021 12:56:38 +0100 Subject: [PATCH] Commented out or deleted code about portal locations --- .../ia2/transfer/persistence/LocationDAO.java | 44 ------------- .../ia2/transfer/service/ArchiveService.java | 62 ++++--------------- .../ia2/transfer/service/FileCopyService.java | 62 +------------------ .../transfer/persistence/LocationDAOTest.java | 41 ------------ .../transfer/service/ArchiveServiceTest.java | 17 ++--- 5 files changed, 20 insertions(+), 206 deletions(-) delete mode 100644 src/main/java/it/inaf/ia2/transfer/persistence/LocationDAO.java delete mode 100644 src/test/java/it/inaf/ia2/transfer/persistence/LocationDAOTest.java diff --git a/src/main/java/it/inaf/ia2/transfer/persistence/LocationDAO.java b/src/main/java/it/inaf/ia2/transfer/persistence/LocationDAO.java deleted file mode 100644 index a84ec7b..0000000 --- a/src/main/java/it/inaf/ia2/transfer/persistence/LocationDAO.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of vospace-file-service - * Copyright (C) 2021 Istituto Nazionale di Astrofisica - * SPDX-License-Identifier: GPL-3.0-or-later - */ -package it.inaf.ia2.transfer.persistence; - -import java.util.HashMap; -import java.util.Map; -import javax.sql.DataSource; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Repository; - -@Repository -public class LocationDAO { - - private final JdbcTemplate jdbcTemplate; - - @Autowired - public LocationDAO(DataSource fileCatalogDatasource) { - this.jdbcTemplate = new JdbcTemplate(fileCatalogDatasource); - } - - public Map<Integer, String> getPortalLocationUrls() { - - String sql = "SELECT location_id, hostname, base_url\n" - + "FROM location l\n" - + "JOIN storage s ON s.storage_id = l.storage_dest_id\n" - + "WHERE location_type = 'portal'"; - - return jdbcTemplate.query(sql, rs -> { - Map<Integer, String> locationUrls = new HashMap<>(); - while (rs.next()) { - int locationId = rs.getInt("location_id"); - String hostname = rs.getString("hostname"); - String baseUrl = rs.getString("base_url"); - String url = "http://" + hostname + baseUrl; - locationUrls.put(locationId, url); - } - return locationUrls; - }); - } -} diff --git a/src/main/java/it/inaf/ia2/transfer/service/ArchiveService.java b/src/main/java/it/inaf/ia2/transfer/service/ArchiveService.java index 3c9e767..93e6976 100644 --- a/src/main/java/it/inaf/ia2/transfer/service/ArchiveService.java +++ b/src/main/java/it/inaf/ia2/transfer/service/ArchiveService.java @@ -6,12 +6,10 @@ package it.inaf.ia2.transfer.service; import it.inaf.ia2.aa.ServletRapClient; -import it.inaf.ia2.aa.data.User; import it.inaf.ia2.rap.client.call.TokenExchangeRequest; import it.inaf.ia2.transfer.auth.TokenPrincipal; import it.inaf.ia2.transfer.persistence.FileDAO; import it.inaf.ia2.transfer.persistence.JobDAO; -import it.inaf.ia2.transfer.persistence.LocationDAO; import it.inaf.ia2.transfer.persistence.model.FileInfo; import it.inaf.oats.vospace.exception.InternalFaultException; import it.inaf.oats.vospace.exception.PermissionDeniedException; @@ -57,9 +55,6 @@ public class ArchiveService { @Autowired private FileDAO fileDAO; - @Autowired - private LocationDAO locationDAO; - @Autowired private LinkedServiceDAO linkedServiceDAO; @@ -75,9 +70,6 @@ public class ArchiveService { @Autowired private ServletRapClient rapClient; - @Value("${upload_location_id}") - private int uploadLocationId; - // Directory containing temporary files generated by jobs. @Value("${generated.dir}") private String generatedDirString; @@ -109,13 +101,11 @@ public class ArchiveService { List<ArchiveEntryDescriptor> entryDescriptors = job.getEntryDescriptors(); - String commonParent = getCommonParent(entryDescriptors); - // support directory used to generate folder inside tar files (path is redefined each time by TarEntry class) File supportDir = Files.createTempDirectory("dir").toFile(); - try ( ArchiveHandler<O, E> handler = getArchiveHandler(archiveFile, job.getType())) { - fillArchive(entryDescriptors, commonParent, supportDir, + try (ArchiveHandler<O, E> handler = getArchiveHandler(archiveFile, job.getType())) { + fillArchive(entryDescriptors, supportDir, job.getPrincipal(), servletRequest, handler); } finally { FileSystemUtils.deleteRecursively(supportDir); @@ -127,13 +117,10 @@ public class ArchiveService { } private <O extends OutputStream, E> void fillArchive( - List<ArchiveEntryDescriptor> entryDescriptors, String commonParent, + List<ArchiveEntryDescriptor> entryDescriptors, File supportDir, TokenPrincipal tokenPrincipal, HttpServletRequest servletRequest, ArchiveHandler<O, E> handler) throws IOException { - // it will be initialized only when necessary - Map<Integer, String> portalLocationUrls = null; - List<ArchiveEntryDescriptor> noTargetEntryDescriptors = entryDescriptors.stream().filter(ed -> !ed.isPointingToAnotherNode()) .collect(Collectors.toList()); @@ -142,13 +129,15 @@ public class ArchiveService { List<String> vosPaths = noTargetEntryDescriptors.stream() .map(ed -> ed.getVosPath()) .collect(Collectors.toList()); + + String commonParent = getCommonParent(entryDescriptors); if (!vosPaths.isEmpty()) { for (FileInfo fileInfo : fileDAO.getArchiveFileInfos(vosPaths)) { String relPath = fileInfo.getVirtualPath().substring(commonParent.length()); - this.insertEntryIntoArchive(fileInfo, supportDir, relPath, tokenPrincipal, portalLocationUrls, servletRequest, handler); + this.insertEntryIntoArchive(fileInfo, supportDir, relPath, tokenPrincipal, servletRequest, handler); } } @@ -175,7 +164,7 @@ public class ArchiveService { for (String vosPath : linkVosPaths) { String relPath = vosPath.substring(commonParent.length()); - this.insertEntryIntoArchive(fileInfo, supportDir, relPath, tokenPrincipal, portalLocationUrls, servletRequest, handler); + this.insertEntryIntoArchive(fileInfo, supportDir, relPath, tokenPrincipal, servletRequest, handler); } } } @@ -183,8 +172,7 @@ public class ArchiveService { private <O extends OutputStream, E> void insertEntryIntoArchive( FileInfo fileInfo, File supportDir, String relPath, - TokenPrincipal tokenPrincipal, Map<Integer, String> portalLocationUrls, - HttpServletRequest servletRequest, ArchiveHandler<O, E> handler) + TokenPrincipal tokenPrincipal, HttpServletRequest servletRequest, ArchiveHandler<O, E> handler) throws IOException { if (fileInfo.isDirectory()) { handler.putNextEntry(supportDir, relPath); @@ -202,18 +190,9 @@ public class ArchiveService { } return; } + + writeFileIntoArchive(fileInfo, relPath, tokenPrincipal, handler); - if (fileInfo.getLocationId() != null && "portal".equals(fileInfo.getLocationType())) { - // remote file - if (portalLocationUrls == null) { - portalLocationUrls = locationDAO.getPortalLocationUrls(); - } - String url = portalLocationUrls.get(fileInfo.getLocationId()); - downloadRemoteLocationFileIntoArchive(fileInfo, relPath, tokenPrincipal, handler, url); - } else { - // local file or virtual directory - writeFileIntoArchive(fileInfo, relPath, tokenPrincipal, handler); - } } private File getArchiveFile(ArchiveJob job) throws IOException { @@ -374,10 +353,10 @@ public class ArchiveService { } }, res -> { File tmpFile = Files.createTempFile("download", null).toFile(); - try ( FileOutputStream os = new FileOutputStream(tmpFile)) { + try (FileOutputStream os = new FileOutputStream(tmpFile)) { res.getBody().transferTo(os); handler.putNextEntry(tmpFile, relPath); - try ( FileInputStream is = new FileInputStream(tmpFile)) { + try (FileInputStream is = new FileInputStream(tmpFile)) { is.transferTo(handler.getOutputStream()); } } finally { @@ -387,21 +366,6 @@ public class ArchiveService { }, new Object[]{}); } - private <O extends OutputStream, E> void downloadRemoteLocationFileIntoArchive( - FileInfo fileInfo, String relPath, TokenPrincipal tokenPrincipal, - ArchiveHandler<O, E> handler, String baseUrl) { - - if (baseUrl == null) { - LOG.error("Location URL not found for location " + fileInfo.getLocationId()); - throw new InternalFaultException("Unable to retrieve location of file " - + fileInfo.getVirtualPath()); - } - - String url = baseUrl + "/" + fileInfo.getVirtualName(); - - downloadFromUrlIntoArchive(url, relPath, tokenPrincipal, handler); - } - private <O extends OutputStream, E> void downloadExternalLinkIntoArchive( FileInfo fileInfo, String relPath, TokenPrincipal tokenPrincipal, ArchiveHandler<O, E> handler, HttpServletRequest servletRequest) { @@ -431,7 +395,7 @@ public class ArchiveService { File file = new File(fileInfo.getFilePath()); LOG.trace("Adding file " + file.getAbsolutePath() + " to tar archive"); - try ( InputStream is = new FileInputStream(file)) { + try (InputStream is = new FileInputStream(file)) { handler.putNextEntry(file, relPath); is.transferTo(handler.getOutputStream()); } diff --git a/src/main/java/it/inaf/ia2/transfer/service/FileCopyService.java b/src/main/java/it/inaf/ia2/transfer/service/FileCopyService.java index 73634e5..ec53fce 100644 --- a/src/main/java/it/inaf/ia2/transfer/service/FileCopyService.java +++ b/src/main/java/it/inaf/ia2/transfer/service/FileCopyService.java @@ -7,23 +7,17 @@ package it.inaf.ia2.transfer.service; import it.inaf.ia2.transfer.auth.TokenPrincipal; import it.inaf.ia2.transfer.persistence.FileDAO; -import it.inaf.ia2.transfer.persistence.LocationDAO; import it.inaf.ia2.transfer.persistence.model.FileInfo; -import it.inaf.oats.vospace.exception.InternalFaultException; import it.inaf.oats.vospace.exception.NodeNotFoundException; import it.inaf.oats.vospace.exception.PermissionDeniedException; import it.inaf.oats.vospace.exception.QuotaExceededException; import java.io.File; -import java.io.InputStream; import java.util.List; -import java.util.Map; import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @@ -35,9 +29,6 @@ public class FileCopyService { @Autowired private FileDAO fileDAO; - @Autowired - private LocationDAO locationDAO; - @Autowired private AuthorizationService authorizationService; @@ -67,7 +58,6 @@ public class FileCopyService { throw new NodeNotFoundException(sourceRootVosPath); } - // Set location of destinations to this file service update location // before retrieving file infos fileDAO.setBranchLocationId(destinationRootVosPath, jobId, uploadLocationId); @@ -101,9 +91,6 @@ public class FileCopyService { String destinationRootVosPath, TokenPrincipal principal) { - // it will be initialized only when necessary - Map<Integer, String> portalLocationUrls = null; - for (FileInfo destinationFileInfo : destinationFileInfos) { LOG.trace("Processing {} destination", destinationFileInfo.getVirtualPath()); // Cycle on files only @@ -134,22 +121,7 @@ public class FileCopyService { } } - if (sourceFileInfo.getLocationId() != null && "portal".equals(sourceFileInfo.getLocationType())) { - // remote file - if (portalLocationUrls == null) { - portalLocationUrls = locationDAO.getPortalLocationUrls(); - } - String url = portalLocationUrls.get(sourceFileInfo.getLocationId()); - // download file to destination disk path - this.downloadFileToDisk(sourceFileInfo, - destinationFileInfo, - principal, url, remainingQuota); - - } else { - // local file - this.copyLocalFile(sourceFileInfo, destinationFileInfo, principal, remainingQuota); - - } + this.copyLocalFile(sourceFileInfo, destinationFileInfo, principal, remainingQuota); } } @@ -168,36 +140,6 @@ public class FileCopyService { } - private void downloadFileToDisk(FileInfo sourceFileInfo, - FileInfo destinationFileInfo, TokenPrincipal tokenPrincipal, String baseUrl, Long remainingQuota) { - - if (baseUrl == null) { - LOG.error("Location URL not found for location " + sourceFileInfo.getLocationId()); - throw new InternalFaultException("Unable to retrieve location of file " + sourceFileInfo.getVirtualPath()); - } - - String url = baseUrl + "/" + sourceFileInfo.getVirtualName(); - - LOG.trace("Downloading file from {}", url); - - restTemplate.execute(url, HttpMethod.GET, req -> { - HttpHeaders headers = req.getHeaders(); - if (tokenPrincipal.getToken() != null) { - headers.setBearerAuth(tokenPrincipal.getToken()); - } - }, res -> { - - try (InputStream in = res.getBody()) { - putFileService.storeFileFromInputStream(sourceFileInfo, destinationFileInfo, in, remainingQuota); - } catch (Exception ex) { - // outFile.delete(); - throw new RuntimeException(ex); - } - - return null; - }, new Object[]{}); - } - private void copyLocalFile(FileInfo sourceFileInfo, FileInfo destinationFileInfo, TokenPrincipal tokenPrincipal, Long remainingQuota) { @@ -207,7 +149,7 @@ public class FileCopyService { } File file = new File(sourceFileInfo.getFilePath()); - LOG.trace("Copying file: {} to {}",file.getAbsolutePath(), destinationFileInfo.getFilePath()); + LOG.trace("Copying file: {} to {}", file.getAbsolutePath(), destinationFileInfo.getFilePath()); putFileService.copyLocalFile(sourceFileInfo, destinationFileInfo, remainingQuota); diff --git a/src/test/java/it/inaf/ia2/transfer/persistence/LocationDAOTest.java b/src/test/java/it/inaf/ia2/transfer/persistence/LocationDAOTest.java deleted file mode 100644 index 9e302eb..0000000 --- a/src/test/java/it/inaf/ia2/transfer/persistence/LocationDAOTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * This file is part of vospace-file-service - * Copyright (C) 2021 Istituto Nazionale di Astrofisica - * SPDX-License-Identifier: GPL-3.0-or-later - */ -package it.inaf.ia2.transfer.persistence; - -import java.util.Map; -import javax.sql.DataSource; -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = {DataSourceConfig.class}) -@TestPropertySource(locations = "classpath:test.properties") -public class LocationDAOTest { - - @Autowired - private DataSource dataSource; - - private LocationDAO dao; - - @BeforeEach - public void init() { - dao = new LocationDAO(dataSource); - } - - @Test - public void testGetPortalLocationUrls() { - Map<Integer, String> map = dao.getPortalLocationUrls(); - - assertEquals(1, map.size()); - assertEquals("http://archive.lbto.org/files/lbt", map.get(4)); - } -} diff --git a/src/test/java/it/inaf/ia2/transfer/service/ArchiveServiceTest.java b/src/test/java/it/inaf/ia2/transfer/service/ArchiveServiceTest.java index f145c45..0c86007 100644 --- a/src/test/java/it/inaf/ia2/transfer/service/ArchiveServiceTest.java +++ b/src/test/java/it/inaf/ia2/transfer/service/ArchiveServiceTest.java @@ -8,7 +8,6 @@ package it.inaf.ia2.transfer.service; import it.inaf.ia2.transfer.auth.TokenPrincipal; import it.inaf.ia2.transfer.persistence.FileDAO; import it.inaf.ia2.transfer.persistence.JobDAO; -import it.inaf.ia2.transfer.persistence.LocationDAO; import it.inaf.ia2.transfer.persistence.model.FileInfo; import it.inaf.oats.vospace.exception.QuotaExceededException; import it.inaf.oats.vospace.parent.exchange.ArchiveEntryDescriptor; @@ -49,7 +48,6 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.Primary; import org.springframework.http.HttpMethod; import org.springframework.http.client.ClientHttpResponse; import org.springframework.test.context.ContextConfiguration; @@ -68,9 +66,6 @@ public class ArchiveServiceTest { @MockBean private FileDAO fileDAO; - @MockBean - private LocationDAO locationDAO; - @MockBean private RestTemplate restTemplate; @@ -195,7 +190,6 @@ public class ArchiveServiceTest { File file4 = createFile(tmpParent, "2021/10/1/UUID-file4"); File file5 = createFile(tmpParent, "2021/10/1/UUID-file5"); File file6 = createFile(tmpParent, "2021/10/1/UUID-file6"); - File file7 = createFile(tmpParent, "2021/10/1/UUID-portal-file"); ArchiveJob job = new ArchiveJob(); job.setPrincipal(new TokenPrincipal("user1", "token1")); @@ -225,13 +219,11 @@ public class ArchiveServiceTest { addFileInfo(fileInfos, parent + "/dir2/c/file3", file3); addFileInfo(fileInfos, parent + "/dir2/c/file4", file4); addDirInfo(fileInfos, parent + "/dir2/c/d"); - addFileInfo(fileInfos, parent + "/dir2/c/d/file5", file5); - addFileInfo(fileInfos, parent + "/portal-file", file7).setLocationId(1); + addFileInfo(fileInfos, parent + "/dir2/c/d/file5", file5); when(fileDAO.getArchiveFileInfos(any())).thenReturn(fileInfos); - - when(locationDAO.getPortalLocationUrls()).thenReturn(Map.of(1, "http://portal/base/url")); - + + /* doAnswer(invocation -> { ResponseExtractor responseExtractor = invocation.getArgument(3); ClientHttpResponse mockedResponse = mock(ClientHttpResponse.class); @@ -240,6 +232,7 @@ public class ArchiveServiceTest { return null; }).when(restTemplate).execute(eq("http://portal/base/url/portal-file"), eq(HttpMethod.GET), any(RequestCallback.class), any(ResponseExtractor.class), any(Object[].class)); + */ archiveService.createArchive(job, servletRequest); @@ -250,7 +243,7 @@ public class ArchiveServiceTest { // verify result structure List<String> expectedSequence = Arrays.asList("file6", "dir1/", "dir1/a/", "dir1/a/b/", "dir1/a/b/file1", "dir1/a/b/file2", "dir2/", "dir2/c/", "dir2/c/file3", "dir2/c/file4", - "dir2/c/d/", "dir2/c/d/file5", "portal-file"); + "dir2/c/d/", "dir2/c/d/file5"); int i = 0; -- GitLab