eval: limit docker output to not run out of memory
This commit is contained in:
parent
c57a563ea3
commit
1996ab90ca
27 changed files with 29 additions and 28 deletions
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.apl
|
cat > program.apl
|
||||||
apl --OFF -s -f program.apl || true
|
apl --OFF -s -f program.apl || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.sh
|
cat > program.sh
|
||||||
bash program.sh || true
|
bash program.sh || true
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
printf %s "$1" | bf || true
|
cat | bf || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.c
|
cat > program.c
|
||||||
gcc program.c -o program && ./program || true
|
gcc program.c -o program && ./program || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.clj
|
cat > program.clj
|
||||||
clojure program.clj || true
|
clojure program.clj || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.cpp
|
cat > program.cpp
|
||||||
g++ program.cpp -o program && ./program || true
|
g++ program.cpp -o program && ./program || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.cs
|
cat > program.cs
|
||||||
csc program.cs >/dev/null && mono program.exe || true
|
csc program.cs >/dev/null && mono program.exe || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.exs
|
cat > program.exs
|
||||||
elixir program.exs || true
|
elixir program.exs || true
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
echo "%% -*- erlang -*-" > program.erl
|
echo "%% -*- erlang -*-" > program.erl
|
||||||
printf %s "$1" >> program.erl
|
cat >> program.erl
|
||||||
escript program.erl || true
|
escript program.erl || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.fs
|
cat > program.fs
|
||||||
fsharpc --optimize- program.fs >/dev/null && mono program.exe || true
|
fsharpc --optimize- program.fs >/dev/null && mono program.exe || true
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
export GOCACHE=/tmp/"$CODEDIR"/cache
|
export GOCACHE=/tmp/"$CODEDIR"/cache
|
||||||
printf %s "$1" > program.go
|
cat > program.go
|
||||||
go run program.go || true
|
go run program.go || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.hs
|
cat > program.hs
|
||||||
ghc -e main program.hs || true
|
ghc -e main program.hs || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > Main.idr
|
cat > Main.idr
|
||||||
idris --execute ./Main.idr || true
|
idris --execute ./Main.idr || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > Main.java
|
cat > Main.java
|
||||||
javac Main.java && java Main || true
|
javac Main.java && java Main || true
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
printf %s "$1" | node -p || true
|
cat | node -p || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.jl
|
cat > program.jl
|
||||||
julia program.jl || true
|
julia program.jl || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.lua
|
cat > program.lua
|
||||||
lua5.3 program.lua || true
|
lua5.3 program.lua || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.ml
|
cat > program.ml
|
||||||
ocamlopt -cclib --static -o program program.ml && ./program || true
|
ocamlopt -cclib --static -o program program.ml && ./program || true
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
printf %s "$1" > program.pas
|
cat > program.pas
|
||||||
|
|
||||||
# fpc does not use stderr, ld however does, capture both
|
# fpc does not use stderr, ld however does, capture both
|
||||||
res="$(fpc program.pas 2>&1)"
|
res="$(fpc program.pas 2>&1)"
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.pl
|
cat > program.pl
|
||||||
perl program.pl || true
|
perl program.pl || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.php
|
cat > program.php
|
||||||
php program.php || true
|
php program.php || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.pl
|
cat > program.pl
|
||||||
swipl --quiet program.pl || true
|
swipl --quiet program.pl || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.py
|
cat > program.py
|
||||||
python program.py || true
|
python program.py || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.rkt
|
cat > program.rkt
|
||||||
racket program.rkt || true
|
racket program.rkt || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.rb
|
cat > program.rb
|
||||||
ruby program.rb || true
|
ruby program.rb || true
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
printf %s "$1" > program.rs
|
cat > program.rs
|
||||||
rustc -C opt-level=0 --color never program.rs && ./program || true
|
rustc -C opt-level=0 --color never program.rs && ./program || true
|
||||||
|
|
|
@ -179,8 +179,9 @@ evalCode lang@LanguageConfig { name, timeout, retries } numRetries code = withCo
|
||||||
exec_ ["docker exec ", cs cnt, " mkdir eval/", show snowflake]
|
exec_ ["docker exec ", cs cnt, " mkdir eval/", show snowflake]
|
||||||
exec_ ["docker exec ", cs cnt, " chmod 777 eval/", show snowflake]
|
exec_ ["docker exec ", cs cnt, " chmod 777 eval/", show snowflake]
|
||||||
-- User 1001 will be used for the actual execution so that they can't access `eval` itself
|
-- User 1001 will be used for the actual execution so that they can't access `eval` itself
|
||||||
let args = ["exec", "-u1001:1001", "-w/tmp/eval/" <> show snowflake, cnt, "/bin/sh", "/var/run/run.sh", code]
|
let cmd = concat ["docker exec -i -u1001:1001 -w/tmp/eval/", show snowflake, " ", cnt, " /bin/sh /var/run/run.sh | head -c 4K"]
|
||||||
output <- readProcessInterleaved_ $ proc "docker" args
|
pr = setStdin (byteStringInput $ cs code) $ shell cmd
|
||||||
|
output <- readProcessInterleaved_ pr
|
||||||
exec_ ["docker exec ", cnt, " rm -rf eval/", show snowflake]
|
exec_ ["docker exec ", cnt, " rm -rf eval/", show snowflake]
|
||||||
logInfo ["Ran code in container ", cs cnt, ", evaluation ", cs $ show snowflake]
|
logInfo ["Ran code in container ", cs cnt, ", evaluation ", cs $ show snowflake]
|
||||||
pure $ EvalOk output
|
pure $ EvalOk output
|
||||||
|
|
Loading…
Reference in a new issue