From 27344682a54438f2d52700a30095f88c25a32fa2 Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.dos.anjos@gmail.com>
Date: Wed, 27 Apr 2016 18:01:36 +0200
Subject: [PATCH] [backend] Add job state (kill)

---
 beat/web/backend/migrations/0002_scheduler_addons.py | 4 ++--
 beat/web/backend/models.py                           | 8 +++++---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/beat/web/backend/migrations/0002_scheduler_addons.py b/beat/web/backend/migrations/0002_scheduler_addons.py
index 4d41a6597..93525606a 100644
--- a/beat/web/backend/migrations/0002_scheduler_addons.py
+++ b/beat/web/backend/migrations/0002_scheduler_addons.py
@@ -146,7 +146,7 @@ class Migration(migrations.Migration):
             name='Job',
             fields=[
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
-                ('status', models.CharField(default=b'N', max_length=1, choices=[(b'N', b'Queued'), (b'P', b'Processing'), (b'C', b'Completed'), (b'F', b'Failed'), (b'S', b'Skipped'), (b'L', b'Cancelled')])),
+                ('status', models.CharField(default=b'N', max_length=1, choices=[(b'N', b'Queued'), (b'P', b'Processing'), (b'C', b'Completed'), (b'F', b'Failed'), (b'S', b'Skipped'), (b'L', b'Cancelled'), (b'K', b'Kill')])),
                 ('runnable_date', models.DateTimeField(null=True, blank=True)),
                 ('start_date', models.DateTimeField(null=True, blank=True)),
                 ('end_date', models.DateTimeField(null=True, blank=True)),
@@ -163,7 +163,7 @@ class Migration(migrations.Migration):
                 ('split_index', models.PositiveIntegerField()),
                 ('start_index', models.PositiveIntegerField(null=True)),
                 ('end_index', models.PositiveIntegerField(null=True)),
-                ('status', models.CharField(default=b'N', max_length=1, choices=[(b'N', b'Queued'), (b'P', b'Processing'), (b'C', b'Completed'), (b'F', b'Failed'), (b'S', b'Skipped'), (b'L', b'Cancelled')])),
+                ('status', models.CharField(default=b'N', max_length=1, choices=[(b'N', b'Queued'), (b'P', b'Processing'), (b'C', b'Completed'), (b'F', b'Failed'), (b'S', b'Skipped'), (b'L', b'Cancelled'), (b'K', b'Kill')])),
                 ('start_date', models.DateTimeField(null=True)),
                 ('end_date', models.DateTimeField(null=True)),
                 ('process_id', models.PositiveIntegerField(null=True)),
diff --git a/beat/web/backend/models.py b/beat/web/backend/models.py
index 300dad3e0..887b37d4c 100644
--- a/beat/web/backend/models.py
+++ b/beat/web/backend/models.py
@@ -472,6 +472,7 @@ class Job(models.Model):
     FAILED     = 'F' #Block.FAILED
     SKIPPED    = 'S' #Block.SKIPPED
     CANCELLED  = 'L' #Block.CANCELLED
+    KILL       = 'K' #Job was asked to be killed
 
     STATUS = (
         (QUEUED,     'Queued'),
@@ -701,7 +702,8 @@ class Job(models.Model):
 
             elif (Job.PROCESSING in split_statuses) or \
                 (Job.QUEUED in split_statuses and \
-                Job.COMPLETED in split_statuses):
+                Job.COMPLETED in split_statuses) or \
+                (Job.KILL in split_statuses):
                 self.status = Job.PROCESSING
 
             elif all([s == Job.SKIPPED for s in split_statuses]):
@@ -925,8 +927,8 @@ class JobSplit(models.Model):
         JobSplit.objects.select_for_update().filter(pk=self.pk)
 
         # If this split is running, then wait
-        if self.status == Job.PROCESSING and (self.process_id is not None):
-            self.status = Job.CANCELLED
+        if self.status == Job.PROCESSING:
+            self.status = Job.KILL
             self.save()
             logger.info("Job split `%s' is currently processing. Waiting " \
                 "for worker to cancel split remotely.", self)
-- 
GitLab