From 9e8f09266e0eaff10a03cfbf2a60ec23685e64cf Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Wed, 16 Jun 2021 17:24:37 +0200
Subject: [PATCH] Used job_id instead of busy_state

---
 .../oats/vospace/persistence/NodeDAO.java     | 24 ++++++++++++-------
 src/test/resources/test-data.sql              |  2 +-
 2 files changed, 17 insertions(+), 9 deletions(-)

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 14e784d..001b466 100644
--- a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java
+++ b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java
@@ -51,7 +51,11 @@ public class NodeDAO {
         jdbcTemplate = new JdbcTemplate(dataSource);
     }
 
-    public void createNode(Node myNode) {
+    public void createNode(Node node) {
+        createNode(node, null);
+    }
+
+    public void createNode(Node myNode, String jobId) {
 
         String nodeURI = myNode.getUri();
 
@@ -63,7 +67,7 @@ public class NodeDAO {
 
         StringBuilder sb = new StringBuilder();
         sb.append("INSERT INTO node");
-        sb.append(" (name, busy_state, creator_id, group_read, group_write,");
+        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)");
         sb.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
 
@@ -71,7 +75,11 @@ public class NodeDAO {
             PreparedStatement ps = conn.prepareStatement(sb.toString());
             int i = 0;
             ps.setString(++i, NodeUtils.getNodeName(myNode));
-            ps.setBoolean(++i, NodeUtils.getIsBusy(myNode));
+            if (jobId == null) {
+                ps.setNull(++i, Types.VARCHAR);
+            } else {
+                ps.setString(++i, jobId);
+            }
             ps.setString(++i, NodeProperties.getStandardNodePropertyByName(myNode, "creator"));
             ps.setArray(++i, fromPropertyToArray(ps, NodeProperties.getStandardNodePropertyByName(myNode, "groupread")));
             ps.setArray(++i, fromPropertyToArray(ps, NodeProperties.getStandardNodePropertyByName(myNode, "groupwrite")));
@@ -88,7 +96,7 @@ public class NodeDAO {
     public Optional<Node> listNode(String path) {
 
         String sql = "SELECT (CASE WHEN c.path = n.path THEN ? ELSE (? || ? || c.name) END) AS vos_path, c.node_id, c.name,\n"
-                + "c.type, c.async_trans, c.sticky, c.busy_state, c.creator_id, c.group_read, c.group_write,\n"
+                + "c.type, c.async_trans, c.sticky, c.job_id IS NOT NULL AS busy_state, c.creator_id, c.group_read, c.group_write,\n"
                 + "c.is_public, c.content_length, c.created_on, c.last_modified, c.accept_views, c.provide_views\n"
                 + "FROM node n\n"
                 + "JOIN node c ON c.path ~ (n.path::varchar || ? || '*{1}')::lquery OR c.path = n.path\n"
@@ -240,7 +248,7 @@ public class NodeDAO {
                 + "((SELECT COUNT(*) FROM (SELECT UNNEST(?) INTERSECT SELECT UNNEST(n.group_write)) AS allowed_groups ) = 0 AND\n"
                 + "n.creator_id <> ?) AS is_permission_denied,\n"
                 + "n.type = 'container' AS is_container,\n"
-                + "n.busy_state\n"
+                + "n.job_id IS NOT NULL AS busy_state\n"
                 + "FROM node n \n"
                 + "JOIN node_vos_path p ON n.node_id = p.node_id \n"
                 + "LEFT JOIN location loc ON loc.location_id = n.location_id\n"
@@ -315,7 +323,7 @@ public class NodeDAO {
         String sql = "SELECT COUNT(c.node_id) > 0 "
                 + "FROM node n "
                 + "JOIN node c ON c.path <@ n.path "
-                + "WHERE n.node_id = ? AND c.busy_state";
+                + "WHERE n.node_id = ? AND c.job_id IS NOT NULL";
 
         return jdbcTemplate.queryForObject(sql, new Object[]{parentNodeId}, new int[]{Types.BIGINT}, Boolean.class);
     }
@@ -365,7 +373,7 @@ public class NodeDAO {
         String insertSql = "INSERT INTO deleted_node "
                 + "(node_id, parent_path, parent_relative_path, "
                 + "name, os_name, tstamp_wrapper_dir, type, location_id, format, "
-                + "async_trans, busy_state, creator_id, group_read, "
+                + "async_trans, job_id, creator_id, group_read, "
                 + "group_write, is_public, delta, content_type, content_encoding, "
                 + "content_length, content_md5, created_on, last_modified, "
                 + "accept_views, provide_views, protocols, sticky)\n";
@@ -377,7 +385,7 @@ public class NodeDAO {
                 + "RETURNING\n"
                 + "n.node_id, n.parent_path, n.parent_relative_path, "
                 + "n.name, n.os_name, n.tstamp_wrapper_dir, n.type, n.location_id, n.format, "
-                + "n.async_trans, n.busy_state, n.creator_id, n.group_read, "
+                + "n.async_trans, n.job_id, n.creator_id, n.group_read, "
                 + "n.group_write, n.is_public, n.delta, n.content_type, n.content_encoding, "
                 + "n.content_length, n.content_md5, n.created_on, n.last_modified, "
                 + "n.accept_views, n.provide_views, n.protocols, n.sticky\n";
diff --git a/src/test/resources/test-data.sql b/src/test/resources/test-data.sql
index ec04c99..3872174 100644
--- a/src/test/resources/test-data.sql
+++ b/src/test/resources/test-data.sql
@@ -30,7 +30,7 @@ INSERT INTO node (parent_path, parent_relative_path, name, type, creator_id, is_
 INSERT INTO node (parent_path, parent_relative_path, name, type, creator_id, is_public, location_id) VALUES ('', NULL, 'test4', 'container', 'user3', false, 3);      -- /test4
 
 INSERT INTO node (parent_path, parent_relative_path, name, sticky, type, creator_id, is_public, location_id) VALUES ('9', '', 'mstick', true, 'container', 'user3', false, 3);      -- /test3/mstick
-INSERT INTO node (parent_path, parent_relative_path, name, busy_state, type, creator_id, is_public, location_id) VALUES ('9', '', 'mbusy', true, 'container', 'user3', false, 3);      -- /test3/mbusy
+INSERT INTO node (parent_path, parent_relative_path, name, job_id, type, creator_id, is_public, location_id) VALUES ('9', '', 'mbusy', 'job1234', 'container', 'user3', false, 3);      -- /test3/mbusy
 INSERT INTO node (parent_path, parent_relative_path, name, async_trans, type, creator_id, is_public, location_id) VALUES ('9', '', 'masynctrans', true, 'container', 'user3', false, 3);      -- /test3/masynctrans
 INSERT INTO node (parent_path, parent_relative_path, name, type, creator_id, is_public, location_id) VALUES ('9', '', 'asyncloc', 'container', 'user3', false, 1);      -- /test3/asyncloc
 INSERT INTO node (parent_path, parent_relative_path, name, type, creator_id, group_write, is_public, location_id) VALUES ('9', '', 'group1', 'container', 'user3','{"group1"}', false, 3);      -- /test3/group1
-- 
GitLab