From 2d5f2eb52067993b749e6e718a84f3696c8b22d8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9o=20Lesage?= <tlesage@teklia.com>
Date: Tue, 23 Apr 2024 18:20:40 +0200
Subject: [PATCH] Add Task.original_task

---
 arkindex/ponos/api.py                         |  1 +
 .../migrations/0008_task_original_task.py     | 19 +++++++++++++++++++
 arkindex/ponos/models.py                      |  9 ++++++++-
 arkindex/ponos/serializers.py                 |  2 ++
 4 files changed, 30 insertions(+), 1 deletion(-)
 create mode 100644 arkindex/ponos/migrations/0008_task_original_task.py

diff --git a/arkindex/ponos/api.py b/arkindex/ponos/api.py
index 0c123b1082..9334dc0e82 100644
--- a/arkindex/ponos/api.py
+++ b/arkindex/ponos/api.py
@@ -251,6 +251,7 @@ class TaskRestart(ProcessACLMixin, CreateAPIView):
         copy.save()
 
         # Copy the original task
+        copy.original_task_id = copy.id
         copy.id = uuid.uuid4()
         copy.slug = basename
         copy.state = State.Pending
diff --git a/arkindex/ponos/migrations/0008_task_original_task.py b/arkindex/ponos/migrations/0008_task_original_task.py
new file mode 100644
index 0000000000..36e072befc
--- /dev/null
+++ b/arkindex/ponos/migrations/0008_task_original_task.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.1.7 on 2024-04-23 12:19
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("ponos", "0007_remove_task_has_docker_socket"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="task",
+            name="original_task",
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="restarts", to="ponos.task"),
+        ),
+    ]
diff --git a/arkindex/ponos/models.py b/arkindex/ponos/models.py
index 2eaaee05e7..bfc1864aaa 100644
--- a/arkindex/ponos/models.py
+++ b/arkindex/ponos/models.py
@@ -313,13 +313,20 @@ class Task(models.Model):
         related_name="children",
         symmetrical=False,
     )
-
     container = models.CharField(
         max_length=64,
         null=True,
         blank=True,
     )
 
+    original_task = models.ForeignKey(
+        "self",
+        on_delete=models.SET_NULL,
+        null=True,
+        blank=True,
+        related_name="restarts"
+    )
+
     created = models.DateTimeField(auto_now_add=True)
     updated = models.DateTimeField(auto_now=True)
     expiry = models.DateTimeField(default=expiry_default)
diff --git a/arkindex/ponos/serializers.py b/arkindex/ponos/serializers.py
index 932cc7c0c9..392e993f43 100644
--- a/arkindex/ponos/serializers.py
+++ b/arkindex/ponos/serializers.py
@@ -89,6 +89,7 @@ class TaskSerializer(TaskLightSerializer):
             "agent",
             "gpu",
             "extra_files",
+            "original_task_id"
         )
         read_only_fields = TaskLightSerializer.Meta.read_only_fields + (
             "logs",
@@ -96,6 +97,7 @@ class TaskSerializer(TaskLightSerializer):
             "agent",
             "gpu",
             "extra_files",
+            "original_task_id"
         )
 
     @extend_schema_field(serializers.CharField())
-- 
GitLab