diff --git a/transfer_service/cleaner.py b/transfer_service/cleaner.py index 2577ac10f941bae0e7c96cde6d779ca78171531f..3371d8f142c408e23fe63c7c150e28b46f41395f 100644 --- a/transfer_service/cleaner.py +++ b/transfer_service/cleaner.py @@ -36,10 +36,9 @@ for row in fileList: filePath = basePath + relPath dTime = row["deleted_on"] cTime = datetime.datetime.now() - phyDeletedTstamp = row["phy_deleted_on"] nodeId = row["node_id"] delta = cTime - dTime - if delta.days >= days and delta.seconds > seconds and phyDeletedTstamp is None: + if delta.days >= days and delta.seconds > seconds: os.remove(filePath) print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + ' ' + filePath) dbConn.setPhyDeletedOn(nodeId) diff --git a/transfer_service/db_connector.py b/transfer_service/db_connector.py index c3556808fda6fb37162e455255d7b3c7653982da..1c9744bd270070f986332d925540f5584615bee0 100644 --- a/transfer_service/db_connector.py +++ b/transfer_service/db_connector.py @@ -57,13 +57,12 @@ class DbConnector(object): try: cursor = conn.cursor(cursor_factory = RealDictCursor) cursor.execute(""" - SELECT storage_type, base_path, user_name, tstamp_wrapper_dir, os_path, content_length - FROM node_path p - JOIN node n ON p.node_id = n.node_id + SELECT storage_type, base_path, user_name, tstamp_wrapper_dir, get_os_path(n.node_id) AS os_path, content_length + FROM node n JOIN location l ON n.location_id = l.location_id JOIN storage s ON s.storage_id = l.storage_src_id JOIN users u ON u.user_id = n.creator_id - WHERE p.vos_path = %s; + WHERE n.node_id = id_from_vos_path(%s); """, (vospacePath,)) result = cursor.fetchall() @@ -98,11 +97,10 @@ class DbConnector(object): try: cursor = conn.cursor(cursor_factory = RealDictCursor) cursor.execute(""" - SELECT op.vos_path - FROM node_vos_path vp - JOIN list_of_files l ON l.list_node_id = vp.node_id - JOIN node_path op ON op.node_id = l.node_id - WHERE vp.vos_path = %s; + SELECT get_vos_path(n.node_id) + FROM node n + JOIN list_of_files l ON l.node_id = n.node_id + WHERE l.list_node_id = id_from_vos_path(%s); """, (vospacePath,)) results = cursor.fetchall() @@ -121,29 +119,23 @@ class DbConnector(object): try: cursor = conn.cursor(cursor_factory = RealDictCursor) cursor.execute(""" - WITH all_nodes AS ( - SELECT name, os_name, node_id, parent_path, path, relative_path, creator_id, location_id, null as deleted_on, null as phy_deleted_on FROM node - UNION - SELECT name, os_name, node_id, parent_path, path(parent_path, node_id) AS path, path(parent_relative_path, node_id) AS relative_path, creator_id, location_id, deleted_on, phy_deleted_on - FROM deleted_node - ) - SELECT an.node_id, base_path || '/' || creator_id as os_base_path, os_path AS os_rel_path, an.deleted_on, an.phy_deleted_on - FROM ( - SELECT node_id, '/' || string_agg(name, '/') AS os_path - FROM ( - SELECT (CASE WHEN os_name IS NOT NULL THEN os_name ELSE name END) AS name, p.node_id - FROM all_nodes n - JOIN ( - SELECT UNNEST(string_to_array(relative_path::varchar, '.')) AS rel_id, node_id - FROM all_nodes - ) AS p ON n.node_id::varchar = p.rel_id - ORDER BY p.node_id, nlevel(n.path) - ) AS j GROUP BY node_id ORDER BY os_path - ) AS all_paths - JOIN all_nodes an ON all_paths.node_id = an.node_id - JOIN location l ON an.location_id = l.location_id - JOIN storage s ON s.storage_id = l.storage_src_id - WHERE all_paths.os_path NOT IN (SELECT os_path FROM node_os_path); + WITH RECURSIVE del AS ( + SELECT COALESCE(os_name, name) AS os_name, 1 AS level, node_id AS deleted_node_id, + path(parent_relative_path, node_id) AS relative_path, parent_relative_path + FROM deleted_node WHERE phy_deleted_on IS NULL + UNION ALL + SELECT COALESCE(n.os_name, n.name), d.level + 1, d.deleted_node_id, + n.relative_path, n.parent_relative_path + FROM node n JOIN del d ON n.relative_path = d.parent_relative_path + WHERE n.parent_relative_path IS NOT NULL + ), paths_to_delete AS + (SELECT deleted_node_id, '/' || STRING_AGG(os_name, '/' ORDER BY LEVEL DESC) AS os_path + FROM del GROUP BY deleted_node_id) + SELECT base_path || '/' || creator_id as os_base_path, os_path AS os_rel_path, deleted_on, d.node_id + FROM paths_to_delete p + JOIN deleted_node d ON d.node_id = p.deleted_node_id + JOIN location l ON d.location_id = l.location_id + JOIN storage s ON s.storage_id = l.storage_src_id; """) result = cursor.fetchall() except Exception as e: @@ -605,9 +597,7 @@ class DbConnector(object): out.write(f"name: {node.name}\n") cursor = conn.cursor(cursor_factory = RealDictCursor) cursor.execute(""" - SELECT path FROM node n - JOIN node_vos_path o ON n.node_id = o.node_id - WHERE vos_path = %s; + SELECT path FROM node WHERE node_id = id_from_vos_path(%s); """, (node.parentPath,)) result = cursor.fetchall() @@ -676,9 +666,7 @@ class DbConnector(object): cursor.execute(""" WITH deleted AS ( DELETE FROM list_of_files - WHERE list_node_id = - (SELECT node_id FROM node_vos_path - WHERE vos_path = %s) + WHERE list_node_id = id_from_vos_path(%s) RETURNING list_node_id ) DELETE FROM node WHERE node_id = @@ -699,8 +687,7 @@ class DbConnector(object): cursor.execute(""" UPDATE node c SET async_trans = %s FROM node n - JOIN node_vos_path p ON n.node_id = p.node_id - WHERE c.path <@ n.path AND p.vos_path = %s; + WHERE c.path <@ n.path AND n.node_id = id_from_vos_path(%s); """, (value, nodeVOSPath,)) conn.commit() @@ -716,8 +703,7 @@ class DbConnector(object): cursor.execute(""" UPDATE node c SET busy_state = %s FROM node n - JOIN node_vos_path p ON n.node_id = p.node_id - WHERE c.path <@ n.path AND p.vos_path = %s; + WHERE c.path <@ n.path AND n.node_id = id_from_vos_path(%s); """, (value, nodeVOSPath,)) conn.commit()