3859: crunch-job use apiserver Job lock method instead of racy is_locked_by.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 25 Sep 2014 13:34:46 +0000 (09:34 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 25 Sep 2014 13:34:46 +0000 (09:34 -0400)
sdk/cli/bin/crunch-job

index 70f379e53fd9cc307bd933bc1b21276097863e4a..6f5a699a303ed23bf4026fb29fd0b2653ec75bca 100755 (executable)
@@ -282,18 +282,17 @@ my $jobmanager_id;
 if ($job_has_uuid)
 {
   # Claim this job, and make sure nobody else does
-  unless ($Job->update_attributes('is_locked_by_uuid' => $User->{'uuid'}) &&
-          $Job->{'is_locked_by_uuid'} == $User->{'uuid'}) {
+  unless ($arv->{'jobs'}->{'lock'}->execute('uuid' => $Job->{'uuid'})) {
     Log(undef, "Error while updating / locking job, exiting ".EX_TEMPFAIL);
-    exit EX_TEMPFAIL;
-  }
-  $Job->update_attributes('started_at' => scalar gmtime,
-                          'running' => 1,
-                          'success' => undef,
-                          'tasks_summary' => { 'failed' => 0,
-                                               'todo' => 1,
-                                               'running' => 0,
-                                               'done' => 0 });
+    exit EX_TEMPFAIL;    
+  };
+
+  # lock() above sets is_locked_by_uuid and changes state to Running.
+  $Job->update_attributes(
+    'tasks_summary' => { 'failed' => 0,
+                         'todo' => 1,
+                         'running' => 0,
+                         'done' => 0 });
 }