diff --git a/src/main/java/it/inaf/oats/vospace/UriService.java b/src/main/java/it/inaf/oats/vospace/UriService.java index 3b7186424a48dc8649a22820d2465f18c0c2a107..41ce695889ed0b96aa7cea5556fe4db5b8639bd6 100644 --- a/src/main/java/it/inaf/oats/vospace/UriService.java +++ b/src/main/java/it/inaf/oats/vospace/UriService.java @@ -232,8 +232,10 @@ public class UriService { } } else { + /* Location location = locationDAO.getNodeLocation(relativePath).orElse(null); + if (location != null && location.getType() == LocationType.PORTAL) { String fileName = nodeDao.getNodeOsName(relativePath); endpoint = "http://" + location.getSource().getHostname() + location.getSource().getBaseUrl(); @@ -241,9 +243,9 @@ public class UriService { endpoint += "/"; } endpoint += fileName; - } else { + } else {*/ endpoint = fileServiceUrl + urlEncodePath(relativePath); - } + //} endpoint += "?jobId=" + job.getJobId(); @@ -294,9 +296,9 @@ public class UriService { String vosPath = URIUtils.returnVosPathFromNodeURI(nodeUri, authority); - String fileName = url.getPath().substring(url.getPath().lastIndexOf("/") + 1); + // String fileName = url.getPath().substring(url.getPath().lastIndexOf("/") + 1); - nodeDao.setNodeLocation(vosPath, location.getId(), fileName); + nodeDao.setNodeLocation(vosPath, location.getId()); } public Transfer getTransfer(JobSummary job) { diff --git a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java index e1eac2941bf912ac23cc41aac8b07888e121fa37..658b86dd712e070ae9084ce5a5b4276c6216f78f 100644 --- a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java +++ b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java @@ -71,8 +71,8 @@ public class NodeDAO { StringBuilder sb = new StringBuilder(); sb.append("INSERT INTO node"); sb.append(" (name, job_id, creator_id, group_read, group_write,"); - sb.append(" is_public, parent_path, parent_relative_path, type, accept_views, provide_views, target)"); - sb.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + sb.append(" is_public, parent_path, type, accept_views, provide_views, target)"); + sb.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); jdbcTemplate.update(conn -> { PreparedStatement ps = conn.prepareStatement(sb.toString()); @@ -87,8 +87,7 @@ public class NodeDAO { ps.setArray(++i, fromPropertyToArray(ps, NodeProperties.getNodePropertyByURI(myNode, NodeProperties.GROUP_READ_URI))); ps.setArray(++i, fromPropertyToArray(ps, NodeProperties.getNodePropertyByURI(myNode, NodeProperties.GROUP_WRITE_URI))); ps.setBoolean(++i, Boolean.valueOf(NodeProperties.getNodePropertyByURI(myNode, NodeProperties.PUBLIC_READ_URI))); - ps.setObject(++i, paths.get(0).getPath(), Types.OTHER); - ps.setObject(++i, paths.get(0).getRelativePath(), Types.OTHER); + ps.setObject(++i, paths.get(0).getPath(), Types.OTHER); ps.setObject(++i, NodeUtils.getDbNodeType(myNode), Types.OTHER); ps.setObject(++i, fromViewsToArray(ps, myNode, d -> d.getAccepts()), Types.OTHER); ps.setObject(++i, fromViewsToArray(ps, myNode, d -> d.getProvides()), Types.OTHER); @@ -298,7 +297,7 @@ public class NodeDAO { } public void renameNode(Long nodeId, String name) { - String sql = "UPDATE node SET name = ?, os_name = COALESCE(os_name, name) " + String sql = "UPDATE node SET name = ? " + "WHERE node_id = ?"; jdbcTemplate.update(conn -> { @@ -313,8 +312,7 @@ public class NodeDAO { public void moveNodeBranch(Long sourceRootId, String destParentLtreePath) { String sql = "UPDATE node c SET " - + "parent_path = (? || SUBPATH(c.path, (SELECT nlevel(parent_path) FROM node WHERE node_id = ?), -1))::ltree, " - + "parent_relative_path = COALESCE(c.parent_relative_path, c.parent_path) " // not sure about this + + "parent_path = (? || SUBPATH(c.path, (SELECT nlevel(parent_path) FROM node WHERE node_id = ?), -1))::ltree " + "FROM node n " + "WHERE n.path @> c.path AND n.node_id = ?"; @@ -332,7 +330,7 @@ public class NodeDAO { String destVosParentPath = NodeUtils.getParentPath(destVosPath); String destName = NodeUtils.getNodeName(destVosPath); - String parentInsert = "INSERT INTO node (node_id, parent_path, parent_relative_path, name, type, location_id, creator_id, group_write, group_read, is_public,\n" + String parentInsert = "INSERT INTO node (node_id, parent_path, name, type, location_id, creator_id, group_write, group_read, is_public,\n" + "job_id, tstamp_wrapper_dir, format, async_trans, sticky, accept_views, provide_views, protocols, target)\n"; // If destination has path '' no prefix, else "destination_path." @@ -342,25 +340,24 @@ public class NodeDAO { // Calculates also new path, even if it's usually generated by database functions String cteCopiedNodes = "SELECT nextval('node_node_id_seq') AS new_node_id,\n" + "((SELECT prefix FROM path_prefix) || currval('node_node_id_seq'))::ltree AS new_path,\n" - + "path, relative_path, parent_path, parent_relative_path, ? AS name,\n" + + "path, parent_path, ? AS name,\n" + "type, location_id, creator_id, group_write, group_read, is_public,\n" + "job_id, tstamp_wrapper_dir, format, async_trans, sticky, accept_views, provide_views, protocols, target\n" + "FROM node WHERE node_id = id_from_vos_path(?)\n" + "UNION ALL\n" + "SELECT nextval('node_node_id_seq') AS new_node_id,\n" + "(p.new_path::varchar || '.' || currval('node_node_id_seq'))::ltree,\n" - + "n.path, n.relative_path, n.parent_path, n.parent_relative_path, n.name,\n" + + "n.path, n.parent_path, n.name,\n" + "n.type, n.location_id, n.creator_id, n.group_write, n.group_read, n.is_public,\n" + "n.job_id, n.tstamp_wrapper_dir, n.format, n.async_trans, n.sticky, n.accept_views, n.provide_views, n.protocols, n.target\n" + "FROM node n\n" + "JOIN copied_nodes p ON p.path = n.parent_path"; String cteCopiedNodesPaths = "SELECT subpath(new_path, 0, nlevel(new_path) - 1) AS new_parent_path,\n" - + "nlevel(parent_path) - nlevel(parent_relative_path) AS rel_offset, * FROM copied_nodes"; + + " * FROM copied_nodes"; String parentSelect = "SELECT\n" + "new_node_id, new_parent_path,\n" - + "CASE WHEN nlevel(new_parent_path) <= rel_offset THEN ''::ltree ELSE subpath(new_parent_path, rel_offset) END new_parent_relative_path,\n" + "name, type, location_id, creator_id, group_write, group_read, is_public,\n" + "job_id, tstamp_wrapper_dir, format, async_trans, sticky, accept_views, provide_views, protocols, target\n" + "FROM copied_nodes_paths\n"; @@ -490,8 +487,8 @@ public class NodeDAO { } String insertSql = "INSERT INTO deleted_node " - + "(node_id, parent_path, parent_relative_path, fs_path, " - + "name, os_name, tstamp_wrapper_dir, type, location_id, format, " + + "(node_id, parent_path, fs_path, " + + "name, tstamp_wrapper_dir, type, location_id, format, " + "async_trans, job_id, creator_id, group_read, " + "group_write, is_public, quota, content_type, content_encoding, " + "content_length, content_md5, created_on, last_modified, " @@ -502,8 +499,8 @@ public class NodeDAO { + "USING node p\n" + "WHERE n.path <@ p.path AND p.node_id = id_from_vos_path(?)\n" + "RETURNING\n" - + "n.node_id, n.parent_path, n.parent_relative_path, n.fs_path, " - + "n.name, n.os_name, n.tstamp_wrapper_dir, n.type, n.location_id, n.format, " + + "n.node_id, n.parent_path, n.fs_path, " + + "n.name, n.tstamp_wrapper_dir, n.type, n.location_id, n.format, " + "n.async_trans, n.job_id, n.creator_id, n.group_read, " + "n.group_write, n.is_public, n.quota, n.content_type, n.content_encoding, " + "n.content_length, n.content_md5, n.created_on, n.last_modified, " @@ -526,6 +523,7 @@ public class NodeDAO { return jdbcTemplate.queryForObject(sql, args, types, Integer.class); } + /* public String getNodeOsName(String vosPath) { String sql = "SELECT \n" + "COALESCE(os_name, name) AS os_name\n" @@ -536,16 +534,15 @@ public class NodeDAO { int[] types = {Types.VARCHAR}; return jdbcTemplate.queryForObject(sql, args, types, String.class); - } + }*/ - public void setNodeLocation(String vosPath, int locationId, String nodeOsName) { + public void setNodeLocation(String vosPath, int locationId) { - String sql = "UPDATE node SET location_id = ?, os_name = ? WHERE node_id = id_from_vos_path(?)"; + String sql = "UPDATE node SET location_id = ? WHERE node_id = id_from_vos_path(?)"; int updated = jdbcTemplate.update(sql, ps -> { - ps.setInt(1, locationId); - ps.setString(2, nodeOsName); - ps.setString(3, vosPath); + ps.setInt(1, locationId); + ps.setString(2, vosPath); }); if (updated != 1) { @@ -606,7 +603,7 @@ public class NodeDAO { } private NodePaths getPathsFromResultSet(ResultSet rs) throws SQLException { - NodePaths paths = new NodePaths(rs.getString("path"), rs.getString("relative_path")); + NodePaths paths = new NodePaths(rs.getString("path")); return paths; } @@ -734,7 +731,7 @@ public class NodeDAO { String parentPath = NodeUtils.getParentPath(path); - String sql = "SELECT path, relative_path " + String sql = "SELECT path " + "FROM node n " + "WHERE node_id = id_from_vos_path(?)"; @@ -797,20 +794,14 @@ public class NodeDAO { private class NodePaths { private final String path; - private final String relativePath; - public NodePaths(String myPath, String myRelativePath) { + public NodePaths(String myPath) { this.path = myPath; - this.relativePath = myRelativePath; } public String getPath() { return this.path; } - - public String getRelativePath() { - return this.relativePath; - } } } diff --git a/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java b/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java index 81a40c085f9fa7493aa55cc50da13d70e55d80d1..f38085bb40bf613bd3c64ac5d34a6613999696a3 100644 --- a/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java +++ b/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java @@ -146,6 +146,7 @@ public class TransferControllerTest { verify(jobDao, times(2)).updateJob(argThat(j -> ExecutionPhase.QUEUED == j.getPhase()), any()); } + /* @Test public void testPullToVoSpacePortal() throws Exception { @@ -157,7 +158,7 @@ public class TransferControllerTest { assertTrue(endpoint.startsWith("http://archive.lbto.org")); verify(nodeDao, times(1)).setNodeLocation(eq("/portalnode"), eq(2), eq("lbcr.20130512.060722.fits.gz")); - } + }*/ @Test public void testPushToVoSpace() throws Exception { diff --git a/src/test/java/it/inaf/oats/vospace/UriServiceTest.java b/src/test/java/it/inaf/oats/vospace/UriServiceTest.java index a62f19ea3110dd1dc4286a9e147335cbe3e4b1ba..88a778efca89acb61b1b1b7bc9d1132b07f197f8 100644 --- a/src/test/java/it/inaf/oats/vospace/UriServiceTest.java +++ b/src/test/java/it/inaf/oats/vospace/UriServiceTest.java @@ -413,7 +413,7 @@ public class UriServiceTest { uriService.setNodeRemoteLocation(nodeUri, contentUri); - verify(nodeDAO).setNodeLocation(eq("/test/f1/lbtfile.fits"), eq(5), eq("lbtfile.fits")); + verify(nodeDAO).setNodeLocation(eq("/test/f1/lbtfile.fits"), eq(5)); } @Test diff --git a/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java b/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java index 30e8fe6a71756372d73ffc3392ddf76d04afd25f..862b598461b5f1a2e53485c61fbcee82c5873fd8 100644 --- a/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java +++ b/src/test/java/it/inaf/oats/vospace/persistence/NodeDAOTest.java @@ -377,23 +377,13 @@ public class NodeDAOTest { Optional<Long> rootId = dao.getNodeId(oldPath); assertTrue(rootId.isPresent()); - assertEquals("f1", dao.getNodeOsName(oldPath)); - dao.renameNode(rootId.get(), "f_pippo"); assertTrue(dao.listNode(oldPath).isEmpty()); assertTrue(dao.listNode(oldPathChild).isEmpty()); - // After the first rename the os_name column has to be equal to the old name - // to avoid issues with renaming folders where some files have been uploaded - assertEquals("f1", dao.getNodeOsName(newPath)); - assertTrue(dao.listNode(newPath).isPresent()); assertTrue(dao.listNode(newPathChild).isPresent()); - - // The second rename mustn't change the os_name column - dao.renameNode(rootId.get(), "f_pippo_second_rename"); - assertEquals("f1", dao.getNodeOsName("/test1/f_pippo_second_rename")); } @Test @@ -432,14 +422,14 @@ public class NodeDAOTest { dataNode.setUri("vos://example.com!vospace/mydata2"); dao.createNode(dataNode); - dao.setNodeLocation("/mydata2", 1, "mydata2"); + dao.setNodeLocation("/mydata2", 1); } @Test public void testSetNodeLocationFailure() { boolean exception = false; try { - dao.setNodeLocation("/foo", 1, "foo"); + dao.setNodeLocation("/foo", 1); } catch (InternalFaultException ex) { exception = true; } @@ -540,12 +530,6 @@ public class NodeDAOTest { checkGroups(NodeProperties.getNodePropertyAsListByURI(child2, NodeProperties.GROUP_WRITE_URI), "group6"); } - @Test - public void testGetNodeOsName() { - assertEquals("f2", dao.getNodeOsName("/test1/f1/f2_renamed")); - assertEquals("f4", dao.getNodeOsName("/test2/f4")); - } - @Test public void testReleaseNodesByJobId() { Optional<Long> optId = dao.getNodeId("/test3/m1");