fi-ksi / web-backend

Backend for KSI web written in Python.
MIT License
8 stars 3 forks source link

První spuštění programovací úlohy vede k error kódu #155

Closed esoadamo closed 1 year ago

esoadamo commented 2 years ago

Pokud poprvé spustím svůj kód na nějaké úloze, backend vrátí chybu spuštění. Další spuštění kódu úlohy už fungují jak mají. Je možné, že je tato chyba spojena s novým webem, jelikož na starém se mi ji nepodařilo zreprodukovat. Je ale možné, že mi došly dríve nespuštěné úlohy. Rychlým pohledem vypadá request ze starého a nového webu stejně.

Reprodukce: Spustit kód na úloze, na které jsem ještě nikdy kód nespouštěl Očekáváný výsledek: {result: "ok"} (objeví se po druhém a dalším spuštění úlohy) Aktuální výsledek:

{
    "message": "Kód se nepodařilo spustit, kontaktujte organizátora.",
    "report": "Saving raw code into /tmp/box/1/raw...\nMerging code to /tmp/box/1/box/run (cmd: /root/web-backend/data/modules/726/merge /tmp/box/1/raw /tmp/box/1/box/run /root/web-backend/data/module_lib 2144 exec)\n * stdout: /tmp/box/1/merge.stdout\n * stderr: /tmp/box/1/merge.stderr\nRunning sandbox: isolate -b 1 --dir=/etc=/tmp/box/1/etc --dir=/etc/alternatives=/opt/etc/alternatives --env=PATH --env=LANG=en_US.UTF-8 -Mmeta -m50000000 -w5.0 --fsize=50000 -q100,100 -c/box --run /box/run\n * stdout: /tmp/box/1/stdout\n * stderr: /tmp/box/1/stderr\nReturn code: 0\nTraceback (most recent call last):\n  File \"/root/web-backend/endpoint/runcode.py\", line 50, in on_post\n    execution.id, reporter)\n  File \"/root/web-backend/util/programming.py\", line 352, in run\n    'execution\\n' + str(exec_id) + '\\n')\n  File \"/root/web-backend/util/programming.py\", line 303, in store_exec\n    shutil.rmtree(dst_path)\n  File \"/root/web-backend/ksi-py3-venv/lib/python3.7/shutil.py\", line 491, in rmtree\n    _rmtree_safe_fd(fd, path, onerror)\n  File \"/root/web-backend/ksi-py3-venv/lib/python3.7/shutil.py\", line 449, in _rmtree_safe_fd\n    onerror(os.unlink, fullname, sys.exc_info())\n  File \"/root/web-backend/ksi-py3-venv/lib/python3.7/shutil.py\", line 447, in _rmtree_safe_fd\n    os.unlink(entry.name, dir_fd=topfd)\nFileNotFoundError: [Errno 2] No such file or directory: 'stderr'\n",
    "result": "error"
}
BorysekOndrej commented 2 years ago

Oliver na to taky narazil. To divné na tom bylo, že jemu i mě se chvíli nedařilo spustit tu úlohu na novém webu, ale na starém nám to fungovalo. A pak se to rozjelo i na novém. To je ale nejspíš jen způsobené tím, že jsme to prvně oba zkusili na starém.

Saving raw code into /tmp/box/156/raw...
Merging code to /tmp/box/156/box/run (cmd: /root/naskoc-web-backend/data/modules/21/merge /tmp/box/156/raw /tmp/box/156/box/run /root/naskoc-web-backend/data/module_lib 2 exec)
 * stdout: /tmp/box/156/merge.stdout
 * stderr: /tmp/box/156/merge.stderr
Running sandbox: isolate -b 156 --dir=/etc=/tmp/box/156/etc --dir=/etc/alternatives=/opt/etc/alternatives --env=PATH --env=LANG=en_US.UTF-8 -Mmeta -m50000000 -w5.0 --fsize=50000 -q100,100 -c/box --run /box/run
 * stdout: /tmp/box/156/stdout
 * stderr: /tmp/box/156/stderr
Return code: 0
Traceback (most recent call last):
  File "/root/naskoc-web-backend/endpoint/runcode.py", line 49, in on_post
    result = util.programming.run(module, user.id, data,
  File "/root/naskoc-web-backend/util/programming.py", line 362, in run
    store_exec(box_id, user_id, module.id,
  File "/root/naskoc-web-backend/util/programming.py", line 313, in store_exec
    shutil.rmtree(dst_path)
  File "/usr/lib/python3.9/shutil.py", line 718, in rmtree
    _rmtree_safe_fd(fd, path, onerror)
  File "/usr/lib/python3.9/shutil.py", line 675, in _rmtree_safe_fd
    onerror(os.unlink, fullname, sys.exc_info())
  File "/usr/lib/python3.9/shutil.py", line 673, in _rmtree_safe_fd
    os.unlink(entry.name, dir_fd=topfd)
FileNotFoundError: [Errno 2] No such file or directory: 'merge.stdout'

Trochu jsem se na to podíval a vypadá to, že by mohlo jít o známou (ale zatím v Pythonu neopravenou) race condition, kdy to může vyhodit tu exception. Ale jistý si nejsem.

esoadamo commented 1 year ago

Fixed by https://github.com/fi-ksi/web-frontend-angular/issues/76