Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
esoadamo opened this issue Apr 6, 2022 · 2 comments
Closed

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

esoadamo opened this issue Apr 6, 2022 · 2 comments
Labels

Comments

@esoadamo
Copy link
Member

esoadamo commented Apr 6, 2022

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
Copy link
Contributor

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
Copy link
Member Author

esoadamo commented Mar 7, 2023

Fixed by fi-ksi/web-frontend-angular#76

@esoadamo esoadamo closed this as completed Mar 7, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: Todo
Development

No branches or pull requests

2 participants