[ARVADOS] created: 04fd6f8bbbedf91d5dc302a747b0e7771f57d2a0

Git user git at public.curoverse.com
Fri Jun 9 14:33:16 EDT 2017


        at  04fd6f8bbbedf91d5dc302a747b0e7771f57d2a0 (commit)


commit 04fd6f8bbbedf91d5dc302a747b0e7771f57d2a0
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Fri Jun 9 14:25:59 2017 -0400

    11642: Don't reuse completed jobs where output or log is null or not readable
    by current user.
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz at curoverse.com>

diff --git a/services/api/app/models/job.rb b/services/api/app/models/job.rb
index fa38ece..de9b3fc 100644
--- a/services/api/app/models/job.rb
+++ b/services/api/app/models/job.rb
@@ -275,14 +275,17 @@ class Job < ArvadosModel
         # Ignore: we have already decided not to reuse any completed
         # job.
         log_reuse_info { "job #{j.uuid} with output #{j.output} ignored, see above" }
+      elsif j.output.nil? or j.log.nil?
+        log_reuse_info { "job #{j.uuid} has nil output or log" }
       elsif Rails.configuration.reuse_job_if_outputs_differ
-        if Collection.readable_by(current_user).find_by_portable_data_hash(j.output)
+        if (Collection.readable_by(current_user).find_by_portable_data_hash(j.output) and
+            Collection.readable_by(current_user).find_by_portable_data_hash(j.log))
           log_reuse_info { "job #{j.uuid} with output #{j.output} is reusable; decision is final." }
           return j
         else
           # Ignore: keep locking for an incomplete job or one whose
           # output is readable.
-          log_reuse_info { "job #{j.uuid} output #{j.output} unavailable to user; continuing search" }
+          log_reuse_info { "job #{j.uuid} output #{j.output} or log #{j.log} unavailable to user; continuing search" }
         end
       elsif chosen
         if chosen.output != j.output
diff --git a/services/api/test/fixtures/jobs.yml b/services/api/test/fixtures/jobs.yml
index 809ba0e..abd2dca 100644
--- a/services/api/test/fixtures/jobs.yml
+++ b/services/api/test/fixtures/jobs.yml
@@ -183,6 +183,23 @@ previous_job_run:
   state: Complete
   script_parameters_digest: a5f03bbfb8ba88a2efe4a7852671605b
 
+previous_job_run_nil_log:
+  uuid: zzzzz-8i9sb-cjs4pklxxjykqq3
+  created_at: <%= 14.minute.ago.to_s(:db) %>
+  finished_at: <%= 13.minutes.ago.to_s(:db) %>
+  owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz
+  repository: active/foo
+  script: hash
+  script_version: 4fe459abe02d9b365932b8f5dc419439ab4e2577
+  script_parameters:
+    input: fa7aeb5140e2848d39b416daeef4ffc5+45
+    an_integer: "3"
+  success: true
+  log: ~
+  output: ea10d51bcf88862dbcc36eb292017dfd+45
+  state: Complete
+  script_parameters_digest: 445702df4029b8a6e7075b451ff1256a
+
 previous_ancient_job_run:
   uuid: zzzzz-8i9sb-ahd7cie8jah9qui
   created_at: <%= 366.days.ago.to_s(:db) %>
@@ -217,6 +234,7 @@ previous_docker_job_run:
   docker_image_locator: fa3c1a9cb6783f85f2ecda037e07b8c3+167
   state: Complete
   script_parameters_digest: a5f03bbfb8ba88a2efe4a7852671605b
+  log: ea10d51bcf88862dbcc36eb292017dfd+45
 
 previous_ancient_docker_image_job_run:
   uuid: zzzzz-8i9sb-t3b460aolxxuldl
@@ -255,6 +273,7 @@ previous_job_run_with_arvados_sdk_version:
   output: ea10d51bcf88862dbcc36eb292017dfd+45
   state: Complete
   script_parameters_digest: a5f03bbfb8ba88a2efe4a7852671605b
+  log: ea10d51bcf88862dbcc36eb292017dfd+45
 
 previous_job_run_no_output:
   uuid: zzzzz-8i9sb-cjs4pklxxjykppp
diff --git a/services/api/test/functional/arvados/v1/job_reuse_controller_test.rb b/services/api/test/functional/arvados/v1/job_reuse_controller_test.rb
index 8007fd2..afd0512 100644
--- a/services/api/test/functional/arvados/v1/job_reuse_controller_test.rb
+++ b/services/api/test/functional/arvados/v1/job_reuse_controller_test.rb
@@ -50,6 +50,26 @@ class Arvados::V1::JobReuseControllerTest < ActionController::TestCase
     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
   end
 
+  test "no reuse job with null log" do
+    post :create, {
+      job: {
+        script: "hash",
+        script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
+        repository: "active/foo",
+        script_parameters: {
+          input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
+          an_integer: '3'
+        }
+      },
+      find_or_create: true
+    }
+    assert_response :success
+    assert_not_nil assigns(:object)
+    new_job = JSON.parse(@response.body)
+    assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqq3', new_job['uuid']
+    assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
+  end
+
   test "reuse job with symbolic script_version" do
     post :create, {
       job: {

commit 7899dbfa16983e230aa26766d01182cfb27259d1
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Fri Jun 9 13:27:51 2017 -0400

    11642: Increase arv-put retries.  Job considered failure if unable to save job log.
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz at curoverse.com>

diff --git a/sdk/cli/bin/crunch-job b/sdk/cli/bin/crunch-job
index 55e35b0..35a3b1f 100755
--- a/sdk/cli/bin/crunch-job
+++ b/sdk/cli/bin/crunch-job
@@ -1130,10 +1130,10 @@ freeze();
 my $collated_output = save_output_collection();
 Log (undef, "finish");
 
-save_meta();
+my $final_log = save_meta();
 
 my $final_state;
-if ($collated_output && $main::success) {
+if ($collated_output && $final_log && $main::success) {
   $final_state = 'Complete';
 } else {
   $final_state = 'Failed';
@@ -1760,7 +1760,7 @@ sub log_writer_start($)
   $log_pipe_pid = open2($log_pipe_out, $log_pipe_in,
                         'arv-put',
                         '--stream',
-                        '--retries', '3',
+                        '--retries', '6',
                         '--filename', $logfilename,
                         '-');
   $log_pipe_out_buf = "";
@@ -1898,6 +1898,8 @@ sub save_meta
     });
   Log(undef, "log collection is " . $log_coll->{portable_data_hash});
   $Job->update_attributes('log' => $log_coll->{portable_data_hash});
+
+  return $log_coll->{portable_data_hash};
 }
 
 

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list