arvados-cli 0.1.20141006171315 → 0.1.20141006182226

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/crunch-job +73 -15
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68b3a31004a457fb98b8cfdeb371c54e148dc1ff
4
- data.tar.gz: aa6fabddda25ea6217cc38c90d6c800ba0401e4c
3
+ metadata.gz: dda195888cf5d8edd4cd36823fa416d43ceefd6a
4
+ data.tar.gz: 7de92aa09c4f47fc65704a4aecf48b568e82d73c
5
5
  SHA512:
6
- metadata.gz: f2b6c2ff8518e6458cb616bd97fdd3f87d20352969494a174a56b48a5e21f64d19e2749f809c964e190b0a14270657923b1635bf2167709b20b21d5222ac1144
7
- data.tar.gz: aaaf716e41d5e6bf1910233c2bc3821b88c768097bdd5c87db53e149676ff2aa232cd8206aacdf484088d1c6d6459e8b2c41efb6577e544dfeb8538c81b7063f
6
+ metadata.gz: 3e4bc3c2153dd7a015976950935b338bbe796df5839f7d2073f342ff0c3f54ef5b21b9c7f7ad289f0bde5864ab9e11a1d0cb2149d74c1d880308ac3f88f38111
7
+ data.tar.gz: a9fd3975250cc52032538fc740ac8b48acd223e2a9b603a9c2198b64f51608cafefe0fb513a1548b135d2068aecd7888d43989ed08b63cf52cd1c8ff4c2f217d
data/bin/crunch-job CHANGED
@@ -141,7 +141,6 @@ $SIG{'USR2'} = sub
141
141
 
142
142
 
143
143
  my $arv = Arvados->new('apiVersion' => 'v1');
144
- my $local_logfile;
145
144
 
146
145
  my $User = $arv->{'users'}->{'current'}->execute;
147
146
 
@@ -184,7 +183,7 @@ else
184
183
  $job_id = $Job->{'uuid'};
185
184
 
186
185
  my $keep_logfile = $job_id . '.log.txt';
187
- $local_logfile = File::Temp->new();
186
+ log_writer_start($keep_logfile);
188
187
 
189
188
  $Job->{'runtime_constraints'} ||= {};
190
189
  $Job->{'runtime_constraints'}->{'max_tasks_per_node'} ||= 0;
@@ -1275,6 +1274,73 @@ sub fhbits
1275
1274
  }
1276
1275
 
1277
1276
 
1277
+ # Send log output to Keep via arv-put.
1278
+ #
1279
+ # $log_pipe_in and $log_pipe_out are the input and output filehandles to the arv-put pipe.
1280
+ # $log_pipe_pid is the pid of the arv-put subprocess.
1281
+ #
1282
+ # The only functions that should access these variables directly are:
1283
+ #
1284
+ # log_writer_start($logfilename)
1285
+ # Starts an arv-put pipe, reading data on stdin and writing it to
1286
+ # a $logfilename file in an output collection.
1287
+ #
1288
+ # log_writer_send($txt)
1289
+ # Writes $txt to the output log collection.
1290
+ #
1291
+ # log_writer_finish()
1292
+ # Closes the arv-put pipe and returns the output that it produces.
1293
+ #
1294
+ # log_writer_is_active()
1295
+ # Returns a true value if there is currently a live arv-put
1296
+ # process, false otherwise.
1297
+ #
1298
+ my ($log_pipe_in, $log_pipe_out, $log_pipe_pid);
1299
+
1300
+ sub log_writer_start($)
1301
+ {
1302
+ my $logfilename = shift;
1303
+ $log_pipe_pid = open2($log_pipe_out, $log_pipe_in,
1304
+ 'arv-put', '--portable-data-hash',
1305
+ '--retries', '3',
1306
+ '--filename', $logfilename,
1307
+ '-');
1308
+ }
1309
+
1310
+ sub log_writer_send($)
1311
+ {
1312
+ my $txt = shift;
1313
+ print $log_pipe_in $txt;
1314
+ }
1315
+
1316
+ sub log_writer_finish()
1317
+ {
1318
+ return unless $log_pipe_pid;
1319
+
1320
+ close($log_pipe_in);
1321
+ my $arv_put_output;
1322
+
1323
+ my $s = IO::Select->new($log_pipe_out);
1324
+ if ($s->can_read(120)) {
1325
+ sysread($log_pipe_out, $arv_put_output, 1024);
1326
+ chomp($arv_put_output);
1327
+ } else {
1328
+ Log (undef, "timed out reading from 'arv-put'");
1329
+ }
1330
+
1331
+ waitpid($log_pipe_pid, 0);
1332
+ $log_pipe_pid = $log_pipe_in = $log_pipe_out = undef;
1333
+ if ($?) {
1334
+ Log("log_writer_finish: arv-put returned error $?")
1335
+ }
1336
+
1337
+ return $arv_put_output;
1338
+ }
1339
+
1340
+ sub log_writer_is_active() {
1341
+ return $log_pipe_pid;
1342
+ }
1343
+
1278
1344
  sub Log # ($jobstep_id, $logmessage)
