Specify apiVersion when instantiating Arvados client. closes #1773
[arvados.git] / sdk / cli / bin / crunch-job
index c2e87d2db5a747c4cc62c108f31b99b954dcefbf..655bd15242f69ab48f88baf9d5f0a0f20d81e27c 100755 (executable)
@@ -119,10 +119,8 @@ $SIG{'USR2'} = sub
 
 
 
-my $arv = Arvados->new;
-my $metastream = Warehouse::Stream->new(whc => new Warehouse);
-$metastream->clear;
-$metastream->write_start('log.txt');
+my $arv = Arvados->new('apiVersion' => 'v1');
+my $metastream;
 
 my $User = $arv->{'users'}->{'current'}->execute;
 
@@ -167,6 +165,10 @@ else
 }
 $job_id = $Job->{'uuid'};
 
+$metastream = Warehouse::Stream->new(whc => new Warehouse);
+$metastream->clear;
+$metastream->name('.');
+$metastream->write_start($job_id . '.log.txt');
 
 
 $Job->{'runtime_constraints'} ||= {};
@@ -258,7 +260,7 @@ if ($job_has_uuid)
           $Job->{'is_locked_by_uuid'} == $User->{'uuid'}) {
     croak("Error while updating / locking job");
   }
-  $Job->update_attributes('started_at' => gmtime,
+  $Job->update_attributes('started_at' => scalar gmtime,
                           'running' => 1,
                           'success' => undef,
                           'tasks_summary' => { 'failed' => 0,
@@ -296,6 +298,7 @@ my $jobstep_tomerge_level = 0;
 my $squeue_checked;
 my $squeue_kill_checked;
 my $output_in_keep = 0;
+my $latest_refresh = scalar time;
 
 
 
@@ -338,13 +341,13 @@ else
   Log (undef, "Install revision ".$Job->{script_version});
   my $nodelist = join(",", @node);
 
-  # Clean out crunch_tmp/work and crunch_tmp/opt
+  # Clean out crunch_tmp/work, crunch_tmp/opt, crunch_tmp/src*
 
   my $cleanpid = fork();
   if ($cleanpid == 0)
   {
     srun (["srun", "--nodelist=$nodelist", "-D", $ENV{'TMPDIR'}],
-         ['bash', '-c', 'if mount | grep -q $JOB_WORK/; then sudo /bin/umount $JOB_WORK/* 2>/dev/null; fi; sleep 1; rm -rf $JOB_WORK $CRUNCH_TMP/opt']);
+         ['bash', '-c', 'if mount | grep -q $JOB_WORK/; then sudo /bin/umount $JOB_WORK/* 2>/dev/null; fi; sleep 1; rm -rf $JOB_WORK $CRUNCH_TMP/opt $CRUNCH_TMP/src*']);
     exit (1);
   }
   while (1)
@@ -557,7 +560,8 @@ for (my $todo_ptr = 0; $todo_ptr <= $#jobstep_todo; $todo_ptr ++)
     my @execargs = qw(sh);
     my $build_script_to_send = "";
     my $command =
-       "mkdir -p $ENV{JOB_WORK} $ENV{CRUNCH_TMP} $ENV{TASK_WORK} "
+       "if [ -e $ENV{TASK_WORK} ]; then rm -rf $ENV{TASK_WORK}; fi; "
+        ."mkdir -p $ENV{JOB_WORK} $ENV{CRUNCH_TMP} $ENV{TASK_WORK} "
        ."&& cd $ENV{CRUNCH_TMP} ";
     if ($build_script)
     {
@@ -608,24 +612,6 @@ for (my $todo_ptr = 0; $todo_ptr <= $#jobstep_todo; $todo_ptr ++)
         (@slot > @freeslot && $todo_ptr+1 > $#jobstep_todo))
   {
     last THISROUND if $main::please_freeze;
-    if ($main::please_refresh)
-    {
-      $main::please_refresh = 0;
-      if ($job_has_uuid) {
-        $Job2 = $arv->{'jobs'}->{'get'}->execute('uuid' => $jobspec);
-        for my $attr ('cancelled_at',
-                      'cancelled_by_user_uuid',
-                      'cancelled_by_client_uuid') {
-          $Job->{$attr} = $Job2->{$attr};
-        }
-        if ($Job->{'cancelled_at'}) {
-          Log (undef, "Job cancelled at " . $Job->{cancelled_at} .
-               " by user " . $Job->{cancelled_by_user_uuid});
-          $main::success = 0;
-          $main::please_freeze = 1;
-        }
-      }
-    }
     if ($main::please_info)
     {
       $main::please_info = 0;
@@ -639,6 +625,7 @@ for (my $todo_ptr = 0; $todo_ptr <= $#jobstep_todo; $todo_ptr ++)
        + reapchildren ();
     if (!$gotsome)
     {
+      check_refresh_wanted();
       check_squeue();
       update_progress_stats();
       select (undef, undef, undef, 0.1);
@@ -695,6 +682,7 @@ while (%proc)
   readfrompipes ();
   if (!reapchildren())
   {
+    check_refresh_wanted();
     check_squeue();
     update_progress_stats();
     select (undef, undef, undef, 0.1);
@@ -731,7 +719,7 @@ if ($job_has_uuid) {
   $Job->update_attributes('output' => &collate_output(),
                           'running' => 0,
                           'success' => $Job->{'output'} && $main::success,
-                          'finished_at' => gmtime)
+                          'finished_at' => scalar gmtime)
 }
 
 if ($Job->{'output'})
@@ -884,6 +872,27 @@ sub reapchildren
   1;
 }
 
+sub check_refresh_wanted
+{
+  my @stat = stat $ENV{"CRUNCH_REFRESH_TRIGGER"};
+  if (@stat && $stat[9] > $latest_refresh) {
+    $latest_refresh = scalar time;
+    if ($job_has_uuid) {
+      my $Job2 = $arv->{'jobs'}->{'get'}->execute('uuid' => $jobspec);
+      for my $attr ('cancelled_at',
+                    'cancelled_by_user_uuid',
+                    'cancelled_by_client_uuid') {
+        $Job->{$attr} = $Job2->{$attr};
+      }
+      if ($Job->{'cancelled_at'}) {
+        Log (undef, "Job cancelled at " . $Job->{cancelled_at} .
+             " by user " . $Job->{cancelled_by_user_uuid});
+        $main::success = 0;
+        $main::please_freeze = 1;
+      }
+    }
+  }
+}
 
 sub check_squeue
 {
@@ -1149,7 +1158,7 @@ sub cleanup
   return if !$job_has_uuid;
   $Job->update_attributes('running' => 0,
                           'success' => 0,
-                          'finished_at' => gmtime);
+                          'finished_at' => scalar gmtime);
 }
 
 
@@ -1159,9 +1168,14 @@ sub save_meta
   my $m = $metastream;
   $m = $m->copy if $justcheckpoint;
   $m->write_finish;
-  my $loglocator = $m->as_key;
+  my $whc = Warehouse->new;
+  my $loglocator = $whc->store_block ($m->as_string);
+  $arv->{'collections'}->{'create'}->execute('collection' => {
+    'uuid' => $loglocator,
+    'manifest_text' => $m->as_string,
+  });
   undef $metastream if !$justcheckpoint; # otherwise Log() will try to use it
-  Log (undef, "meta key is $loglocator");
+  Log (undef, "log manifest is $loglocator");
   $Job->{'log'} = $loglocator;
   $Job->update_attributes('log', $loglocator) if $job_has_uuid;
 }
@@ -1337,7 +1351,7 @@ my $repo = $ENV{"CRUNCH_SRC_URL"};
 
 open L, ">", "$destdir.lock" or die "$destdir.lock: $!";
 flock L, LOCK_EX;
-if (readlink ("$destdir.commit") eq $commit) {
+if (readlink ("$destdir.commit") eq $commit && -d $destdir) {
     exit 0;
 }