arvados-cli 0.1.20140403152751 → 0.1.20140403155249

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/crunch-job +49 -89
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1790f4c0faccd8bca4580c3f0e7d1024c849ac2a
4
- data.tar.gz: b3f82ba4927f1e9600724ff04e8468bf90c98082
3
+ metadata.gz: 5ae48eceb6e1a15ee8b14c99aeb18680a103fe28
4
+ data.tar.gz: 0ff02e615a2a053a80a9671259e474854fdee58e
5
5
  SHA512:
6
- metadata.gz: 84eeff7d3b99305b384e7d1cac3db1de5468dffb4168ee2e1a49ffbcbd47c688a9c93a70673f16bfb4304214fddddd66012b1ea8facc7b5d12900f7d08240a68
7
- data.tar.gz: 2ea3ac5c92980197cec8b5cf4f8a45a9611a9a3d1f05640d2f12b2036c8d4081ab63160e27c59916d3a093b1663c4164c382238056d924d362e7e10daa25a1dd
6
+ metadata.gz: 33467b027edfdd6ef6ffb138b0a0868e6bc6a0b7f54909bd09022d10fa4f9f5900d4e70c26360fbcf5fe2e40aa6551165fe12c13d70714c2f3fcbc55017dca4c
7
+ data.tar.gz: 39fcee1939a25c2522bc27964676f55324a7b3579a702547740a392628b950a37dae06e0843e50dba1423a27c9705f61a7c302cf3158e47f5c67b7d811688e01
data/bin/crunch-job CHANGED
@@ -77,9 +77,9 @@ use POSIX ':sys_wait_h';
77
77
  use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
78
78
  use Arvados;
79
79
  use Getopt::Long;
80
- use Warehouse;
81
- use Warehouse::Stream;
82
- use IPC::System::Simple qw(capturex);
80
+ use IPC::Open2;
81
+ use IO::Select;
82
+ use File::Temp;
83
83
  use Fcntl ':flock';
84
84
 
85
85
  $ENV{"TMPDIR"} ||= "/tmp";
@@ -175,11 +175,8 @@ else
175
175
  }
176
176
  $job_id = $Job->{'uuid'};
177
177
 
178
- $metastream = Warehouse::Stream->new(whc => new Warehouse);
179
- $metastream->clear;
180
- $metastream->name('.');
181
- $metastream->write_start($job_id . '.log.txt');
182
-
178
+ my $keep_logfile = $job_id . '.log.txt';
179
+ my $local_logfile = File::Temp->new();
183
180
 
184
181
  $Job->{'runtime_constraints'} ||= {};
185
182
  $Job->{'runtime_constraints'}->{'max_tasks_per_node'} ||= 0;