1279
1345
  {
1280
1346
  if ($_[1] =~ /\n/) {
@@ -1288,15 +1354,15 @@ sub Log # ($jobstep_id, $logmessage)
1288
1354
  $message =~ s{([^ -\176])}{"\\" . sprintf ("%03o", ord($1))}ge;
1289
1355
  $message .= "\n";
1290
1356
  my $datetime;
1291
- if ($local_logfile || -t STDERR) {
1357
+ if (log_writer_is_active() || -t STDERR) {
1292
1358
  my @gmtime = gmtime;
1293
1359
  $datetime = sprintf ("%04d-%02d-%02d_%02d:%02d:%02d",
1294
1360
  $gmtime[5]+1900, $gmtime[4]+1, @gmtime[3,2,1,0]);
1295
1361
  }
1296
1362
  print STDERR ((-t STDERR) ? ($datetime." ".$message) : $message);
1297
1363
 
1298
- if ($local_logfile) {
1299
- print $local_logfile $datetime . " " . $message;
1364
+ if (log_writer_is_active()) {
1365
+ log_writer_send($datetime . " " . $message);
1300
1366
  }
1301
1367
  }
1302
1368
 
@@ -1309,7 +1375,7 @@ sub croak
1309
1375
  freeze() if @jobstep_todo;
1310
1376
  collate_output() if @jobstep_todo;
1311
1377
  cleanup();
1312
- save_meta() if $local_logfile;
1378
+ save_meta() if log_writer_is_active();
1313
1379
  die;
1314
1380
  }
1315
1381
 
@@ -1330,15 +1396,7 @@ sub save_meta
1330
1396
  my $justcheckpoint = shift; # false if this will be the last meta saved
1331
1397
  return if $justcheckpoint; # checkpointing is not relevant post-Warehouse.pm
1332
1398
 
1333
- $local_logfile->flush;
1334
- my $retry_count = put_retry_count();
1335
- my $cmd = "arv-put --portable-data-hash --retries $retry_count " .
1336
- "--filename ''\Q$keep_logfile\E " . quotemeta($local_logfile->filename);
1337
- my $loglocator = `$cmd`;
1338
- die "system $cmd failed: $?" if $?;
1339
- chomp($loglocator);
1340
-
1341
- $local_logfile = undef; # the temp file is automatically deleted
1399
+ my $loglocator = log_writer_finish();
1342
1400
  Log (undef, "log manifest is $loglocator");
1343
1401
  $Job->{'log'} = $loglocator;
1344
1402
  $Job->update_attributes('log', $loglocator) if $job_has_uuid;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arvados-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.20141006171315
4
+ version: 0.1.20141006182226
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arvados Authors
@@ -178,7 +178,7 @@ dependencies:
178
178
  - - "<"
179
179
  - !ruby/object:Gem::Version
180
180
  version: 1.0.0
181
- description: Arvados command line tools, git commit 77e3dec8727c1fc00665531a39583c85b2c404bb
181
+ description: Arvados command line tools, git commit d65963976174bd9c94fdb0b91eeb8a281f01e7b3
182
182
  email: gem-dev@curoverse.com
183
183
  executables:
184
184
  - arv