Sfoglia il codice sorgente

fix: rétention silencieuse — sudo_rm vérifie le code retour et logue les échecs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Cedric Hansen 2 settimane fa
parent
commit
65983fda62
3 ha cambiato i file con 15 aggiunte e 8 eliminazioni
  1. 3 2
      sources/jobs/utils.py
  2. 4 1
      sources/jobs/ynh_backup.py
  3. 8 5
      sources/retention.py

+ 3 - 2
sources/jobs/utils.py

@@ -94,8 +94,9 @@ def batch_list_archives(backup_dir):
 
 
 def sudo_rm(path):
-    """Supprime un fichier root-owned via sudo rm. Silencieux si absent."""
-    subprocess.run(["sudo", "rm", "-f", path], capture_output=True)
+    """Supprime un fichier root-owned via sudo rm. Retourne True si supprimé."""
+    result = subprocess.run(["sudo", "rm", "-f", path], capture_output=True)
+    return result.returncode == 0
 
 
 def sudo_rm_archive(archive_name, backup_dir):

+ 4 - 1
sources/jobs/ynh_backup.py

@@ -48,9 +48,12 @@ def execute_job(job_id):
         db.session.commit()
 
         from retention import apply_retention
-        deleted = apply_retention(job, archive_name, backup_dir)
+        deleted, failed = apply_retention(job, archive_name, backup_dir)
         if deleted:
             run.log_text += f"\n\nRétention locale : {len(deleted)} archive(s) supprimée(s) : {', '.join(deleted)}"
+        if failed:
+            run.log_text += f"\n⚠ Rétention locale : échec de suppression pour : {', '.join(failed)}"
+        if deleted or failed:
             db.session.commit()
 
         # Checkpoint 2 : transfert vers chaque destination

+ 8 - 5
sources/retention.py

@@ -19,13 +19,16 @@ def apply_retention(job, new_archive_name, backup_dir):
 
     from jobs.utils import sudo_rm
     deleted = []
+    failed = []
     for archive_filename in to_delete:
         base = os.path.splitext(archive_filename)[0]
-        for ext in (".tar", ".info.json"):
-            full = os.path.join(backup_dir, base + ext)
-            sudo_rm(full)
-            deleted.append(base + ext)
-    return deleted
+        tar_path = os.path.join(backup_dir, base + ".tar")
+        if sudo_rm(tar_path):
+            deleted.append(archive_filename)
+            sudo_rm(os.path.join(backup_dir, base + ".info.json"))
+        else:
+            failed.append(archive_filename)
+    return deleted, failed
 
 
 def _job_archive_prefix(job, instance_name):