From: Marius Gavrilescu Date: Thu, 11 Feb 2016 16:29:35 +0000 (+0000) Subject: Merge branch 'master' into scaleway X-Git-Url: http://git.ieval.ro/?p=gruntmaster-daemon.git;a=commitdiff_plain;h=b64ba7e2b3b74ff6ee886e1ee3c85f7468758daf;hp=-c Merge branch 'master' into scaleway --- b64ba7e2b3b74ff6ee886e1ee3c85f7468758daf diff --combined lib/Gruntmaster/Daemon.pm index b8c6b5c,2af9b53..ef3aea6 --- a/lib/Gruntmaster/Daemon.pm +++ b/lib/Gruntmaster/Daemon.pm @@@ -7,13 -7,12 +7,12 @@@ use warnings our $VERSION = '5999.000_005'; use Gruntmaster::Daemon::Constants qw/ERR/; -use Gruntmaster::Daemon::Format qw/prepare_files stopvms/; +use Gruntmaster::Daemon::Format qw/prepare_files copy_from_vm stopvms/; use File::Slurp qw/read_file/; use File::Temp qw/tempdir/; use JSON qw/decode_json encode_json/; use Sys::Hostname qw/hostname/; - use Time::HiRes qw/time/; use Try::Tiny; use Log::Log4perl qw/get_logger/; @@@ -68,7 -67,6 +67,6 @@@ sub process $judge = safe_can Judge => judge => $judge; for my $test (1 .. $testcnt) { - my $start_time = time; my $result; unlink 'result'; try { @@@ -82,15 -80,17 +80,18 @@@ } }; + my $time = '?'; + $time = (read_file 'time-stop-prog') - (read_file 'time-start-prog') if -f 'time-stop-prog' && -f 'time-start-prog'; + unlink 'time-start-prog', 'time-stop-prog'; if (ref $result) { my $result_text = $result->[1]; + copy_from_vm 'result'; $result_text .= ': ' . read_file 'result' if -s 'result'; get_logger->trace("Test $test result is " . $result_text); - push @full_results, {id => $test, result => $result->[0], result_text => $result_text, time => time - $start_time} + push @full_results, {id => $test, result => $result->[0], result_text => $result_text, time => $time} } else { get_logger->trace("Test $test result is $result"); - push @full_results, {id => $test, result => 0, result_text => $result, time => time - $start_time} + push @full_results, {id => $test, result => 0, result_text => $result, time => $time} } push @results, $result; last if $meta->{judge} eq 'Absolute' && ref $result diff --combined lib/Gruntmaster/Daemon/Format.pm index 41f2354,6d6bd8f..2f117d7 --- a/lib/Gruntmaster/Daemon/Format.pm +++ b/lib/Gruntmaster/Daemon/Format.pm @@@ -14,46 -14,31 +14,47 @@@ use File::Slurp qw/read_file write_file use List::MoreUtils qw/natatime/; use Log::Log4perl qw/get_logger/; use String::ShellQuote qw/shell_quote/; + use Time::HiRes qw/time/; use Try::Tiny; our $VERSION = '5999.000_005'; -our @EXPORT_OK = qw/prepare_files stopvms/; +our @EXPORT_OK = qw/copy_from_vm copy_to_vm prepare_files stopvms/; ################################################## our (%vm, %pid); +sub copy_from_vm { + my ($file) = @_; + return unless $ENV{GRUNTMASTER_COPY_FROM_VM}; + get_logger->trace("Copying $file from VM"); + system $ENV{GRUNTMASTER_COPY_FROM_VM}, $file +} + +sub copy_to_vm { + my ($file) = @_; + return unless $ENV{GRUNTMASTER_COPY_TO_VM}; + get_logger->trace("Copying $file to VM"); + system $ENV{GRUNTMASTER_COPY_TO_VM}, $file +} + sub runvm { my ($name, $arg) = @_; return unless $ENV{GRUNTMASTER_VM}; - my $cmd = $ENV{GRUNTMASTER_VM}; + my $cmd = $ENV{GRUNTMASTER_VM} . ' ' . $name; $cmd .= ' ' . $arg if $arg; get_logger->trace("Starting VM $name ($cmd)"); $vm{$name} = Expect->new; $vm{$name}->raw_pty(1); $vm{$name}->log_stdout(0); $vm{$name}->spawn($cmd); - $vm{$name}->expect(5, '# ') or get_logger->logdie("Error while starting VM $name: ". $vm{$name}->error); + $vm{$name}->expect(50, '# ') or get_logger->logdie("Error while starting VM $name: ". $vm{$name}->error); + $vm{$name}->send("rm -rf ~/work/*\n"); + $vm{$name}->expect(50, '# ') } sub stopvms { - kill KILL => $_->pid for values %vm; + $_->hard_close for values %vm; %vm = %pid = (); } @@@ -62,15 -47,15 +63,16 @@@ sub execlist_finish if ($vm{$vm}) { warn "Cannot kill VM\n" if $kill; - $vm{$vm}->expect(5, '# '); + $vm{$vm}->expect(50, '# '); } else { kill KILL => $pid{$vm} if $kill; waitpid $pid{$vm}, 0; } + write_file "time-stop-$vm", time; return if $kill; my $er = "exec-result-$vm"; + copy_from_vm $er; die "gruntmaster-exec died\n" if -z $er; my ($excode, $exmsg) = read_file $er; unlink $er; @@@ -81,6 -66,7 +83,7 @@@ sub execlist { my ($vm, @args) = @_; + write_file "time-start-$vm", time; my $er = "exec-result-$vm"; if ($vm{$vm}) { my $cmd = ">$er " . shell_quote 'gruntmaster-exec', @args; @@@ -129,7 -115,6 +132,7 @@@ sub prepare my $exmsg = $_->[1]; die "Compile error ($exmsg)\n" } finally { + copy_from_vm 'errors'; $Gruntmaster::Daemon::errors .= read_file 'errors'; $Gruntmaster::Daemon::errors .= "\n" if -s 'errors'; unlink 'errors'; @@@ -150,7 -135,6 +153,7 @@@ sub prepare_files $file->{run} = mkrun($format); write_file $name, $content; + copy_to_vm $name; if ($ENV{GRUNTMASTER_CCACHE}) { my $key = lc sha256_hex($content) . '-' . $format; my $cachefn = "$ENV{GRUNTMASTER_CCACHE}/$key";