Job reuse bugfix: do not reuse completed jobs that have NULL output.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 15 Apr 2014 15:11:49 +0000 (11:11 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 15 Apr 2014 15:11:49 +0000 (11:11 -0400)
services/api/app/controllers/arvados/v1/jobs_controller.rb
services/api/test/fixtures/jobs.yml
services/api/test/functional/arvados/v1/job_reuse_controller_test.rb

index 40f2def5dcbfd3a7546e55e68ebfcdc3547f4961..3a9f62406e1738439b81370b19ed716855cd45b1 100644 (file)
@@ -27,7 +27,7 @@ class Arvados::V1::JobsController < ApplicationController
                                           script_version: r).
         each do |j|
         if j.nondeterministic != true and
                                           script_version: r).
         each do |j|
         if j.nondeterministic != true and
-            j.success != false and
+            ((j.success == true and j.output != nil) or j.running == true) and
             j.script_parameters == resource_attrs[:script_parameters]
           # Record the first job in the list
           if !@object
             j.script_parameters == resource_attrs[:script_parameters]
           # Record the first job in the list
           if !@object
index a349229b4504151bf38c484bbfa8573dc334dd35..81e8cb3b1e37c13ba35e47d4e841df5009b7866d 100644 (file)
@@ -102,6 +102,7 @@ barbaz:
   finished_at: <%= 2.minute.ago.to_s(:db) %>
   running: false
   success: true
   finished_at: <%= 2.minute.ago.to_s(:db) %>
   running: false
   success: true
+  repository: foo
   output: ea10d51bcf88862dbcc36eb292017dfd+45
   priority: ~
   log: d41d8cd98f00b204e9800998ecf8427e+0
   output: ea10d51bcf88862dbcc36eb292017dfd+45
   priority: ~
   log: d41d8cd98f00b204e9800998ecf8427e+0
@@ -122,6 +123,18 @@ previous_job_run:
     input: fa7aeb5140e2848d39b416daeef4ffc5+45
     an_integer: "1"
   success: true
     input: fa7aeb5140e2848d39b416daeef4ffc5+45
     an_integer: "1"
   success: true
+  output: ea10d51bcf88862dbcc36eb292017dfd+45
+
+previous_job_run_no_output:
+  uuid: zzzzz-8i9sb-cjs4pklxxjykppp
+  owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz
+  script: hash
+  script_version: 4fe459abe02d9b365932b8f5dc419439ab4e2577
+  script_parameters:
+    input: fa7aeb5140e2848d39b416daeef4ffc5+45
+    an_integer: "2"
+  success: true
+  output: ~
 
 nondeterminisic_job_run:
   uuid: zzzzz-8i9sb-cjs4pklxxjykyyy
 
 nondeterminisic_job_run:
   uuid: zzzzz-8i9sb-cjs4pklxxjykyyy
index 03e577f48dca8beca0486915a91c6c201530c7bb..16916b7313f1ad1b448875ec864e5fa37f27ff8f 100644 (file)
@@ -2,7 +2,7 @@ require 'test_helper'
 load 'test/functional/arvados/v1/git_setup.rb'
 
 class Arvados::V1::JobReuseControllerTest < ActionController::TestCase
 load 'test/functional/arvados/v1/git_setup.rb'
 
 class Arvados::V1::JobReuseControllerTest < ActionController::TestCase
-  fixtures :repositories, :users, :jobs, :links
+  fixtures :repositories, :users, :jobs, :links, :collections
 
   # See git_setup.rb for the commit log for test.git.tar
   include GitSetup
 
   # See git_setup.rb for the commit log for test.git.tar
   include GitSetup
@@ -26,6 +26,24 @@ class Arvados::V1::JobReuseControllerTest < ActionController::TestCase
     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
   end
 
     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
   end
 
+  test "test_cannot_reuse_job_no_output" do
+    @controller = Arvados::V1::JobsController.new
+    authorize_with :active
+    post :create, job: {
+      script: "hash",
+      script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
+      repository: "foo",
+      script_parameters: {
+        input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
+        an_integer: '2'
+      }
+    }
+    assert_response :success
+    assert_not_nil assigns(:object)
+    new_job = JSON.parse(@response.body)
+    assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykppp', new_job['uuid']
+  end
+
   test "test_reuse_job_range" do
     @controller = Arvados::V1::JobsController.new
     authorize_with :active
   test "test_reuse_job_range" do
     @controller = Arvados::V1::JobsController.new
     authorize_with :active