@@ -761,7 +758,7 @@ if ($job_has_uuid) {
761
758
  if ($Job->{'output'})
762
759
  {
763
760
  eval {
764
- my $manifest_text = capturex("whget", $Job->{'output'});
761
+ my $manifest_text = `arv keep get \Q$Job->{'output'}\E`;
765
762
  $arv->{'collections'}->{'create'}->execute('collection' => {
766
763
  'uuid' => $Job->{'output'},
767
764
  'manifest_text' => $manifest_text,
@@ -1071,12 +1068,24 @@ sub process_stderr
1071
1068
  } split ("\n", $jobstep[$job]->{stderr});
1072
1069
  }
1073
1070
 
1071
+ sub fetch_block
1072
+ {
1073
+ my $hash = shift;
1074
+ my ($keep, $child_out, $output_block);
1075
+
1076
+ my $cmd = "arv keep get \Q$hash\E";
1077
+ open($keep, '-|', $cmd) or die "fetch_block: $cmd: $!";
1078
+ sysread($keep, $output_block, 64 * 1024 * 1024);
1079
+ close $keep;
1080
+ return $output_block;
1081
+ }
1074
1082
 
1075
1083
  sub collate_output
1076
1084
  {
1077
- my $whc = Warehouse->new;
1078
1085
  Log (undef, "collate");
1079
- $whc->write_start (1);
1086
+
1087
+ my ($child_out, $child_in);
1088
+ my $pid = open2($child_out, $child_in, 'arv', 'keep', 'put', '--raw');
1080
1089
  my $joboutput;
1081
1090
  for (@jobstep)
1082
1091
  {
@@ -1087,26 +1096,36 @@ sub collate_output
1087
1096
  if ($output !~ /^[0-9a-f]{32}(\+\S+)*$/)
1088
1097
  {
1089
1098
  $output_in_keep ||= $output =~ / [0-9a-f]{32}\S*\+K/;
1090
- $whc->write_data ($output);
1099
+ print $child_in $output;
1091
1100
  }
1092
1101
  elsif (@jobstep == 1)
1093
1102
  {
1094
1103
  $joboutput = $output;
1095
- $whc->write_finish;
1104
+ last;
1096
1105
  }
1097
- elsif (defined (my $outblock = $whc->fetch_block ($output)))
1106
+ elsif (defined (my $outblock = fetch_block ($output)))
1098
1107
  {
1099
1108
  $output_in_keep ||= $outblock =~ / [0-9a-f]{32}\S*\+K/;
1100
- $whc->write_data ($outblock);
1109
+ print $child_in $outblock;
1101
1110
  }
1102
1111
  else
1103
1112
  {
1104
- my $errstr = $whc->errstr;
1105
- $whc->write_data ("XXX fetch_block($output) failed: $errstr XXX\n");
1113
+ Log (undef, "XXX fetch_block($output) failed XXX");
1106
1114
  $main::success = 0;
1107
1115
  }
1108
1116
  }
1109
- $joboutput = $whc->write_finish if !defined $joboutput;
1117
+ $child_in->close;
1118
+
1119
+ if (!defined $joboutput) {
1120
+ my $s = IO::Select->new($child_out);
1121
+ if ($s->can_read(120)) {
1122
+ sysread($child_out, $joboutput, 64 * 1024 * 1024);
1123
+ } else {
1124
+ Log (undef, "timed out reading from 'arv keep put'");
1125
+ }
1126
+ }
1127
+ waitpid($pid, 0);
1128
+
1110
1129
  if ($joboutput)
1111
1130
  {
1112
1131
  Log (undef, "output $joboutput");
@@ -1181,8 +1200,9 @@ sub Log # ($jobstep_id, $logmessage)
1181
1200
  }
1182
1201
  print STDERR ((-t STDERR) ? ($datetime." ".$message) : $message);
1183
1202
 
1184
- return if !$metastream;
1185
- $metastream->write_data ($datetime . " " . $message);
1203
+ if ($metastream) {
1204
+ print $metastream $datetime . " " . $message;
1205
+ }
1186
1206
  }
1187
1207
 
1188
1208
 
@@ -1211,16 +1231,15 @@ sub cleanup
1211
1231
  sub save_meta
1212
1232
  {
1213
1233
  my $justcheckpoint = shift; # false if this will be the last meta saved
1214
- my $m = $metastream;
1215
- $m = $m->copy if $justcheckpoint;
1216
- $m->write_finish;
1217
- my $whc = Warehouse->new;
1218
- my $loglocator = $whc->store_block ($m->as_string);
1219
- $arv->{'collections'}->{'create'}->execute('collection' => {
1220
- 'uuid' => $loglocator,
1221
- 'manifest_text' => $m->as_string,
1222
- });
1223
- undef $metastream if !$justcheckpoint; # otherwise Log() will try to use it
1234
+ return if $justcheckpoint; # checkpointing is not relevant post-Warehouse.pm
1235
+
1236
+ $local_logfile->flush;
1237
+ my $cmd = "arv keep put --filename \Q$keep_logfile\E "
1238
+ . quotemeta($local_logfile->filename);
1239
+ my $loglocator = `$cmd`;
1240
+ die "system $cmd failed: $?" if $?;
1241
+
1242
+ $local_logfile = undef; # the temp file is automatically deleted
1224
1243
  Log (undef, "log manifest is $loglocator");
1225
1244
  $Job->{'log'} = $loglocator;
1226
1245
  $Job->update_attributes('log', $loglocator) if $job_has_uuid;
@@ -1266,65 +1285,6 @@ sub freeze
1266
1285
  sub thaw
1267
1286
  {
1268
1287
  croak ("Thaw not implemented");
1269
-
1270
- my $whc;
1271
- my $key = shift;
1272
- Log (undef, "thaw from $key");
1273
-
1274
- @jobstep = ();
1275
- @jobstep_done = ();
1276
- @jobstep_todo = ();
1277
- @jobstep_tomerge = ();
1278
- $jobstep_tomerge_level = 0;
1279
- my $frozenjob = {};
1280
-
1281
- my $stream = new Warehouse::Stream ( whc => $whc,
1282
- hash => [split (",", $key)] );
1283
- $stream->rewind;
1284
- while (my $dataref = $stream->read_until (undef, "\n\n"))
1285
- {
1286
- if ($$dataref =~ /^job /)
1287
- {
1288
- foreach (split ("\n", $$dataref))
1289
- {
1290
- my ($k, $v) = split ("=", $_, 2);
1291
- $frozenjob->{$k} = freezeunquote ($v);
1292
- }
1293
- next;
1294
- }
1295
-
1296
- if ($$dataref =~ /^merge (\d+) (.*)/)
1297
- {
1298
- $jobstep_tomerge_level = $1;
1299
- @jobstep_tomerge
1300
- = map { freezeunquote ($_) } split ("\n", freezeunquote($2));
1301
- next;
1302
- }
1303
-
1304
- my $Jobstep = { };
1305
- foreach (split ("\n", $$dataref))
1306
- {
1307
- my ($k, $v) = split ("=", $_, 2);
1308
- $Jobstep->{$k} = freezeunquote ($v) if $k;
1309
- }
1310
- $Jobstep->{'failures'} = 0;
1311
- push @jobstep, $Jobstep;
1312
-
1313
- if ($Jobstep->{exitcode} eq "0")
1314
- {
1315
- push @jobstep_done, $#jobstep;
1316
- }
1317
- else
1318
- {
1319
- push @jobstep_todo, $#jobstep;
1320
- }
1321
- }
1322
-
1323
- foreach (qw (script script_version script_parameters))
1324
- {
1325
- $Job->{$_} = $frozenjob->{$_};
1326
- }
1327
- $Job->save if $job_has_uuid;
1328
1288
  }
1329
1289
 
1330
1290
 
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.20140403152751
4
+ version: 0.1.20140403155249
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arvados Authors
@@ -146,7 +146,7 @@ dependencies:
146
146
  - - "~>"
147
147
  - !ruby/object:Gem::Version
148
148
  version: '0.8'
149
- description: This is the Arvados SDK CLI gem, git revision 3854a47d632dde711f57c047e80ca84b0b786815
149
+ description: This is the Arvados SDK CLI gem, git revision 39717c4347c00ee0697942d60a50000bfc89fe3c
150
150
  email: gem-dev@curoverse.com
151
151
  executables:
152
152
  - arv