From 1a6bf13b9665e7eb56666e22f33d3780c8b7f326 Mon Sep 17 00:00:00 2001 From: Egor Matveev Date: Mon, 9 May 2022 19:51:11 +0300 Subject: [PATCH] memory limit --- Main/migrations/0034_auto_20220509_1922.py | 22 +++++++++++++++++++ .../0035_remove_task_memory_limit.py | 17 ++++++++++++++ Main/migrations/0036_task_memory_limit.py | 18 +++++++++++++++ Main/models/solution.py | 1 - Main/models/task.py | 1 + SprintLib/testers/BaseTester.py | 6 +++-- templates/task_settings.html | 8 +++++++ 7 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 Main/migrations/0034_auto_20220509_1922.py create mode 100644 Main/migrations/0035_remove_task_memory_limit.py create mode 100644 Main/migrations/0036_task_memory_limit.py diff --git a/Main/migrations/0034_auto_20220509_1922.py b/Main/migrations/0034_auto_20220509_1922.py new file mode 100644 index 0000000..eed780a --- /dev/null +++ b/Main/migrations/0034_auto_20220509_1922.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.4 on 2022-05-09 16:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('Main', '0033_solution_docker_instances'), + ] + + operations = [ + migrations.RemoveField( + model_name='solution', + name='docker_instances', + ), + migrations.AddField( + model_name='task', + name='memory_limit', + field=models.IntegerField(default=1024), + ), + ] diff --git a/Main/migrations/0035_remove_task_memory_limit.py b/Main/migrations/0035_remove_task_memory_limit.py new file mode 100644 index 0000000..63aa0aa --- /dev/null +++ b/Main/migrations/0035_remove_task_memory_limit.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.4 on 2022-05-09 16:49 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('Main', '0034_auto_20220509_1922'), + ] + + operations = [ + migrations.RemoveField( + model_name='task', + name='memory_limit', + ), + ] diff --git a/Main/migrations/0036_task_memory_limit.py b/Main/migrations/0036_task_memory_limit.py new file mode 100644 index 0000000..4b97364 --- /dev/null +++ b/Main/migrations/0036_task_memory_limit.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.4 on 2022-05-09 16:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('Main', '0035_remove_task_memory_limit'), + ] + + operations = [ + migrations.AddField( + model_name='task', + name='memory_limit', + field=models.IntegerField(default=524288), + ), + ] diff --git a/Main/models/solution.py b/Main/models/solution.py index 2cfbb7e..69ddd4d 100644 --- a/Main/models/solution.py +++ b/Main/models/solution.py @@ -21,7 +21,6 @@ class Solution(models.Model): test = models.IntegerField(default=None, null=True, blank=True) set = models.ForeignKey(Set, null=True, blank=True, on_delete=models.SET_NULL) extras = models.JSONField(default=dict) - docker_instances = models.JSONField(null=True, blank=True, default=list) _solutionfiles = None diff --git a/Main/models/task.py b/Main/models/task.py index bc72ea7..204200b 100644 --- a/Main/models/task.py +++ b/Main/models/task.py @@ -16,6 +16,7 @@ class Task(models.Model): output_format = models.TextField(default="") specifications = models.TextField(default="") time_limit = models.IntegerField(default=10000) + memory_limit = models.IntegerField(default=524288) time_estimation = models.IntegerField(default=5) creator = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True) editors = ArrayField(models.TextField(), default=list) diff --git a/SprintLib/testers/BaseTester.py b/SprintLib/testers/BaseTester.py index 8b5fe87..320c9c3 100644 --- a/SprintLib/testers/BaseTester.py +++ b/SprintLib/testers/BaseTester.py @@ -37,7 +37,9 @@ class BaseTester: f"< {filename} {self.command} > output.txt", timeout=self.solution.task.time_limit / 1000, ) - if code != 0: + if code == 1: + raise TestException("ML") + elif code != 0: raise TestException("RE") result = ( open(join(self.path, "output.txt"), "r") @@ -157,7 +159,7 @@ class BaseTester: fs.write(bts) print("Files copied") self._setup_networking() - docker_command = f"docker run --network solution_network_{self.solution.id} --name solution_{self.solution.id} --volume={self.path}:/{self.working_directory} -t -d {self.solution.language.image}" + docker_command = f"docker run --network solution_network_{self.solution.id} --name solution_{self.solution.id} --memory=\"{self.solution.task.memory_limit}k\" --volume={self.path}:/{self.working_directory} -t -d {self.solution.language.image}" print(docker_command) call(docker_command, shell=True) checker = self.solution.task.checkerfile diff --git a/templates/task_settings.html b/templates/task_settings.html index 2b9cef1..10ce5e8 100644 --- a/templates/task_settings.html +++ b/templates/task_settings.html @@ -79,6 +79,14 @@ + + + Ограничение по памяти (KB) + + + + + Оценка времени решения (мин)