diff --git a/arkindex/documents/fixtures/data.json b/arkindex/documents/fixtures/data.json index 3b1b3abcdba0e240785cf9a5a8329182f87c3c2f..48662e5a99292b19d3284508726ecfe8de180efb 100644 --- a/arkindex/documents/fixtures/data.json +++ b/arkindex/documents/fixtures/data.json @@ -355,8 +355,7 @@ "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "has_results": false, - "use_gpu": false, - "ttl": 3600 + "use_gpu": false } }, { @@ -393,8 +392,7 @@ "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "has_results": false, - "use_gpu": false, - "ttl": 3600 + "use_gpu": false } }, { @@ -410,8 +408,7 @@ "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "has_results": false, - "use_gpu": false, - "ttl": 3600 + "use_gpu": false } }, { @@ -427,8 +424,7 @@ "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "has_results": false, - "use_gpu": false, - "ttl": 0 + "use_gpu": false } }, { @@ -444,8 +440,7 @@ "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z", "has_results": false, - "use_gpu": false, - "ttl": 0 + "use_gpu": false } }, { diff --git a/arkindex/documents/management/commands/build_fixtures.py b/arkindex/documents/management/commands/build_fixtures.py index 87a12ff637d1ba11203d01ebe7a9a1e379e2afde..c691f669f8db03c6f73e653d650c8d1a6f881b00 100644 --- a/arkindex/documents/management/commands/build_fixtures.py +++ b/arkindex/documents/management/commands/build_fixtures.py @@ -206,14 +206,8 @@ class Command(BaseCommand): mode=ProcessMode.Local, creator=superuser, ) - user_local_process.worker_runs.create( - version=custom_version, - ttl=0, - ) - superuser_local_process.worker_runs.create( - version=custom_version, - ttl=0, - ) + user_local_process.worker_runs.create(version=custom_version) + superuser_local_process.worker_runs.create(version=custom_version) # Create a corpus corpus = Corpus.objects.create( @@ -234,16 +228,13 @@ class Command(BaseCommand): ) init_worker_run = process.worker_runs.create( version=init_worker, - ttl=3600, ) dla_worker_run = process.worker_runs.create( version=dla_worker, - ttl=3600, parents=[init_worker_run.id], ) reco_run = process.worker_runs.create( version=recognizer_worker, - ttl=3600, parents=[dla_worker_run.id], ) diff --git a/arkindex/documents/management/commands/load_export.py b/arkindex/documents/management/commands/load_export.py index 9b2fad0ee55dea000fbd0a93ec471f18b63e0648..9096a4303a16684bfdf7a97f75d97e2dacf7ae25 100644 --- a/arkindex/documents/management/commands/load_export.py +++ b/arkindex/documents/management/commands/load_export.py @@ -444,7 +444,6 @@ class Command(BaseCommand): version_id=worker_version_id, model_version=model_version, configuration=configuration, - defaults={"ttl": 0}, ) def create_image_server(self, row): diff --git a/arkindex/documents/tests/commands/test_cleanup.py b/arkindex/documents/tests/commands/test_cleanup.py index 16fe3290c65e199dafe8a8ca5adf51c3ce68d78c..51489faf4803fbad0294a5a6344df6b20f32cbfb 100644 --- a/arkindex/documents/tests/commands/test_cleanup.py +++ b/arkindex/documents/tests/commands/test_cleanup.py @@ -1163,14 +1163,13 @@ class TestCleanupCommand(FixtureTestCase): # from the WorkerRuns, so there would be 2 runs with the same version and no configuration when they should be unique process = self.corpus.processes.create(mode=ProcessMode.Workers, creator=self.superuser) version = removable_worker.versions.first() - process.worker_runs.create(version=version, ttl=0) + process.worker_runs.create(version=version) process.worker_runs.create( version=version, configuration=removable_worker.configurations.create( name="Some configuration", configuration={}, ), - ttl=0, ) # This worker cannot be cleaned up because it is used in ML results @@ -1249,7 +1248,6 @@ class TestCleanupCommand(FixtureTestCase): worker_run = process.worker_runs.create( version=worker_version, model_version=used_model.versions.create(), - ttl=0, ) self.corpus.elements.create( type=self.corpus.types.first(), diff --git a/arkindex/documents/tests/commands/test_load_export.py b/arkindex/documents/tests/commands/test_load_export.py index 0787a57f666980bdb4eab0240c459c20b6bfbe2e..383c1bc7ef1eeb733a17a7f60febfefcde60d417 100644 --- a/arkindex/documents/tests/commands/test_load_export.py +++ b/arkindex/documents/tests/commands/test_load_export.py @@ -39,7 +39,7 @@ class TestLoadExport(FixtureTestCase): "process.workerversion": ["created", "updated", "configuration", "state", "docker_image_iid"], # The WorkerRuns lose their parents, use different worker versions that just got recreated, # are assigned to the user's local process and not the original one - "process.workerrun": ["parents", "version", "process", "summary", "created", "updated", "ttl"], + "process.workerrun": ["parents", "version", "process", "summary", "created", "updated"], "process.workertype": [], "images.imageserver": ["s3_bucket", "s3_region", "created", "updated", "read_only"], "images.image": ["created", "updated", "hash", "status"], diff --git a/arkindex/documents/tests/tasks/test_corpus_delete.py b/arkindex/documents/tests/tasks/test_corpus_delete.py index 071af6a3af68028db0bb3439c66697813571217c..cd5ad64153f21586311a3964b62a396365d19088 100644 --- a/arkindex/documents/tests/tasks/test_corpus_delete.py +++ b/arkindex/documents/tests/tasks/test_corpus_delete.py @@ -45,7 +45,7 @@ class TestDeleteCorpus(FixtureTestCase): ml_class=cls.corpus.ml_classes.create(name="a class"), ) element_process.elements.add(element) - worker_run = element_process.worker_runs.create(version=cls.worker_version, ttl=0) + worker_run = element_process.worker_runs.create(version=cls.worker_version) task_1, task_2, task_3, task_4 = Task.objects.bulk_create( [ Task( diff --git a/arkindex/documents/tests/tasks/test_export.py b/arkindex/documents/tests/tasks/test_export.py index 8b21ea830c002881fa53b6e8b9935f57c407e231..9831b8eed4f1f7e73a91d17e3bbb45d855255a97 100644 --- a/arkindex/documents/tests/tasks/test_export.py +++ b/arkindex/documents/tests/tasks/test_export.py @@ -82,7 +82,6 @@ class TestExport(FixtureTestCase): model=Model.objects.create(name="Some model"), ), configuration=metadata_version.worker.configurations.create(name="Some configuration"), - ttl=0, ) element.metadatas.create( diff --git a/arkindex/documents/tests/tasks/test_worker_results_delete.py b/arkindex/documents/tests/tasks/test_worker_results_delete.py index 0d3c429ecf8dc114f68025a13a54f5bdaaf42911..cca0e0dcb0959a574ce1fa2aa5075c581ab736bf 100644 --- a/arkindex/documents/tests/tasks/test_worker_results_delete.py +++ b/arkindex/documents/tests/tasks/test_worker_results_delete.py @@ -40,7 +40,6 @@ class TestDeleteWorkerResults(FixtureTestCase): version=cls.version_1, model_version=cls.model_version, configuration=cls.configuration, - ttl=0, ) cls.vol = cls.corpus.elements.get(name="Volume 1") diff --git a/arkindex/documents/tests/test_bulk_classification.py b/arkindex/documents/tests/test_bulk_classification.py index ddcc0d5c71d11584af9fb9c6d98a09f13c9d3399..492209723d686ed5d9ed6ac9c30d6f023538688e 100644 --- a/arkindex/documents/tests/test_bulk_classification.py +++ b/arkindex/documents/tests/test_bulk_classification.py @@ -287,7 +287,7 @@ class TestBulkClassification(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_run.version, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_run.version) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run.process.run() task = self.worker_run.process.tasks.first() diff --git a/arkindex/documents/tests/test_bulk_element_transcriptions.py b/arkindex/documents/tests/test_bulk_element_transcriptions.py index f4578bdce00ec3c58f24c48039f54ba05d86bc95..042eb16df25b730cfbc93156977919dba2e66f48 100644 --- a/arkindex/documents/tests/test_bulk_element_transcriptions.py +++ b/arkindex/documents/tests/test_bulk_element_transcriptions.py @@ -748,7 +748,7 @@ class TestBulkElementTranscriptions(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_run.version, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_run.version) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run.process.run() task = self.worker_run.process.tasks.first() diff --git a/arkindex/documents/tests/test_bulk_elements.py b/arkindex/documents/tests/test_bulk_elements.py index 05d3516d2df3acc5b3950d81de00214711764881..23964877c0093329ab0066e80c772e12971aac62 100644 --- a/arkindex/documents/tests/test_bulk_elements.py +++ b/arkindex/documents/tests/test_bulk_elements.py @@ -427,7 +427,7 @@ class TestBulkElements(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_run.version, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_run.version) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run.process.run() task = self.worker_run.process.tasks.first() diff --git a/arkindex/documents/tests/test_bulk_transcription_entities.py b/arkindex/documents/tests/test_bulk_transcription_entities.py index 8c60037671d12e50cfb6b3d08610ff1243f3d991..e0f159919c4e4043a6a686e7204e207efebd4fb3 100644 --- a/arkindex/documents/tests/test_bulk_transcription_entities.py +++ b/arkindex/documents/tests/test_bulk_transcription_entities.py @@ -233,7 +233,7 @@ class TestBulkTranscriptionEntities(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_run.version, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_run.version) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run.process.run() diff --git a/arkindex/documents/tests/test_bulk_transcriptions.py b/arkindex/documents/tests/test_bulk_transcriptions.py index 8fbbcdac41d84b2cb57f2221c5b4ea25dea9d38a..57ffaffdf329aaa5262f956d673f70d462bb17e2 100644 --- a/arkindex/documents/tests/test_bulk_transcriptions.py +++ b/arkindex/documents/tests/test_bulk_transcriptions.py @@ -263,7 +263,7 @@ class TestBulkTranscriptions(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_run.version, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_run.version) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run.process.run() task = self.worker_run.process.tasks.first() diff --git a/arkindex/documents/tests/test_classification.py b/arkindex/documents/tests/test_classification.py index 84ccefcfec56ecd8d506049f77db6e3fc7e4b314..935d36958c3e349d5fd49416608dc9523ded39f8 100644 --- a/arkindex/documents/tests/test_classification.py +++ b/arkindex/documents/tests/test_classification.py @@ -368,7 +368,7 @@ class TestClassifications(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_run.version, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_run.version) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run.process.run() task = self.worker_run.process.tasks.first() diff --git a/arkindex/documents/tests/test_create_elements.py b/arkindex/documents/tests/test_create_elements.py index 0cd08a757f2d0f78935cc70555d891cf35e1c54c..5c3a14342bb2fe58bd9ba0d8291ae7d756070bb5 100644 --- a/arkindex/documents/tests/test_create_elements.py +++ b/arkindex/documents/tests/test_create_elements.py @@ -720,7 +720,7 @@ class TestCreateElements(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_run.version, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_run.version) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run.process.run() task = self.worker_run.process.tasks.first() diff --git a/arkindex/documents/tests/test_create_transcriptions.py b/arkindex/documents/tests/test_create_transcriptions.py index 18c03d0f16a08fd4c353a90d4b514d74ef2ad34e..819e1d18b85bb55d340a3b1ee38906117cb9f0be 100644 --- a/arkindex/documents/tests/test_create_transcriptions.py +++ b/arkindex/documents/tests/test_create_transcriptions.py @@ -337,7 +337,7 @@ class TestTranscriptionCreate(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_run.version, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_run.version) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run.process.run() task = self.worker_run.process.tasks.first() diff --git a/arkindex/documents/tests/test_entities_api.py b/arkindex/documents/tests/test_entities_api.py index 32b4dffa231488169b0f3f34ac80ad5c08e3524a..90675af67f1e8e4bc7b76924eb4883294f9576df 100644 --- a/arkindex/documents/tests/test_entities_api.py +++ b/arkindex/documents/tests/test_entities_api.py @@ -388,7 +388,7 @@ class TestEntitiesAPI(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_version_1, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_version_1) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run_1.process.run() task = self.worker_run_1.process.tasks.first() @@ -863,7 +863,7 @@ class TestEntitiesAPI(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_version_1, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_version_1) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run_1.process.run() task = self.worker_run_1.process.tasks.first() diff --git a/arkindex/documents/tests/test_metadata.py b/arkindex/documents/tests/test_metadata.py index 55b026370d0252154f8f913acaf995cc3dcf3f50..ae0fc7a3c80023828b3d1a3afc242961fe54f61a 100644 --- a/arkindex/documents/tests/test_metadata.py +++ b/arkindex/documents/tests/test_metadata.py @@ -44,7 +44,7 @@ class TestMetaData(FixtureAPITestCase): creator=cls.user, farm=Farm.objects.first(), ) - cls.process.worker_runs.create(version=cls.worker_version, ttl=0) + cls.process.worker_runs.create(version=cls.worker_version) with patch("arkindex.process.tasks.initialize_activity.delay"): cls.process.run() cls.task = cls.process.tasks.first() @@ -463,7 +463,7 @@ class TestMetaData(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_run.version, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_run.version) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run.process.run() task = self.worker_run.process.tasks.first() @@ -1458,7 +1458,7 @@ class TestMetaData(FixtureAPITestCase): mode=ProcessMode.Workers, corpus=self.corpus, ) - other_worker_run = process2.worker_runs.create(version=self.worker_run.version, ttl=0) + other_worker_run = process2.worker_runs.create(version=self.worker_run.version) with patch("arkindex.process.tasks.initialize_activity.delay"): self.worker_run.process.run() task = self.worker_run.process.tasks.first() diff --git a/arkindex/ponos/tests/rq/test_trigger.py b/arkindex/ponos/tests/rq/test_trigger.py index 406dd77a8987f02ae48552a5d71bd11afbf4360e..e65f9093e8b4d60e7e1042300825f932941b44f2 100644 --- a/arkindex/ponos/tests/rq/test_trigger.py +++ b/arkindex/ponos/tests/rq/test_trigger.py @@ -21,8 +21,8 @@ class TestTrigger(FixtureTestCase): ) cls.worker_version1 = WorkerVersion.objects.get(worker__slug="reco") cls.worker_version2 = WorkerVersion.objects.get(worker__slug="dla") - cls.run1 = cls.process.worker_runs.create(version=cls.worker_version1, ttl=0) - cls.run2 = cls.process.worker_runs.create(version=cls.worker_version2, parents=[cls.run1.id], ttl=0) + cls.run1 = cls.process.worker_runs.create(version=cls.worker_version1) + cls.run2 = cls.process.worker_runs.create(version=cls.worker_version2, parents=[cls.run1.id]) @override_settings(PONOS_RQ_EXECUTION=True) @patch("arkindex.ponos.tasks.run_task_rq.delay") diff --git a/arkindex/ponos/tests/tasks/test_update.py b/arkindex/ponos/tests/tasks/test_update.py index 762a7fd31cac76e51dfad964cc3aee684902708c..619c8bbfec9fd238fc22da4772c77d6e90b7d3cc 100644 --- a/arkindex/ponos/tests/tasks/test_update.py +++ b/arkindex/ponos/tests/tasks/test_update.py @@ -131,8 +131,8 @@ class TestTaskUpdate(FixtureAPITestCase): corpus=self.corpus, activity_state=ActivityState.Ready ) - init_run = test_process.worker_runs.create(version=WorkerVersion.objects.get(worker__slug="initialisation"), ttl=0) - test_run = test_process.worker_runs.create(version=self.recognizer, parents=[init_run.id], ttl=0) + init_run = test_process.worker_runs.create(version=WorkerVersion.objects.get(worker__slug="initialisation")) + test_run = test_process.worker_runs.create(version=self.recognizer, parents=[init_run.id]) test_process.run() @@ -227,8 +227,8 @@ class TestTaskUpdate(FixtureAPITestCase): activity_state=ActivityState.Ready ) init_version = WorkerVersion.objects.get(worker__slug="initialisation") - init_run = test_process.worker_runs.create(version=init_version, ttl=0) - test_run = test_process.worker_runs.create(version=self.recognizer, parents=[init_run.id], ttl=0) + init_run = test_process.worker_runs.create(version=init_version) + test_run = test_process.worker_runs.create(version=self.recognizer, parents=[init_run.id]) test_process.run() @@ -300,7 +300,7 @@ class TestTaskUpdate(FixtureAPITestCase): chunks=2, activity_state=ActivityState.Ready ) - test_run = test_process.worker_runs.create(version=self.recognizer, ttl=0) + test_run = test_process.worker_runs.create(version=self.recognizer) test_process.run() @@ -402,18 +402,15 @@ class TestTaskUpdate(FixtureAPITestCase): ) test_run_1 = test_process.worker_runs.create( version=self.recognizer, - ttl=0, ) test_run = test_process.worker_runs.create( version=self.recognizer, model_version_id=test_model_version.id, - ttl=0, ) test_run_2 = test_process.worker_runs.create( version=self.recognizer, model_version_id=test_model_version.id, configuration_id=test_configuration.id, - ttl=0, ) test_process.run() diff --git a/arkindex/process/builder.py b/arkindex/process/builder.py index 5a1c347a32e95b8bc3fc0234e71338388c860c27..6db8b7afc98a63efc858203f0611604ab3d51d97 100644 --- a/arkindex/process/builder.py +++ b/arkindex/process/builder.py @@ -102,7 +102,7 @@ class ProcessBuilder: shm_size=shm_size, extra_files=extra_files, worker_run=worker_run, - ttl=worker_run.ttl, + ttl=self.process.corpus.applied_maximum_task_ttl, ) ) @@ -218,10 +218,7 @@ class ProcessBuilder: from arkindex.process.models import ArkindexFeature, WorkerVersion import_version = WorkerVersion.objects.get_by_feature(ArkindexFeature.FileImport) - worker_run, _ = self.process.worker_runs.get_or_create( - version=import_version, - defaults={"ttl": self.process.corpus.applied_maximum_task_ttl}, - ) + worker_run, _ = self.process.worker_runs.get_or_create(version=import_version) self._build_task( slug="import_files", @@ -250,7 +247,6 @@ class ProcessBuilder: version=ingest_version, model_version=None, configuration=worker_configuration, - defaults={"ttl": self.process.corpus.applied_maximum_task_ttl}, ) env = { @@ -294,10 +290,7 @@ class ProcessBuilder: worker_runs.remove(initialisation_worker_run) # If there is no elements initialisation worker run in the process, create one else: - initialisation_worker_run = self.process.worker_runs.create( - version=init_elements_version, - ttl=self.process.corpus.applied_maximum_task_ttl, - ) + initialisation_worker_run = self.process.worker_runs.create(version=init_elements_version) # Link all parentless worker runs to the initialisation worker run no_parents = [run for run in worker_runs if not len(run.parents)] for run in no_parents: diff --git a/arkindex/process/management/commands/fake_worker_run.py b/arkindex/process/management/commands/fake_worker_run.py index e1e9e1d72fc2ef648f2e4d4c3967507e6401b8d6..7533141bf5c4f67b4875de194986f1cbda085dcb 100644 --- a/arkindex/process/management/commands/fake_worker_run.py +++ b/arkindex/process/management/commands/fake_worker_run.py @@ -33,10 +33,7 @@ class Command(BaseCommand): else: self.stdout.write(f"Using existing local process {process.id}") - worker_run, created = process.worker_runs.get_or_create( - version=worker_version, - defaults={"ttl": 0}, - ) + worker_run, created = process.worker_runs.get_or_create(version=worker_version) if created: self.stdout.write(self.style.SUCCESS(f"Created WorkerRun {worker_run.id}")) diff --git a/arkindex/process/migrations/0049_remove_workerrun_ttl.py b/arkindex/process/migrations/0049_remove_workerrun_ttl.py new file mode 100644 index 0000000000000000000000000000000000000000..fad0275417963d229bec4151d6d5c7ac95ebf00c --- /dev/null +++ b/arkindex/process/migrations/0049_remove_workerrun_ttl.py @@ -0,0 +1,17 @@ +# Generated by Django 5.0.8 on 2025-02-13 14:07 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("process", "0048_worker_cost_fields"), + ] + + operations = [ + migrations.RemoveField( + model_name="workerrun", + name="ttl", + ), + ] diff --git a/arkindex/process/models.py b/arkindex/process/models.py index 3d5f00821cddb6d5eb9a65ab0173c4b0870499a6..920823bb691604338faf99f26ea0af8734f2fdd3 100644 --- a/arkindex/process/models.py +++ b/arkindex/process/models.py @@ -342,18 +342,6 @@ class Process(IndexableModel): if run.version.is_init_elements(): continue - if new_process.mode == ProcessMode.Template or new_process.corpus.applied_maximum_task_ttl == 0: - # When the destination process is a template, we do not apply any limits and copy the original TTL. - # The limits will be applied only when applying a template. - # With other modes, when the corpus has no limits, we also just use the original TTL. - ttl = run.ttl - elif run.ttl == 0: - # The original TTL was infinite and there is a limit, so we use the corpus' limit - ttl = new_process.corpus.applied_maximum_task_ttl - else: - # Apply the limit normally when no infinity is involved - ttl = min(run.ttl, new_process.corpus.applied_maximum_task_ttl) - # Create a new WorkerRun with same version, configuration and parents. new_run = WorkerRun( process=new_process, @@ -369,7 +357,6 @@ class Process(IndexableModel): else run.version.gpu_usage == FeatureUsage.Required ), summary=run.summary, - ttl=ttl, ) # Save the correspondence between this process' worker_run and the new one new_runs[run.id] = new_run @@ -938,10 +925,6 @@ class WorkerRun(models.Model): updated = models.DateTimeField(auto_now=True) has_results = models.BooleanField(default=False) use_gpu = models.BooleanField(default=False) - ttl = models.PositiveIntegerField( - verbose_name="TTL", - help_text="Maximum time-to-live for tasks created from this WorkerRun, in seconds. 0 means infinite.", - ) objects = WorkerRunManager() @@ -1057,7 +1040,7 @@ class WorkerRun(models.Model): worker_run=self, extra_files=extra_files, requires_gpu=requires_gpu, - ttl=self.ttl, + ttl=process.corpus.applied_maximum_task_ttl, ) return task, parents diff --git a/arkindex/process/serializers/imports.py b/arkindex/process/serializers/imports.py index 71bdbf729fdeb74b28596134658d7a946fcdce3c..9a345d520c403ca3be27bf5a43a04c8f591242cb 100644 --- a/arkindex/process/serializers/imports.py +++ b/arkindex/process/serializers/imports.py @@ -612,7 +612,6 @@ class ExportProcessSerializer(ProcessDetailsSerializer): export_process.worker_runs.create( version=worker_version, configuration=worker_configuration, - ttl=corpus.applied_maximum_task_ttl, ) # Start the export process export_process.run() diff --git a/arkindex/process/serializers/worker_runs.py b/arkindex/process/serializers/worker_runs.py index eb6ab16138af0062854135348292a6422ea330b9..9f6146db0405ff4537e4e34da6f0ee2bb9a8fac0 100644 --- a/arkindex/process/serializers/worker_runs.py +++ b/arkindex/process/serializers/worker_runs.py @@ -1,7 +1,6 @@ from collections import defaultdict from textwrap import dedent -from django.core.validators import MaxValueValidator, MinValueValidator from rest_framework import serializers from rest_framework.exceptions import ValidationError @@ -20,25 +19,6 @@ from arkindex.process.serializers.workers import WorkerConfigurationSerializer, from arkindex.training.models import ModelVersion, ModelVersionState from arkindex.training.serializers import ModelVersionLightSerializer -# To prevent each element worker to retrieve contextual information -# (process, worker version, model version…) with extra GET requests, we -# do serialize all the related information on WorkerRun serializers. - -def _ttl_from_corpus(serializer_field) -> int: - if isinstance(serializer_field.parent.instance, WorkerRun): - process = serializer_field.parent.instance.process - else: - process = serializer_field.context["process"] - - # This function may be called on a local process, which does not have a corpus, even if the API blocks them later on - if process.mode == ProcessMode.Local: - return 0 - - return process.corpus.applied_maximum_task_ttl - - -_ttl_from_corpus.requires_context = True - class WorkerRunSerializer(serializers.ModelSerializer): @@ -96,15 +76,6 @@ class WorkerRunSerializer(serializers.ModelSerializer): "Only a configuration of the WorkerVersion's worker may be set.", ) - ttl = serializers.IntegerField( - default=_ttl_from_corpus, - help_text=dedent(""" - Maximum time-to-live for tasks created from this WorkerRun, in seconds. `0` means infinite. - - Defaults to, and cannot exceed, the `maximum_task_ttl` on the corpus of the process. - """), - ) - process = ProcessLightSerializer(read_only=True) class Meta: @@ -121,7 +92,6 @@ class WorkerRunSerializer(serializers.ModelSerializer): "model_version", "summary", "use_gpu", - "ttl", ) read_only_fields = ( "id", @@ -145,24 +115,6 @@ class WorkerRunSerializer(serializers.ModelSerializer): return self.instance.process return self.context["process"] - def validate_ttl(self, value) -> int: - if self._process.mode == ProcessMode.Local: - # Don't validate anything, the endpoint will not work on local processes anyway - return value - - corpus_ttl = self._process.corpus.applied_maximum_task_ttl - if corpus_ttl == 0: - # Allow infinity, and limit to the maximum value of an integer field - min_ttl, max_ttl = 0, 2147483647 - else: - # Restrict the maximum TTL further using the limit - min_ttl, max_ttl = 1, corpus_ttl - - MinValueValidator(min_ttl)(value) - MaxValueValidator(max_ttl)(value) - - return value - def validate(self, data): data = super().validate(data) errors = defaultdict(list) @@ -296,8 +248,6 @@ class UserWorkerRunSerializer(serializers.ModelSerializer): queryset=WorkerConfiguration.objects.all(), style={"base_template": "input.html"}, ) - # Default value for the TTL, as the local process does not have a corpus and the run will never actually run - ttl = serializers.HiddenField(default=0) def validate_worker_version_id(self, worker_version_id): # Check that the worker version exists @@ -369,7 +319,6 @@ class UserWorkerRunSerializer(serializers.ModelSerializer): "worker_version_id", "model_version_id", "configuration_id", - "ttl", ) diff --git a/arkindex/process/tests/commands/test_fake_worker_run.py b/arkindex/process/tests/commands/test_fake_worker_run.py index 97055247eafd7d759f77c860d379d89ed153e55e..68020a16c97ce9b24f4972cfc5a5d97520a9a0a8 100644 --- a/arkindex/process/tests/commands/test_fake_worker_run.py +++ b/arkindex/process/tests/commands/test_fake_worker_run.py @@ -64,7 +64,7 @@ class TestFakeWorkerRun(FixtureTestCase): def test_existing_worker_run(self): process = Process.objects.get(mode=ProcessMode.Local, creator=self.user) - worker_run = process.worker_runs.create(version=self.worker_version, ttl=0) + worker_run = process.worker_runs.create(version=self.worker_version) self.assertEqual(process.worker_runs.count(), 2) output = self.fake_worker_run(["--user", str(self.user.id), "--worker-version", str(self.worker_version.id)]) diff --git a/arkindex/process/tests/process/test_clear.py b/arkindex/process/tests/process/test_clear.py index 0593a54ce403a38d4fda7f0e1e42e70d112e9907..83ad163bc0ab0752b9c2591a4364038c29189442 100644 --- a/arkindex/process/tests/process/test_clear.py +++ b/arkindex/process/tests/process/test_clear.py @@ -22,11 +22,9 @@ class TestProcessClear(FixtureAPITestCase): ) cls.process.worker_runs.create( version=WorkerVersion.objects.get(worker__slug="reco"), - ttl=0, ) cls.process.worker_runs.create( version=WorkerVersion.objects.get(worker__slug="dla"), - ttl=0, ) def test_clear(self): diff --git a/arkindex/process/tests/process/test_create.py b/arkindex/process/tests/process/test_create.py index 3f1d6aaec3e07f6f23e8d5c263d69f6340a96984..b11f6da8489bf78287875e26e89ee2eae3b5f9f3 100644 --- a/arkindex/process/tests/process/test_create.py +++ b/arkindex/process/tests/process/test_create.py @@ -488,17 +488,14 @@ class TestCreateProcess(FixtureAPITestCase): ) init_run = process_2.worker_runs.create( version=self.init_elements_version, - ttl=0, ) run_1 = process_2.worker_runs.create( version=self.version_1, parents=[init_run.id], - ttl=0, ) run_2 = process_2.worker_runs.create( version=self.version_2, parents=[run_1.id], - ttl=0, ) self.assertFalse(process_2.tasks.exists()) @@ -589,7 +586,7 @@ class TestCreateProcess(FixtureAPITestCase): dataset = self.corpus.datasets.first() test_set = dataset.sets.get(name="test") ProcessDatasetSet.objects.create(process=process, set=test_set) - process.worker_runs.create(version=self.version_1, ttl=0) + process.worker_runs.create(version=self.version_1) with self.assertNumQueries(9): response = self.client.post(reverse("api:process-start", kwargs={"pk": str(process.id)})) @@ -605,7 +602,7 @@ class TestCreateProcess(FixtureAPITestCase): self.worker_1.save() process = self.corpus.processes.create(creator=self.user, mode=ProcessMode.Workers) - process.worker_runs.create(version=self.version_1, ttl=0) + process.worker_runs.create(version=self.version_1) with self.assertNumQueries(9): response = self.client.post(reverse("api:process-start", kwargs={"pk": str(process.id)})) diff --git a/arkindex/process/tests/process/test_default_process_name.py b/arkindex/process/tests/process/test_default_process_name.py index e496e7ff00af52728120e7d4e9876b8081ce70ca..00223e3e596084c99fc80c5aef295c316aa60b00 100644 --- a/arkindex/process/tests/process/test_default_process_name.py +++ b/arkindex/process/tests/process/test_default_process_name.py @@ -50,22 +50,18 @@ class TestProcessName(FixtureAPITestCase): init_elements_version = WorkerVersion.objects.get_by_feature(ArkindexFeature.InitElements) init_run = self.workers_process.worker_runs.create( version=init_elements_version, - ttl=0, ) self.workers_process.worker_runs.create( version=self.recognizer, parents=[init_run.id], - ttl=0, ) dla_run = self.workers_process.worker_runs.create( version=self.dla, parents=[init_run.id], - ttl=0, ) self.workers_process.worker_runs.create( version=self.version_gpu, parents=[dla_run.id], - ttl=0, ) self.workers_process.save() @@ -95,41 +91,34 @@ class TestProcessName(FixtureAPITestCase): init_elements_version = WorkerVersion.objects.get_by_feature(ArkindexFeature.InitElements) init_run = self.workers_process.worker_runs.create( version=init_elements_version, - ttl=0, ) reco_run_1 = self.workers_process.worker_runs.create( version=self.recognizer, parents=[init_run.id], - ttl=0, ) reco_run_2 = self.workers_process.worker_runs.create( version=self.recognizer, configuration=self.reco_config_1, parents=[reco_run_1.id], - ttl=0, ) self.workers_process.worker_runs.create( version=self.recognizer, configuration=self.reco_config_2, parents=[reco_run_2.id], - ttl=0, ) dla_run_1 = self.workers_process.worker_runs.create( version=self.dla, parents=[init_run.id], - ttl=0, ) reco_run_4 = self.workers_process.worker_runs.create( version=self.recognizer, configuration=self.reco_config_3, parents=[dla_run_1.id], - ttl=0, ) self.workers_process.worker_runs.create( version=self.dla, configuration=self.dla_config, parents=[reco_run_4.id], - ttl=0, ) self.workers_process.save() @@ -150,26 +139,23 @@ class TestProcessName(FixtureAPITestCase): If the default process worker name is too long (len() > 250) it gets truncated """ init_elements_version = WorkerVersion.objects.get_by_feature(ArkindexFeature.InitElements) - init_run = self.workers_process.worker_runs.create(version=init_elements_version, ttl=0) + init_run = self.workers_process.worker_runs.create(version=init_elements_version) # Update the recognizer worker's name so that it is long self.recognizer.worker.name = "animula vagula blandula hospes comesque corporis quae nunc abibis in loca pallidula rigida nudula ne" self.recognizer.worker.save() reco_run_1 = self.workers_process.worker_runs.create( version=self.recognizer, parents=[init_run.id], - ttl=0, ) reco_run_2 = self.workers_process.worker_runs.create( version=self.recognizer, configuration=self.reco_config_1, parents=[reco_run_1.id], - ttl=0, ) self.workers_process.worker_runs.create( version=self.recognizer, configuration=self.reco_config_2, parents=[reco_run_2.id], - ttl=0, ) self.workers_process.save() @@ -191,8 +177,8 @@ class TestProcessName(FixtureAPITestCase): self.workers_process.name = "My process" self.workers_process.save() init_elements_version = WorkerVersion.objects.get_by_feature(ArkindexFeature.InitElements) - init_run = self.workers_process.worker_runs.create(version=init_elements_version, ttl=0) - self.workers_process.worker_runs.create(version=self.recognizer, parents=[init_run.id], ttl=0) + init_run = self.workers_process.worker_runs.create(version=init_elements_version) + self.workers_process.worker_runs.create(version=self.recognizer, parents=[init_run.id]) self.assertEqual(self.workers_process.name, "My process") builder = ProcessBuilder(process=self.workers_process) diff --git a/arkindex/process/tests/process/test_destroy.py b/arkindex/process/tests/process/test_destroy.py index ffa37334ae10eafb3cc4e5c2229990564a78c87f..4bfe2959296185ddf5e47a2a39138523551ea2fb 100644 --- a/arkindex/process/tests/process/test_destroy.py +++ b/arkindex/process/tests/process/test_destroy.py @@ -111,7 +111,7 @@ class TestProcessDestroy(FixtureAPITestCase): A process with worker runs linked to data cannot be deleted """ self.client.force_login(self.user) - run = self.process.worker_runs.create(version=WorkerVersion.objects.first(), ttl=0) + run = self.process.worker_runs.create(version=WorkerVersion.objects.first()) page = self.corpus.elements.get(name="Volume 1, page 1r") metadata = page.metadatas.get() diff --git a/arkindex/process/tests/process/test_process_artifact_download.py b/arkindex/process/tests/process/test_process_artifact_download.py index 004e375f67c2128ae705e54e769c31ac1c7bedf6..394000cdb1449ef247a1270149824d02524cfeee 100644 --- a/arkindex/process/tests/process/test_process_artifact_download.py +++ b/arkindex/process/tests/process/test_process_artifact_download.py @@ -21,7 +21,7 @@ class TestProcessArtifactDownload(FixtureAPITestCase): super().setUpTestData() cls.pdf_export_version = WorkerVersion.objects.get_by_feature(ArkindexFeature.ExportPDF) cls.process = Process.objects.create(mode=ProcessMode.Export, creator=cls.user, corpus=cls.corpus) - cls.worker_run = cls.process.worker_runs.create(version=cls.pdf_export_version, ttl=0) + cls.worker_run = cls.process.worker_runs.create(version=cls.pdf_export_version) with patch("arkindex.process.tasks.initialize_activity.delay"): cls.process.run() cls.task = cls.process.tasks.get() diff --git a/arkindex/process/tests/process/test_retry.py b/arkindex/process/tests/process/test_retry.py index 9407e2e4c5b3dc82c5a697c9799d7742a0eb01c8..547868fcba410dd103368ab5df70f58f9ad9cd68 100644 --- a/arkindex/process/tests/process/test_retry.py +++ b/arkindex/process/tests/process/test_retry.py @@ -156,7 +156,6 @@ class TestProcessRetry(FixtureAPITestCase): process.worker_runs.create( version=self.recognizer, model_version=self.model_version, - ttl=0, ) with patch("arkindex.process.tasks.initialize_activity.delay"): process.run() @@ -209,7 +208,7 @@ class TestProcessRetry(FixtureAPITestCase): worker_type, _ = WorkerType.objects.get_or_create(slug=f"type_{slug}", display_name=slug.capitalize()) worker, _ = Worker.objects.get_or_create(slug=slug, defaults={"type": worker_type, "repository_url": "fake"}) version, _ = worker.versions.get_or_create(version=1, defaults={"state": WorkerVersionState.Available, "docker_image_iid": "test"}) - return version.worker_runs.create(process=process, ttl=0) + return version.worker_runs.create(process=process) init_version = WorkerVersion.objects.get_by_feature(feature=ArkindexFeature.InitElements) @@ -263,7 +262,7 @@ class TestProcessRetry(FixtureAPITestCase): mode=ProcessMode.Files, creator=self.user, ) - process.worker_runs.create(version=self.recognizer, ttl=0) + process.worker_runs.create(version=self.recognizer) process.tasks.create(state=State.Error, run=0, depth=0, ttl=0) self.assertEqual(process.state, State.Error) process.finished = timezone.now() @@ -305,7 +304,6 @@ class TestProcessRetry(FixtureAPITestCase): "iiif_base_url": self.imgsrv.url, }, ), - ttl=0, ) process.tasks.create(state=State.Error, run=0, depth=0, ttl=0) self.assertEqual(process.state, State.Error) @@ -350,7 +348,7 @@ class TestProcessRetry(FixtureAPITestCase): pdf_export_version = WorkerVersion.objects.get_by_feature(ArkindexFeature.ExportPDF) self.client.force_login(self.user) process = self.corpus.processes.create(mode=ProcessMode.Export, creator=self.user) - process.worker_runs.create(version=pdf_export_version, ttl=0) + process.worker_runs.create(version=pdf_export_version) process.tasks.create(state=State.Error, run=0, depth=0, ttl=0) self.assertEqual(process.state, State.Error) process.finished = timezone.now() diff --git a/arkindex/process/tests/process/test_run.py b/arkindex/process/tests/process/test_run.py index ef0ba31c9f3e15ecff7b2b368348f0056edbcc3b..8ca2347b3e8be2a151c655d012d5ff9be4f55697 100644 --- a/arkindex/process/tests/process/test_run.py +++ b/arkindex/process/tests/process/test_run.py @@ -65,8 +65,8 @@ class TestProcessRun(FixtureTestCase): mode=ProcessMode.Workers, ) token_mock.side_effect = [b"12345", b"78945"] - init_run = process.worker_runs.create(version=self.init_worker_version, ttl=0) - run = process.worker_runs.create(version=self.version_with_model, parents=[init_run.id], ttl=0) + init_run = process.worker_runs.create(version=self.init_worker_version) + run = process.worker_runs.create(version=self.version_with_model, parents=[init_run.id]) run.model_version = self.model_version run.save() with patch("arkindex.process.tasks.initialize_activity.delay"): diff --git a/arkindex/process/tests/process/test_start.py b/arkindex/process/tests/process/test_start.py index 4d96cadcbbe3cd43171bbd93a8d6809c70409f50..32d9e5b2dd33ef773caffffd24d6342102122027 100644 --- a/arkindex/process/tests/process/test_start.py +++ b/arkindex/process/tests/process/test_start.py @@ -117,7 +117,7 @@ class TestProcessStart(FixtureAPITestCase): @override_settings(PUBLIC_HOSTNAME="https://darkindex.lol") def test_without_required_model(self): - self.workers_process.worker_runs.create(version=self.version_with_model, ttl=0) + self.workers_process.worker_runs.create(version=self.version_with_model) self.client.force_login(self.user) @@ -135,7 +135,7 @@ class TestProcessStart(FixtureAPITestCase): @override_settings(PUBLIC_HOSTNAME="https://arkindex.localhost") @patch("arkindex.project.triggers.process_tasks.initialize_activity.delay") def test_with_required_model(self, activities_delay_mock): - self.workers_process.worker_runs.create(version=self.version_with_model, model_version=self.model_version, ttl=0) + self.workers_process.worker_runs.create(version=self.version_with_model, model_version=self.model_version) self.assertFalse(self.workers_process.tasks.exists()) self.client.force_login(self.user) @@ -168,7 +168,7 @@ class TestProcessStart(FixtureAPITestCase): ) def test_unavailable_worker_version(self): - self.workers_process.worker_runs.create(version=self.recognizer, ttl=0) + self.workers_process.worker_runs.create(version=self.recognizer) self.recognizer.state = WorkerVersionState.Error self.recognizer.save() self.assertFalse(self.workers_process.tasks.exists()) @@ -185,7 +185,7 @@ class TestProcessStart(FixtureAPITestCase): ) def test_unavailable_model_version(self): - self.workers_process.worker_runs.create(version=self.recognizer, model_version=self.model_version, ttl=0) + self.workers_process.worker_runs.create(version=self.recognizer, model_version=self.model_version) self.model_version.state = ModelVersionState.Error self.model_version.save() self.assertFalse(self.workers_process.tasks.exists()) @@ -202,7 +202,7 @@ class TestProcessStart(FixtureAPITestCase): ) def test_archived_models(self): - self.workers_process.worker_runs.create(version=self.recognizer, model_version=self.model_version, ttl=0) + self.workers_process.worker_runs.create(version=self.recognizer, model_version=self.model_version) self.model.archived = timezone.now() self.model.save() self.assertFalse(self.workers_process.tasks.exists()) @@ -242,7 +242,6 @@ class TestProcessStart(FixtureAPITestCase): version=self.recognizer, configuration=None, model_version=None, - ttl=0, ) # The other version is used with a configuration missing the required field self.workers_process.worker_runs.create( @@ -254,7 +253,6 @@ class TestProcessStart(FixtureAPITestCase): }, ), model_version=None, - ttl=0, ) self.client.force_login(self.user) @@ -278,8 +276,8 @@ class TestProcessStart(FixtureAPITestCase): Default chunks, thumbnails and farm are used. Cache is disabled, and worker activities are enabled. """ init_elements_version = WorkerVersion.objects.get_by_feature(ArkindexFeature.InitElements) - init_run = self.workers_process.worker_runs.create(version=init_elements_version, ttl=0) - run = self.workers_process.worker_runs.create(version=self.recognizer, parents=[init_run.id], ttl=0) + init_run = self.workers_process.worker_runs.create(version=init_elements_version) + run = self.workers_process.worker_runs.create(version=self.recognizer, parents=[init_run.id]) self.assertFalse(self.workers_process.tasks.exists()) self.client.force_login(self.user) @@ -311,13 +309,13 @@ class TestProcessStart(FixtureAPITestCase): def test_inconsistent_gpu_usages(self): # The version's gpu_usage is Disabled, so the run's use_gpu is set to False - self.workers_process.worker_runs.create(version=self.recognizer, ttl=0) + self.workers_process.worker_runs.create(version=self.recognizer) self.recognizer.gpu_usage = FeatureUsage.Required self.recognizer.save() self.dla.gpu_usage = FeatureUsage.Required self.dla.save() # The version's gpu_usage is Required, so the run's use_gpu is set to True - self.workers_process.worker_runs.create(version=self.dla, ttl=0) + self.workers_process.worker_runs.create(version=self.dla) self.dla.gpu_usage = FeatureUsage.Disabled self.dla.save() self.assertFalse(self.workers_process.tasks.exists()) @@ -338,7 +336,7 @@ class TestProcessStart(FixtureAPITestCase): ) def test_dataset_requires_datasets(self): - self.dataset_process.worker_runs.create(version=self.recognizer, ttl=0) + self.dataset_process.worker_runs.create(version=self.recognizer) self.assertFalse(self.dataset_process.tasks.exists()) self.client.force_login(self.user) @@ -355,7 +353,7 @@ class TestProcessStart(FixtureAPITestCase): def test_dataset_requires_dataset_in_same_corpus(self): test_set = self.other_dataset.sets.get(name="test") ProcessDatasetSet.objects.create(process=self.dataset_process, set=test_set) - self.dataset_process.worker_runs.create(version=self.recognizer, ttl=0) + self.dataset_process.worker_runs.create(version=self.recognizer) self.assertFalse(self.dataset_process.tasks.exists()) self.client.force_login(self.user) @@ -375,7 +373,7 @@ class TestProcessStart(FixtureAPITestCase): test_set_2 = self.dataset2.sets.get(name="test") ProcessDatasetSet.objects.create(process=self.dataset_process, set=test_set_1) ProcessDatasetSet.objects.create(process=self.dataset_process, set=test_set_2) - self.dataset_process.worker_runs.create(version=self.recognizer, ttl=0) + self.dataset_process.worker_runs.create(version=self.recognizer) self.client.force_login(self.user) @@ -400,7 +398,7 @@ class TestProcessStart(FixtureAPITestCase): test_set_2 = self.other_dataset.sets.get(name="test") ProcessDatasetSet.objects.create(process=self.dataset_process, set=test_set_1) ProcessDatasetSet.objects.create(process=self.dataset_process, set=test_set_2) - run = self.dataset_process.worker_runs.create(version=self.recognizer, ttl=0) + run = self.dataset_process.worker_runs.create(version=self.recognizer) self.assertFalse(self.dataset_process.tasks.exists()) self.client.force_login(self.user) @@ -434,7 +432,7 @@ class TestProcessStart(FixtureAPITestCase): self.recognizer.save() self.assertEqual(self.recognizer.state, WorkerVersionState.Available) - run = self.workers_process.worker_runs.create(version=self.recognizer, ttl=0) + run = self.workers_process.worker_runs.create(version=self.recognizer) self.assertFalse(self.workers_process.tasks.exists()) self.client.force_login(self.user) @@ -463,7 +461,7 @@ class TestProcessStart(FixtureAPITestCase): """ A user can specify a ponos farm to use for a process """ - self.workers_process.worker_runs.create(version=self.recognizer, ttl=0) + self.workers_process.worker_runs.create(version=self.recognizer) farm = Farm.objects.get(name="Wheat farm") self.client.force_login(self.user) @@ -491,7 +489,7 @@ class TestProcessStart(FixtureAPITestCase): farm = Farm.objects.get(name="Wheat farm") get_default_farm_mock.return_value = farm - self.workers_process.worker_runs.create(version=self.recognizer, ttl=0) + self.workers_process.worker_runs.create(version=self.recognizer) self.assertFalse(self.workers_process.tasks.exists()) self.client.force_login(self.user) @@ -518,7 +516,7 @@ class TestProcessStart(FixtureAPITestCase): @patch("arkindex.process.serializers.imports.get_default_farm") def test_default_farm_guest(self, get_default_farm_mock, is_available_mock): get_default_farm_mock.return_value = Farm.objects.first() - self.workers_process.worker_runs.create(version=self.recognizer, ttl=0) + self.workers_process.worker_runs.create(version=self.recognizer) self.client.force_login(self.user) with self.assertNumQueries(5): @@ -539,7 +537,7 @@ class TestProcessStart(FixtureAPITestCase): @patch("arkindex.ponos.models.Farm.is_available", return_value=False) def test_farm_guest(self, is_available_mock): - self.workers_process.worker_runs.create(version=self.recognizer, ttl=0) + self.workers_process.worker_runs.create(version=self.recognizer) self.client.force_login(self.user) with self.assertNumQueries(7): @@ -592,7 +590,7 @@ class TestProcessStart(FixtureAPITestCase): """ StartProcess should restrict the chunks to `settings.MAX_CHUNKS` """ - self.workers_process.worker_runs.create(version=self.recognizer, ttl=0) + self.workers_process.worker_runs.create(version=self.recognizer) self.client.force_login(self.user) with self.assertNumQueries(5): @@ -611,7 +609,7 @@ class TestProcessStart(FixtureAPITestCase): """ It should be possible to pass chunks parameters when starting a workers process """ - run = self.workers_process.worker_runs.create(version=self.recognizer, ttl=0) + run = self.workers_process.worker_runs.create(version=self.recognizer) self.client.force_login(self.user) with self.assertNumQueries(18): @@ -644,7 +642,7 @@ class TestProcessStart(FixtureAPITestCase): test_set_2 = self.dataset2.sets.get(name="test") ProcessDatasetSet.objects.create(process=self.dataset_process, set=test_set_1) ProcessDatasetSet.objects.create(process=self.dataset_process, set=test_set_2) - run = self.dataset_process.worker_runs.create(version=self.recognizer, ttl=0) + run = self.dataset_process.worker_runs.create(version=self.recognizer) self.client.force_login(self.user) with self.assertNumQueries(12): @@ -690,7 +688,7 @@ class TestProcessStart(FixtureAPITestCase): """ self.assertFalse(self.workers_process.use_cache) self.assertEqual(self.workers_process.activity_state, ActivityState.Disabled) - self.workers_process.worker_runs.create(version=self.version_gpu, ttl=0) + self.workers_process.worker_runs.create(version=self.version_gpu) self.client.force_login(self.user) @@ -723,12 +721,10 @@ class TestProcessStart(FixtureAPITestCase): name="some_config", configuration={"a": "b"}, ), - ttl=0, ) run_2 = self.workers_process.worker_runs.create( version=self.recognizer, parents=[run_1.id], - ttl=0, ) self.assertNotEqual(run_1.task_slug, run_2.task_slug) diff --git a/arkindex/process/tests/templates/test_apply.py b/arkindex/process/tests/templates/test_apply.py index 0f59330309ab6bb8b803884d30bfbd1e85225b3a..43a4a9893777d8b2e1b19f769f4403a8b88f0969 100644 --- a/arkindex/process/tests/templates/test_apply.py +++ b/arkindex/process/tests/templates/test_apply.py @@ -1,7 +1,6 @@ from datetime import datetime, timezone from unittest.mock import call, patch -from django.test import override_settings from rest_framework import status from rest_framework.reverse import reverse @@ -19,7 +18,6 @@ from arkindex.training.models import Model, ModelVersionState from arkindex.users.models import Role -@override_settings(PONOS_MAXIMUM_TASK_TTL=3600) class TestApplyTemplate(FixtureAPITestCase): @classmethod @@ -59,19 +57,16 @@ class TestApplyTemplate(FixtureAPITestCase): cls.template_run_1 = cls.template.worker_runs.create( version=cls.version_1, configuration=cls.worker_configuration, - ttl=7200, ) cls.template_run_2 = cls.template.worker_runs.create( version=cls.version_2, parents=[cls.template_run_1.id], model_version=cls.model_version, - ttl=0, ) cls.private_template.worker_runs.create( version=cls.version_1, configuration=cls.worker_configuration, - ttl=0, ) @patch("arkindex.project.mixins.get_max_level", return_value=Role.Guest.value) @@ -170,7 +165,6 @@ class TestApplyTemplate(FixtureAPITestCase): def test_apply(self): self.assertIsNotNone(self.version_2.docker_image_iid) - self.assertIsNone(self.corpus.maximum_task_ttl) self.client.force_login(self.user) with self.assertNumQueries(10): response = self.client.post( @@ -190,52 +184,16 @@ class TestApplyTemplate(FixtureAPITestCase): self.assertIsNone(parent_run.model_version_id) self.assertEqual(parent_run.configuration_id, self.worker_configuration.id) self.assertListEqual(parent_run.parents, []) - # This had a 7200 seconds TTL, but is limited by the instance limit - self.assertEqual(parent_run.ttl, 3600) self.assertEqual(child_run.process_id, self.process.id) self.assertEqual(child_run.version_id, self.version_2.id) self.assertEqual(child_run.model_version_id, self.model_version.id) self.assertIsNone(child_run.configuration_id) self.assertListEqual(child_run.parents, [parent_run.id]) - # This had an infinite TTL, but is limited by the instance limit - self.assertEqual(child_run.ttl, 3600) - - def test_unlimited_ttl(self): - self.corpus.maximum_task_ttl = 0 - self.corpus.save() - self.client.force_login(self.user) - - with self.assertNumQueries(10): - response = self.client.post( - reverse("api:apply-process-template", kwargs={"pk": str(self.template.id)}), - data={"process_id": str(self.process.id)}, - ) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - child_run, parent_run = self.process.worker_runs.order_by("version__worker__slug") - self.assertEqual(parent_run.ttl, 7200) - self.assertEqual(child_run.ttl, 0) - - def test_corpus_limited_ttl(self): - self.corpus.maximum_task_ttl = 9000 - self.corpus.save() - self.client.force_login(self.user) - - with self.assertNumQueries(10): - response = self.client.post( - reverse("api:apply-process-template", kwargs={"pk": str(self.template.id)}), - data={"process_id": str(self.process.id)}, - ) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - child_run, parent_run = self.process.worker_runs.order_by("version__worker__slug") - self.assertEqual(parent_run.ttl, 7200) - self.assertEqual(child_run.ttl, 9000) def test_excludes_init_elements(self): init_version = WorkerVersion.objects.get_by_feature(ArkindexFeature.InitElements) - init_run = self.template.worker_runs.create(version=init_version, ttl=0) + init_run = self.template.worker_runs.create(version=init_version) self.template_run_1.parents = [init_run.id] self.template_run_1.save() @@ -281,10 +239,7 @@ class TestApplyTemplate(FixtureAPITestCase): process = self.corpus.processes.create( creator=self.user, mode=ProcessMode.Workers ) - process.worker_runs.create( - version=self.version_2, - ttl=0, - ) + process.worker_runs.create(version=self.version_2) # Apply a template that has two other worker runs with self.assertNumQueries(12): response = self.client.post( @@ -318,13 +273,13 @@ class TestApplyTemplate(FixtureAPITestCase): # Set invalid values: the version with disabled GPU usage gets a GPU self.template.worker_runs.filter(version=self.version_1).update(use_gpu=True) # A signal is trying to set use_gpu to the correct values, so we create then update to give no GPU to a version that requires a GPU - self.template.worker_runs.create(version=self.version_3, ttl=0) + self.template.worker_runs.create(version=self.version_3) self.template.worker_runs.filter(version=self.version_3).update(use_gpu=False) # Have two runs with a version that supports GPU usage, to test that both True and False are copied self.version_2.gpu_usage = FeatureUsage.Supported self.version_2.save() - self.template.worker_runs.create(version=self.version_2, configuration=self.worker_configuration, use_gpu=True, ttl=0) + self.template.worker_runs.create(version=self.version_2, configuration=self.worker_configuration, use_gpu=True) self.assertQuerySetEqual(( self.template.worker_runs diff --git a/arkindex/process/tests/templates/test_create.py b/arkindex/process/tests/templates/test_create.py index 8f819de010092c3714c3e15cb3715a7b22fd9ca8..f0bc7787500b00e258f1b87c671220d859f886a8 100644 --- a/arkindex/process/tests/templates/test_create.py +++ b/arkindex/process/tests/templates/test_create.py @@ -1,6 +1,5 @@ from unittest.mock import call, patch -from django.test import override_settings from rest_framework import status from rest_framework.reverse import reverse @@ -19,7 +18,6 @@ from arkindex.training.models import Model, ModelVersionState from arkindex.users.models import Role, User -@override_settings(PONOS_MAXIMUM_TASK_TTL=3600) class TestCreateTemplate(FixtureAPITestCase): @classmethod @@ -61,12 +59,10 @@ class TestCreateTemplate(FixtureAPITestCase): cls.run_1 = cls.process_template.worker_runs.create( version=cls.version_1, configuration=cls.worker_configuration, - ttl=7200, ) cls.run_2 = cls.process_template.worker_runs.create( version=cls.version_2, parents=[cls.run_1.id], - ttl=0, ) cls.model = Model.objects.create(name="moo") @@ -75,24 +71,20 @@ class TestCreateTemplate(FixtureAPITestCase): cls.template_run_1 = cls.template.worker_runs.create( version=cls.version_1, configuration=cls.worker_configuration, - ttl=0, ) cls.template_run_2 = cls.template.worker_runs.create( version=cls.version_2, parents=[cls.template_run_1.id], model_version=cls.model_version, - ttl=0, ) cls.private_process_template.worker_runs.create( version=cls.version_1, configuration=cls.worker_configuration, - ttl=0, ) cls.private_template.worker_runs.create( version=cls.version_1, configuration=cls.worker_configuration, - ttl=0, ) def test_create(self): @@ -116,10 +108,10 @@ class TestCreateTemplate(FixtureAPITestCase): self.assertQuerySetEqual(( template_process.worker_runs .order_by("version__worker__slug") - .values_list("version_id", "model_version_id", "configuration_id", "parents", "ttl") + .values_list("version_id", "model_version_id", "configuration_id", "parents") ), [ - (self.version_2.id, None, None, [parent_run.id], 0), - (self.version_1.id, None, self.worker_configuration.id, [], 7200), + (self.version_2.id, None, None, [parent_run.id]), + (self.version_1.id, None, self.worker_configuration.id, []), ]) def test_use_gpu(self): @@ -128,13 +120,13 @@ class TestCreateTemplate(FixtureAPITestCase): # Set invalid values: the version with disabled GPU usage gets a GPU self.process_template.worker_runs.filter(version=self.version_1).update(use_gpu=True) # A signal is trying to set use_gpu to the correct values, so we create then update to give no GPU to a version that requires a GPU - self.process_template.worker_runs.create(version=self.version_3, ttl=0) + self.process_template.worker_runs.create(version=self.version_3) self.process_template.worker_runs.filter(version=self.version_3).update(use_gpu=False) # Have two runs with a version that supports GPU usage, to test that both True and False are copied self.version_2.gpu_usage = FeatureUsage.Supported self.version_2.save() - self.process_template.worker_runs.create(version=self.version_2, configuration=self.worker_configuration, use_gpu=True, ttl=0) + self.process_template.worker_runs.create(version=self.version_2, configuration=self.worker_configuration, use_gpu=True) self.assertQuerySetEqual(( self.process_template.worker_runs @@ -170,7 +162,7 @@ class TestCreateTemplate(FixtureAPITestCase): def test_excludes_init_elements(self): init_version = WorkerVersion.objects.get_by_feature(ArkindexFeature.InitElements) - init_run = self.process_template.worker_runs.create(version=init_version, ttl=0) + init_run = self.process_template.worker_runs.create(version=init_version) self.run_1.parents = [init_run.id] self.run_1.save() diff --git a/arkindex/process/tests/test_corpus_worker_runs.py b/arkindex/process/tests/test_corpus_worker_runs.py index 590156dcc7708d2e8580e5777c0590bd2733800b..8b9754004f5c970925041eb17baaf7b6521485b9 100644 --- a/arkindex/process/tests/test_corpus_worker_runs.py +++ b/arkindex/process/tests/test_corpus_worker_runs.py @@ -29,7 +29,6 @@ class TestCorpusWorkerRuns(FixtureAPITestCase): cls.run_1 = WorkerRun.objects.create( process=cls.process, version=cls.dla_worker_version, - ttl=0, has_results=True ) @@ -57,12 +56,10 @@ class TestCorpusWorkerRuns(FixtureAPITestCase): cls.run_2 = WorkerRun.objects.create( process=cls.private_process, version=cls.reco_worker_version, - ttl=0, ) cls.run_3 = WorkerRun.objects.create( process=cls.private_process, version=cls.dla_worker_version, - ttl=0, has_results=True ) @@ -144,7 +141,6 @@ class TestCorpusWorkerRuns(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 0, }, { "id": str(self.run_3.id), @@ -190,6 +186,5 @@ class TestCorpusWorkerRuns(FixtureAPITestCase): }, "use_gpu": False, "summary": "Worker Document layout analyser @ version 1", - "ttl": 0, } ]) diff --git a/arkindex/process/tests/test_elements_initialisation.py b/arkindex/process/tests/test_elements_initialisation.py index 0ec36078b5955b4561276a2b9a24efe37c4693bb..5deb50f40c13f3edd2bd2ae794d473d32869757c 100644 --- a/arkindex/process/tests/test_elements_initialisation.py +++ b/arkindex/process/tests/test_elements_initialisation.py @@ -44,12 +44,10 @@ class TestElementsInit(FixtureAPITestCase): ) init_run = process.worker_runs.create( version=self.init_elements_version, - ttl=0, ) worker_run = process.worker_runs.create( version=self.reco_version, parents=[init_run.id], - ttl=0, ) with self.assertNumQueries(16): @@ -86,8 +84,8 @@ class TestElementsInit(FixtureAPITestCase): then one is created when the process is started. """ self.client.force_login(self.user) - reco_run = self.process.worker_runs.create(version=self.reco_version, ttl=0) - dla_run = self.process.worker_runs.create(version=self.dla_version, parents=[reco_run.id], ttl=0) + reco_run = self.process.worker_runs.create(version=self.reco_version) + dla_run = self.process.worker_runs.create(version=self.dla_version, parents=[reco_run.id]) with self.assertNumQueries(18): response = self.client.post( diff --git a/arkindex/process/tests/test_managers.py b/arkindex/process/tests/test_managers.py index 26f0feada5bb76631850eb52160b38852f792951..dc6b4a4c4fda61260f39d1dffd9fbfbe0fce6ec8 100644 --- a/arkindex/process/tests/test_managers.py +++ b/arkindex/process/tests/test_managers.py @@ -28,23 +28,19 @@ class TestManagers(FixtureTestCase): cls.worker_run_1 = cls.worker_version.worker_runs.create( process=cls.corpus.processes.create(mode=ProcessMode.Workers, creator=cls.user), - ttl=0, ) cls.worker_run_2 = cls.worker_version.worker_runs.create( process=cls.corpus.processes.create(mode=ProcessMode.Workers, creator=cls.user), configuration=cls.worker_configuration, - ttl=0, ) cls.worker_run_3 = cls.worker_version.worker_runs.create( process=cls.corpus.processes.create(mode=ProcessMode.Workers, creator=cls.user), model_version=cls.model_version, - ttl=0, ) cls.worker_run_4 = cls.worker_version.worker_runs.create( process=cls.corpus.processes.create(mode=ProcessMode.Workers, creator=cls.user), model_version=cls.model_version, configuration=cls.worker_configuration, - ttl=0, ) def test_corpus_worker_version_rebuild(self): diff --git a/arkindex/process/tests/test_signals.py b/arkindex/process/tests/test_signals.py index 1c6323c2a153924f0e80eb473fe9543e5b36b8b2..f1dc954aa854bb8c45e90ec5d8643bd2993d0b96 100644 --- a/arkindex/process/tests/test_signals.py +++ b/arkindex/process/tests/test_signals.py @@ -38,10 +38,7 @@ class TestSignals(FixtureAPITestCase): mode=ProcessMode.Workers, farm=cls.farm, ) - cls.run_1 = cls.process_1.worker_runs.create( - version=cls.version_1, - ttl=0, - ) + cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1) cls.process_2 = cls.corpus.processes.create( creator=cls.user, mode=ProcessMode.Workers, @@ -49,10 +46,7 @@ class TestSignals(FixtureAPITestCase): ) def test_worker_run_check_parents_recursive(self): - run_2 = self.process_1.worker_runs.create( - version=self.version_2, - ttl=0, - ) + run_2 = self.process_1.worker_runs.create(version=self.version_2) self.assertListEqual(run_2.parents, []) run_2.parents = [str(run_2.id)] @@ -68,7 +62,6 @@ class TestSignals(FixtureAPITestCase): self.process_2.worker_runs.create( version=self.version_2, parents=[str(self.run_1.id)], - ttl=0, ) self.process_1.refresh_from_db() @@ -80,7 +73,6 @@ class TestSignals(FixtureAPITestCase): self.process_2.worker_runs.create( version=self.version_2, parents=["12341234-1234-1234-1234-123412341234"], - ttl=0, ) self.process_1.refresh_from_db() @@ -133,7 +125,6 @@ class TestSignals(FixtureAPITestCase): run_2 = self.process_1.worker_runs.create( version=self.version_2, parents=[self.run_1.id], - ttl=0, ) self.run_1.parents = [run_2.id] @@ -175,22 +166,18 @@ class TestSignals(FixtureAPITestCase): run_2 = self.process_1.worker_runs.create( version=self.version_2, parents=[self.run_1.id], - ttl=0, ) run_3 = self.process_1.worker_runs.create( version=version_3, parents=[run_2.id], - ttl=0, ) run_4 = self.process_1.worker_runs.create( version=version_4, parents=[run_3.id], - ttl=0, ) run_5 = self.process_1.worker_runs.create( version=version_5, parents=[run_4.id], - ttl=0, ) self.run_1.parents = [run_5.id] @@ -211,12 +198,10 @@ class TestSignals(FixtureAPITestCase): run_2 = self.process_1.worker_runs.create( version=self.version_2, parents=[self.run_1.id], - ttl=0, ) run_3 = self.process_1.worker_runs.create( version=version_3, parents=[run_2.id], - ttl=0, ) run_3.parents.append(self.run_1.id) @@ -231,7 +216,6 @@ class TestSignals(FixtureAPITestCase): run_2 = self.process_1.worker_runs.create( version=self.version_2, parents=[self.run_1.id], - ttl=0, ) self.assertEqual(len(self.process_1.worker_runs.all()), 2) @@ -245,7 +229,6 @@ class TestSignals(FixtureAPITestCase): run = self.process_1.worker_runs.create( version=self.version_2, parents=[self.run_1.id], - ttl=0, ) self.assertIsNotNone(run.summary) diff --git a/arkindex/process/tests/test_user_workerruns.py b/arkindex/process/tests/test_user_workerruns.py index d98a8d5a33d32c9f80f557ec477730165006fbfc..4a515ef8c31e2ec8deb96d595c4df9bd7de69a27 100644 --- a/arkindex/process/tests/test_user_workerruns.py +++ b/arkindex/process/tests/test_user_workerruns.py @@ -1,7 +1,6 @@ from datetime import datetime, timezone from unittest.mock import call, patch -from django.test import override_settings from django.urls import reverse from rest_framework import status @@ -19,7 +18,6 @@ from arkindex.training.models import Model, ModelVersion, ModelVersionState from arkindex.users.models import Right, Role, User -@override_settings(PONOS_MAXIMUM_TASK_TTL=3600) class TestUserWorkerRuns(FixtureAPITestCase): @classmethod def setUpTestData(cls): @@ -67,7 +65,6 @@ class TestUserWorkerRuns(FixtureAPITestCase): test_local_run = WorkerRun.objects.create( process=self.local_process, version=self.version_1, - ttl=0, ) self.client.force_login(self.user) with self.assertNumQueries(5): @@ -118,7 +115,6 @@ class TestUserWorkerRuns(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 0, }, { "configuration": None, "id": str(self.local_run.id), @@ -163,7 +159,6 @@ class TestUserWorkerRuns(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 0, }]) def test_list_user_runs_only_own_runs(self): @@ -175,7 +170,6 @@ class TestUserWorkerRuns(FixtureAPITestCase): test_local_run = WorkerRun.objects.create( process=test_local_process, version=self.version_1, - ttl=0, ) assert WorkerRun.objects.filter(process__mode=ProcessMode.Local, process__creator=write_user).count() == 1 self.client.force_login(self.user) @@ -264,8 +258,6 @@ class TestUserWorkerRuns(FixtureAPITestCase): "use_cache": False, }, "use_gpu": False, - # The TTL is always 0 for user worker runs - "ttl": 0, }) def test_create_user_run_no_local_process(self): @@ -483,7 +475,6 @@ class TestUserWorkerRuns(FixtureAPITestCase): "use_cache": False, }, "use_gpu": False, - "ttl": 0, }) def test_create_user_run_duplicate(self): diff --git a/arkindex/process/tests/worker_activity/test_bulk_insert.py b/arkindex/process/tests/worker_activity/test_bulk_insert.py index 0e2ac8c8088be91bdc75306e4f5d1312f8d66335..e51dd68498424bad9c79a695673659475a205840 100644 --- a/arkindex/process/tests/worker_activity/test_bulk_insert.py +++ b/arkindex/process/tests/worker_activity/test_bulk_insert.py @@ -40,7 +40,6 @@ class TestWorkerActivityBulkInsert(FixtureAPITestCase): version=cls.worker_version, configuration=cls.configuration, model_version=cls.model_version, - ttl=0, ) def test_worker_version(self): diff --git a/arkindex/process/tests/worker_activity/test_initialize.py b/arkindex/process/tests/worker_activity/test_initialize.py index 321f1855f7c8d2e9062538552abb57aceddea987..caaed902d0c140d5051d4d7685dcbb4cd00f75c9 100644 --- a/arkindex/process/tests/worker_activity/test_initialize.py +++ b/arkindex/process/tests/worker_activity/test_initialize.py @@ -19,8 +19,8 @@ class TestInitializeActivity(FixtureTestCase): element_type=cls.corpus.types.get(slug="volume"), activity_state=ActivityState.Pending, ) - cls.process.worker_runs.create(version=cls.worker_version_1, ttl=0) - cls.process.worker_runs.create(version=cls.worker_version_2, ttl=0) + cls.process.worker_runs.create(version=cls.worker_version_1) + cls.process.worker_runs.create(version=cls.worker_version_2) @patch("arkindex.process.tasks.get_current_job") def test_rq_progress(self, job_mock): diff --git a/arkindex/process/tests/worker_activity/test_list.py b/arkindex/process/tests/worker_activity/test_list.py index bc980a1189a5738caac9943f165c41a3b160948c..75af915f2948d86625833312b0bc4f34a17221b4 100644 --- a/arkindex/process/tests/worker_activity/test_list.py +++ b/arkindex/process/tests/worker_activity/test_list.py @@ -48,7 +48,6 @@ class TestListWorkerActivities(FixtureAPITestCase): version=cls.worker_version, configuration=cls.configuration, model_version=cls.model_version, - ttl=0, ) # Run the process, but skip the real activity initialization so that we can control it ourselves diff --git a/arkindex/process/tests/worker_activity/test_update.py b/arkindex/process/tests/worker_activity/test_update.py index e275425a7e5f933cb2378e9775192038ac2078cd..4d1a5aa34e6f8cf775a31f9b74990d1ec290111e 100644 --- a/arkindex/process/tests/worker_activity/test_update.py +++ b/arkindex/process/tests/worker_activity/test_update.py @@ -49,7 +49,6 @@ class TestUpdateWorkerActivity(FixtureAPITestCase): version=cls.worker_version, configuration=cls.configuration, model_version=cls.model_version, - ttl=0, ) # Run the process, but skip the real activity initialization so that we can control it ourselves @@ -201,7 +200,6 @@ class TestUpdateWorkerActivity(FixtureAPITestCase): # Different configuration configuration=None, model_version=self.model_version, - ttl=0, ) with self.assertNumQueries(4): @@ -457,17 +455,14 @@ class TestUpdateWorkerActivity(FixtureAPITestCase): run_2 = self.process.worker_runs.create( version=worker_version_2, parents=[run_1.id], - ttl=0, ) self.process.worker_runs.create( version=worker_version_3, parents=[run_2.id], - ttl=0, ) self.process.worker_runs.create( version=worker_version_4, - ttl=0, ) # Create activities for run_2, run_3 and run_4 diff --git a/arkindex/process/tests/worker_runs/test_build_task.py b/arkindex/process/tests/worker_runs/test_build_task.py index 65ce96c232f643b396f70afcfbc4d21ad0f36400..022348a66055f610eb5344ee248efefede735c24 100644 --- a/arkindex/process/tests/worker_runs/test_build_task.py +++ b/arkindex/process/tests/worker_runs/test_build_task.py @@ -25,7 +25,7 @@ class TestWorkerRunsBuildTask(FixtureAPITestCase): ) cls.version = WorkerVersion.objects.get(worker__slug="reco") cls.worker = cls.version.worker - cls.worker_run = cls.process.worker_runs.create(version=cls.version, ttl=0) + cls.worker_run = cls.process.worker_runs.create(version=cls.version) # Model and Model version setup cls.model_1 = Model.objects.create(name="My model") @@ -52,7 +52,7 @@ class TestWorkerRunsBuildTask(FixtureAPITestCase): "TASK_ELEMENTS": "/data/import/elements.json", "ARKINDEX_WORKER_RUN_ID": str(self.worker_run.id), }) - self.assertEqual(task.ttl, 0) + self.assertEqual(task.ttl, 3600) def test_build_task_with_chunk(self): task, parent_slugs = self.worker_run.build_task(self.process, ENV.copy(), "import", "/data/import/elements.json", chunk=4) @@ -81,7 +81,6 @@ class TestWorkerRunsBuildTask(FixtureAPITestCase): run_2 = self.process.worker_runs.create( version=version_2, parents=[self.worker_run.id], - ttl=42, ) task, parent_slugs = run_2.build_task(self.process, ENV.copy(), "import", "/data/import/elements.json") @@ -97,7 +96,7 @@ class TestWorkerRunsBuildTask(FixtureAPITestCase): "TASK_ELEMENTS": "/data/import/elements.json", "ARKINDEX_WORKER_RUN_ID": str(run_2.id), }) - self.assertEqual(task.ttl, 42) + self.assertEqual(task.ttl, 3600) def test_build_task_with_parent_and_chunk(self): version_2 = WorkerVersion.objects.create( @@ -110,7 +109,6 @@ class TestWorkerRunsBuildTask(FixtureAPITestCase): run_2 = self.process.worker_runs.create( version=version_2, parents=[self.worker_run.id], - ttl=1000, ) task, parent_slugs = run_2.build_task(self.process, ENV.copy(), "import", "/data/import/elements.json", chunk=4) @@ -127,7 +125,7 @@ class TestWorkerRunsBuildTask(FixtureAPITestCase): "TASK_ELEMENTS": "/data/import/elements.json", "ARKINDEX_WORKER_RUN_ID": str(run_2.id), }) - self.assertEqual(task.ttl, 1000) + self.assertEqual(task.ttl, 3600) def test_build_task_shm_size(self): self.version.configuration = { @@ -160,7 +158,6 @@ class TestWorkerRunsBuildTask(FixtureAPITestCase): run_2 = self.process.worker_runs.create( version=version_2, parents=[self.worker_run.id], - ttl=0, ) with self.assertRaisesRegex( diff --git a/arkindex/process/tests/worker_runs/test_create.py b/arkindex/process/tests/worker_runs/test_create.py index 41ac10e52738e197473f8d2e434c033ada84a3df..1d066bfb420854071d510929527f3ee18213362b 100644 --- a/arkindex/process/tests/worker_runs/test_create.py +++ b/arkindex/process/tests/worker_runs/test_create.py @@ -3,7 +3,6 @@ from datetime import datetime, timezone from unittest.mock import call, patch from django.db import transaction -from django.test import override_settings from django.urls import reverse from rest_framework import status @@ -20,7 +19,6 @@ from arkindex.training.models import Model, ModelVersion, ModelVersionState from arkindex.users.models import Role -@override_settings(PONOS_MAXIMUM_TASK_TTL=3600) class TestWorkerRunsCreate(FixtureAPITestCase): """ Test worker runs create endpoint @@ -38,7 +36,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase): ) cls.version_1 = WorkerVersion.objects.get(worker__slug="reco") cls.worker_1 = cls.version_1.worker - cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1, ttl=0) + cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1) cls.configuration_1 = cls.worker_1.configurations.create(name="My config", configuration={"key": "value"}) worker_version = WorkerVersion.objects.exclude(worker=cls.version_1.worker).first() cls.configuration_2 = worker_version.worker.configurations.create(name="Config") @@ -330,7 +328,6 @@ class TestWorkerRunsCreate(FixtureAPITestCase): }, "use_gpu": False, "summary": "Worker Recognizer @ version 1", - "ttl": 3600, }) run = WorkerRun.objects.get(pk=pk) # Check generated summary @@ -415,7 +412,6 @@ class TestWorkerRunsCreate(FixtureAPITestCase): }, "use_gpu": False, "summary": "Worker Recognizer @ version 1 using configuration 'My config'", - "ttl": 3600, }) run = WorkerRun.objects.get(pk=pk) # Check generated summary @@ -563,7 +559,6 @@ class TestWorkerRunsCreate(FixtureAPITestCase): }, "summary": f"Worker Recognizer @ version {worker_version.version}", "use_gpu": use_gpu, - "ttl": 3600, }) run = WorkerRun.objects.get(pk=pk) self.assertEqual(run.use_gpu, use_gpu) @@ -623,7 +618,6 @@ class TestWorkerRunsCreate(FixtureAPITestCase): }, "summary": "Worker Recognizer @ version 2", "use_gpu": True, - "ttl": 3600, }) run = WorkerRun.objects.get(pk=pk) self.assertEqual(run.use_gpu, True) diff --git a/arkindex/process/tests/worker_runs/test_delete.py b/arkindex/process/tests/worker_runs/test_delete.py index 410e5a3e4422a1d81dbce6fb42ea2d679d94ab34..e01006daa0e132c7bfa772c6b6510f59c7b463c6 100644 --- a/arkindex/process/tests/worker_runs/test_delete.py +++ b/arkindex/process/tests/worker_runs/test_delete.py @@ -28,7 +28,7 @@ class TestWorkerRunsDelete(FixtureAPITestCase): cls.version_1 = WorkerVersion.objects.get(worker__slug="reco") cls.worker_1 = cls.version_1.worker cls.version_2 = WorkerVersion.objects.get(worker__slug="dla") - cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1, ttl=0) + cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1) cls.agent = Agent.objects.create( farm=cls.farm, @@ -77,7 +77,7 @@ class TestWorkerRunsDelete(FixtureAPITestCase): """ A user cannot delete a worker run on a local process """ - run = self.local_process.worker_runs.create(version=self.version_1, ttl=0) + run = self.local_process.worker_runs.create(version=self.version_1) self.client.force_login(self.user) with self.assertNumQueries(4): @@ -114,12 +114,10 @@ class TestWorkerRunsDelete(FixtureAPITestCase): run_2 = self.process_1.worker_runs.create( version=version_2, parents=[self.run_1.id], - ttl=0, ) run_3 = self.process_1.worker_runs.create( version=version_3, parents=[self.run_1.id, run_2.id], - ttl=0, ) self.assertTrue(self.run_1.id in run_2.parents) diff --git a/arkindex/process/tests/worker_runs/test_list.py b/arkindex/process/tests/worker_runs/test_list.py index 8b0698d4a482ba9d56369be6d0f8b0e9458a2cf0..10bf646f478e2d251ed5b8983cef61fab9e602a6 100644 --- a/arkindex/process/tests/worker_runs/test_list.py +++ b/arkindex/process/tests/worker_runs/test_list.py @@ -22,7 +22,7 @@ class TestWorkerRunsList(FixtureAPITestCase): ) cls.version_1 = WorkerVersion.objects.get(worker__slug="reco") cls.worker_1 = cls.version_1.worker - cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1, ttl=0) + cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1) cls.process_2 = cls.corpus.processes.create(creator=cls.user, mode=ProcessMode.Workers) def test_list_requires_login(self): @@ -94,14 +94,10 @@ class TestWorkerRunsList(FixtureAPITestCase): }, "use_gpu": False, "summary": "Worker Recognizer @ version 1", - "ttl": 0, }]) def test_list_filter_process(self): - run_2 = self.process_2.worker_runs.create( - version=self.version_1, - ttl=0, - ) + run_2 = self.process_2.worker_runs.create(version=self.version_1) self.client.force_login(self.user) with self.assertNumQueries(6): @@ -165,5 +161,4 @@ class TestWorkerRunsList(FixtureAPITestCase): }, "use_gpu": False, "summary": "Worker Recognizer @ version 1", - "ttl": 0, }]) diff --git a/arkindex/process/tests/worker_runs/test_partial_update.py b/arkindex/process/tests/worker_runs/test_partial_update.py index cb7ebb4664e613a2b70e5e93637d876c793e527c..e6a4606b5a4d650a3501eeaf67178d24ccf6181b 100644 --- a/arkindex/process/tests/worker_runs/test_partial_update.py +++ b/arkindex/process/tests/worker_runs/test_partial_update.py @@ -30,7 +30,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): cls.version_1 = WorkerVersion.objects.get(worker__slug="reco") cls.worker_1 = cls.version_1.worker cls.version_2 = WorkerVersion.objects.get(worker__slug="dla") - cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1, ttl=1000) + cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1) cls.configuration_1 = cls.worker_1.configurations.create(name="My config", configuration={"key": "value"}) worker_version = WorkerVersion.objects.exclude(worker=cls.version_1.worker).first() cls.configuration_2 = worker_version.worker.configurations.create(name="Config") @@ -115,10 +115,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): version=2, configuration={"test": "test2"} ) - run_2 = self.process_1.worker_runs.create( - version=version_2, - ttl=0, - ) + run_2 = self.process_1.worker_runs.create(version=version_2) with self.assertNumQueries(0): response = self.client.patch( @@ -154,10 +151,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): version=2, configuration={"test": "test2"} ) - run_2 = self.process_1.worker_runs.create( - version=version_2, - ttl=0, - ) + run_2 = self.process_1.worker_runs.create(version=version_2) self.client.force_login(self.user) with self.assertNumQueries(3): @@ -173,7 +167,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): """ A user cannot update a worker run on a local process """ - run = self.local_process.worker_runs.create(version=self.version_1, ttl=1000) + run = self.local_process.worker_runs.create(version=self.version_1) self.client.force_login(self.user) with self.assertNumQueries(5): @@ -266,7 +260,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 1000, "summary": "Worker Recognizer @ version 1", }) self.run_1.refresh_from_db() @@ -332,7 +325,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 1000, "summary": "Worker Recognizer @ version 1", }) self.run_1.refresh_from_db() @@ -403,7 +395,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 1000, "summary": "Worker Recognizer @ version 1 using configuration 'My config'", }) self.assertEqual(self.run_1.configuration.id, self.configuration_1.id) @@ -455,10 +446,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): configuration={"test": "test2"}, model_usage=FeatureUsage.Disabled ) - run_2 = self.process_1.worker_runs.create( - version=version_no_model, - ttl=1000, - ) + run_2 = self.process_1.worker_runs.create(version=version_no_model) with self.assertNumQueries(5): response = self.client.patch( @@ -484,10 +472,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): configuration={"test": "test2"}, model_usage=FeatureUsage.Required ) - run_2 = self.process_1.worker_runs.create( - version=version_no_model, - ttl=1000, - ) + run_2 = self.process_1.worker_runs.create(version=version_no_model) random_model_version_uuid = str(uuid.uuid4()) with self.assertNumQueries(4): @@ -515,10 +500,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): configuration={"test": "test2"}, model_usage=FeatureUsage.Required ) - run_2 = self.process_1.worker_runs.create( - version=version_no_model, - ttl=1000, - ) + run_2 = self.process_1.worker_runs.create(version=version_no_model) # Create a model version, the user has no access to model_no_access = Model.objects.create(name="Secret model") @@ -555,10 +537,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): configuration={"test": "test2"}, model_usage=FeatureUsage.Required ) - run_2 = self.process_1.worker_runs.create( - version=version_no_model, - ttl=1000, - ) + run_2 = self.process_1.worker_runs.create(version=version_no_model) def filter_rights(user, model, level): """ @@ -619,10 +598,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): configuration={"test": "test2"}, model_usage=FeatureUsage.Required ) - run = self.process_1.worker_runs.create( - version=version, - ttl=1000, - ) + run = self.process_1.worker_runs.create(version=version) self.model_version_1.state = ModelVersionState.Error self.model_version_1.save() @@ -648,7 +624,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): configuration={"test": "test2"}, model_usage=FeatureUsage.Required ) - run = self.process_1.worker_runs.create(version=version, ttl=1000) + run = self.process_1.worker_runs.create(version=version) self.model_1.archived = datetime.now(timezone.utc) self.model_1.save() @@ -676,10 +652,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): configuration={"test": "test2"}, model_usage=FeatureUsage.Required ) - run = self.process_1.worker_runs.create( - version=version_with_model, - ttl=0, - ) + run = self.process_1.worker_runs.create(version=version_with_model) self.assertIsNone(run.model_version_id) self.assertEqual(run.summary, "Worker Recognizer @ version 2") @@ -758,7 +731,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 0, "summary": f"Worker Recognizer @ version 2 with model {model_version.model.name} @ {str(model_version.id)[:6]}", }) self.assertEqual(run.model_version_id, model_version.id) @@ -778,7 +750,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): ) run = self.process_1.worker_runs.create( version=version_with_model, - ttl=0, configuration=self.configuration_1 ) self.assertEqual(run.model_version_id, None) @@ -853,7 +824,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 0, "summary": f"Worker Recognizer @ version 2 with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'", }) self.assertEqual(run.model_version_id, self.model_version_1.id) @@ -867,7 +837,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): ) run_2 = self.process_1.worker_runs.create( version=version_2, - ttl=0, ) self.client.force_login(self.user) @@ -926,7 +895,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 1000, "summary": "Worker Recognizer @ version 1", }) @@ -954,7 +922,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): version=self.version_1, model_version=None if model_version else self.model_version_1, configuration=None if configuration else self.configuration_1, - ttl=0, ) # Having a model version or a configuration adds one query for each @@ -1005,7 +972,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): run = WorkerRun.objects.create( process=self.process_1, version=worker_version, - ttl=0 ) self.assertEqual(run.use_gpu, True if worker_version.gpu_usage == FeatureUsage.Required else False) with self.assertNumQueries(3): @@ -1035,7 +1001,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): run = WorkerRun.objects.create( process=self.process_1, version=worker_version, - ttl=0 ) self.assertEqual(run.use_gpu, True if worker_version.gpu_usage == FeatureUsage.Required else False) @@ -1093,7 +1058,6 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): }, "summary": f"Worker Recognizer @ version {worker_version.version}", "use_gpu": use_gpu, - "ttl": 0, }) run.refresh_from_db() self.assertEqual(run.use_gpu, use_gpu) diff --git a/arkindex/process/tests/worker_runs/test_retrieve.py b/arkindex/process/tests/worker_runs/test_retrieve.py index e253e85f25da5e605625ac07faa49e1906654593..42e7146a4a5dac234de5834a5d25423ec95dd04c 100644 --- a/arkindex/process/tests/worker_runs/test_retrieve.py +++ b/arkindex/process/tests/worker_runs/test_retrieve.py @@ -35,7 +35,7 @@ class TestWorkerRunsRetrieve(FixtureAPITestCase): cls.worker_custom = Worker.objects.get(slug="custom") cls.version_custom = cls.worker_custom.versions.get() - cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1, ttl=1000) + cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1) cls.run_custom = cls.local_process.worker_runs.get(version=cls.version_custom) cls.process_2 = cls.corpus.processes.create(creator=cls.user, mode=ProcessMode.Workers) @@ -114,7 +114,6 @@ class TestWorkerRunsRetrieve(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 1000, "summary": "Worker Recognizer @ version 1", }) @@ -179,7 +178,6 @@ class TestWorkerRunsRetrieve(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 1000, "summary": "Worker Recognizer @ version 1", }) @@ -274,14 +272,13 @@ class TestWorkerRunsRetrieve(FixtureAPITestCase): }, "summary": "Worker Custom worker @ version 1", "use_gpu": False, - "ttl": 0, }) def test_retrieve_local(self): """ A user can retrieve a run on their own local process """ - run = self.local_process.worker_runs.create(version=self.version_1, ttl=0) + run = self.local_process.worker_runs.create(version=self.version_1) self.client.force_login(self.user) with self.assertNumQueries(5): @@ -335,7 +332,6 @@ class TestWorkerRunsRetrieve(FixtureAPITestCase): "prefix": None, }, "use_gpu": False, - "ttl": 0, "summary": "Worker Recognizer @ version 1", }) @@ -411,7 +407,6 @@ class TestWorkerRunsRetrieve(FixtureAPITestCase): "prefix": None, }, "use_gpu": False, - "ttl": 1000, "summary": "Worker Recognizer @ version 1", }) diff --git a/arkindex/process/tests/worker_runs/test_ttl.py b/arkindex/process/tests/worker_runs/test_ttl.py deleted file mode 100644 index edd98b6a9b2b821370a857a6a9022561487e2fa5..0000000000000000000000000000000000000000 --- a/arkindex/process/tests/worker_runs/test_ttl.py +++ /dev/null @@ -1,272 +0,0 @@ -from django.test import override_settings -from django.urls import reverse -from rest_framework import status - -from arkindex.ponos.models import Farm -from arkindex.process.models import ( - ProcessMode, - WorkerVersion, -) -from arkindex.project.tests import FixtureAPITestCase - - -@override_settings(PONOS_MAXIMUM_TASK_TTL=3600) -class TestWorkerRunTTL(FixtureAPITestCase): - - @classmethod - def setUpTestData(cls): - super().setUpTestData() - cls.process = cls.corpus.processes.create( - creator=cls.user, - mode=ProcessMode.Workers, - farm=Farm.objects.first(), - ) - cls.recognizer = WorkerVersion.objects.get(worker__slug="reco") - cls.dla = WorkerVersion.objects.get(worker__slug="dla") - cls.worker_run = cls.process.worker_runs.create(version=cls.dla, ttl=0) - - def test_create_default_ttl(self): - self.client.force_login(self.superuser) - # Corpus TTL / WorkerRun TTL - cases = [ - (0, 0), - (10000, 10000), - # No corpus TTL means the instance wide value should be set - (None, 3600), - ] - - for corpus_ttl, expected_ttl in cases: - with self.subTest(corpus_ttl=corpus_ttl): - self.process.worker_runs.filter(version=self.recognizer).delete() - self.corpus.maximum_task_ttl = corpus_ttl - self.corpus.save() - - with self.assertNumQueries(6): - response = self.client.post( - reverse("api:worker-run-list", kwargs={"pk": str(self.process.id)}), - {"worker_version_id": str(self.recognizer.id)}, - ) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - - data = response.json() - self.assertEqual(data["ttl"], expected_ttl) - run = self.process.worker_runs.get(id=data["id"]) - self.assertEqual(run.ttl, expected_ttl) - - def test_create_set_ttl(self): - self.client.force_login(self.superuser) - # Corpus TTL / WorkerRun TTL / Expected WorkerRun TTL - cases = [ - (0, 0, 0), - (0, 1000, 1000), - (1800, 1000, 1000), - (1800, 1800, 1800), - # No corpus TTL means the instance wide value is the limit - (None, 600, 600), - (None, 3600, 3600), - ] - - for corpus_ttl, worker_run_ttl, expected_ttl in cases: - with self.subTest(corpus_ttl=corpus_ttl, worker_run_ttl=worker_run_ttl): - self.process.worker_runs.filter(version=self.recognizer).delete() - self.corpus.maximum_task_ttl = corpus_ttl - self.corpus.save() - - with self.assertNumQueries(6): - response = self.client.post( - reverse("api:worker-run-list", kwargs={"pk": str(self.process.id)}), - { - "worker_version_id": str(self.recognizer.id), - "ttl": worker_run_ttl, - }, - ) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - - data = response.json() - self.assertEqual(data["ttl"], expected_ttl) - run = self.process.worker_runs.get(id=data["id"]) - self.assertEqual(run.ttl, expected_ttl) - - def test_create_invalid_ttl(self): - self.client.force_login(self.superuser) - self.process.worker_runs.filter(version=self.recognizer).delete() - - # Corpus TTL, WorkerRun TTL, error message - cases = [ - (None, "one hour", ["A valid integer is required."]), - (None, -1, ["Ensure this value is greater than or equal to 1."]), - (None, 0, ["Ensure this value is greater than or equal to 1."]), - (None, 1e12, ["Ensure this value is less than or equal to 3600."]), - (0, -1, ["Ensure this value is greater than or equal to 0."]), - (0, 1e12, ["Ensure this value is less than or equal to 2147483647."]), - (1800, -1, ["Ensure this value is greater than or equal to 1."]), - (1800, 0, ["Ensure this value is greater than or equal to 1."]), - (1800, 1e12, ["Ensure this value is less than or equal to 1800."]), - ] - for corpus_ttl, worker_run_ttl, expected_error in cases: - with self.subTest(corpus_ttl=corpus_ttl, worker_run_ttl=worker_run_ttl): - self.corpus.maximum_task_ttl = corpus_ttl - self.corpus.save() - - with self.assertNumQueries(4): - response = self.client.post( - reverse("api:worker-run-list", kwargs={"pk": str(self.process.id)}), - { - "worker_version_id": str(self.recognizer.id), - "ttl": worker_run_ttl, - }, - ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - self.assertEqual(response.json(), { - "ttl": expected_error, - }) - - def test_partial_update_set_ttl(self): - self.client.force_login(self.superuser) - # Corpus TTL / WorkerRun TTL / Expected WorkerRun TTL - cases = [ - (0, 0, 0), - (0, 1000, 1000), - (1800, 1000, 1000), - (1800, 1800, 1800), - # No corpus TTL means the instance wide value is the limit - (None, 600, 600), - (None, 3600, 3600), - ] - - for corpus_ttl, worker_run_ttl, expected_ttl in cases: - with self.subTest(corpus_ttl=corpus_ttl, worker_run_ttl=worker_run_ttl): - self.corpus.maximum_task_ttl = corpus_ttl - self.corpus.save() - - with self.assertNumQueries(5): - response = self.client.patch( - reverse("api:worker-run-details", kwargs={"pk": str(self.worker_run.id)}), - {"ttl": worker_run_ttl}, - ) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - data = response.json() - self.assertEqual(data["ttl"], expected_ttl) - run = self.process.worker_runs.get(id=data["id"]) - self.assertEqual(run.ttl, expected_ttl) - - def test_partial_update_invalid_ttl(self): - self.client.force_login(self.superuser) - - # Corpus TTL, WorkerRun TTL, error message - cases = [ - (None, "one hour", ["A valid integer is required."]), - (None, -1, ["Ensure this value is greater than or equal to 1."]), - (None, 0, ["Ensure this value is greater than or equal to 1."]), - (None, 1e12, ["Ensure this value is less than or equal to 3600."]), - (0, -1, ["Ensure this value is greater than or equal to 0."]), - (0, 1e12, ["Ensure this value is less than or equal to 2147483647."]), - (1800, -1, ["Ensure this value is greater than or equal to 1."]), - (1800, 0, ["Ensure this value is greater than or equal to 1."]), - (1800, 1e12, ["Ensure this value is less than or equal to 1800."]), - ] - for corpus_ttl, worker_run_ttl, expected_error in cases: - with self.subTest(corpus_ttl=corpus_ttl, worker_run_ttl=worker_run_ttl): - self.corpus.maximum_task_ttl = corpus_ttl - self.corpus.save() - - with self.assertNumQueries(3): - response = self.client.patch( - reverse("api:worker-run-details", kwargs={"pk": str(self.worker_run.id)}), - {"ttl": worker_run_ttl}, - ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - self.assertEqual(response.json(), { - "ttl": expected_error, - }) - - - def test_update_default_ttl(self): - self.client.force_login(self.superuser) - # Corpus TTL / WorkerRun TTL - cases = [ - (0, 0), - (10000, 10000), - # No corpus TTL means the instance wide value should be set - (None, 3600), - ] - - for corpus_ttl, expected_ttl in cases: - with self.subTest(corpus_ttl=corpus_ttl): - self.corpus.maximum_task_ttl = corpus_ttl - self.corpus.save() - - with self.assertNumQueries(5): - response = self.client.put( - reverse("api:worker-run-details", kwargs={"pk": str(self.worker_run.id)}), - {}, - ) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - self.assertEqual(response.json()["ttl"], expected_ttl) - self.worker_run.refresh_from_db() - self.assertEqual(self.worker_run.ttl, expected_ttl) - - def test_update_set_ttl(self): - self.client.force_login(self.superuser) - # Corpus TTL / WorkerRun TTL / Expected WorkerRun TTL - cases = [ - (0, 0, 0), - (0, 1000, 1000), - (1800, 1000, 1000), - (1800, 1800, 1800), - # No corpus TTL means the instance wide value is the limit - (None, 600, 600), - (None, 3600, 3600), - ] - - for corpus_ttl, worker_run_ttl, expected_ttl in cases: - with self.subTest(corpus_ttl=corpus_ttl, worker_run_ttl=worker_run_ttl): - self.corpus.maximum_task_ttl = corpus_ttl - self.corpus.save() - - with self.assertNumQueries(5): - response = self.client.put( - reverse("api:worker-run-details", kwargs={"pk": str(self.worker_run.id)}), - {"ttl": worker_run_ttl}, - ) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - data = response.json() - self.assertEqual(data["ttl"], expected_ttl) - run = self.process.worker_runs.get(id=data["id"]) - self.assertEqual(run.ttl, expected_ttl) - - def test_update_invalid_ttl(self): - self.client.force_login(self.superuser) - - # Corpus TTL, WorkerRun TTL, error message - cases = [ - (None, "one hour", ["A valid integer is required."]), - (None, -1, ["Ensure this value is greater than or equal to 1."]), - (None, 0, ["Ensure this value is greater than or equal to 1."]), - (None, 1e12, ["Ensure this value is less than or equal to 3600."]), - (0, -1, ["Ensure this value is greater than or equal to 0."]), - (0, 1e12, ["Ensure this value is less than or equal to 2147483647."]), - (1800, -1, ["Ensure this value is greater than or equal to 1."]), - (1800, 0, ["Ensure this value is greater than or equal to 1."]), - (1800, 1e12, ["Ensure this value is less than or equal to 1800."]), - ] - for corpus_ttl, worker_run_ttl, expected_error in cases: - with self.subTest(corpus_ttl=corpus_ttl, worker_run_ttl=worker_run_ttl): - self.corpus.maximum_task_ttl = corpus_ttl - self.corpus.save() - - with self.assertNumQueries(3): - response = self.client.put( - reverse("api:worker-run-details", kwargs={"pk": str(self.worker_run.id)}), - {"ttl": worker_run_ttl}, - ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - self.assertEqual(response.json(), { - "ttl": expected_error, - }) diff --git a/arkindex/process/tests/worker_runs/test_update.py b/arkindex/process/tests/worker_runs/test_update.py index b412d3b9da98f1ef6af1ef23d32e7bbbd519c701..54226950e5c60424f4f305d32d7492c27ac5e5d0 100644 --- a/arkindex/process/tests/worker_runs/test_update.py +++ b/arkindex/process/tests/worker_runs/test_update.py @@ -2,7 +2,6 @@ import uuid from datetime import datetime, timezone from unittest.mock import call, patch -from django.test import override_settings from django.urls import reverse from rest_framework import status from rest_framework.exceptions import ValidationError @@ -14,7 +13,6 @@ from arkindex.training.models import Model, ModelVersion, ModelVersionState from arkindex.users.models import Role -@override_settings(PONOS_MAXIMUM_TASK_TTL=3600) class TestWorkerRunsUpdate(FixtureAPITestCase): """ Test worker runs update endpoint @@ -33,7 +31,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): cls.version_1 = WorkerVersion.objects.get(worker__slug="reco") cls.worker_1 = cls.version_1.worker cls.version_2 = WorkerVersion.objects.get(worker__slug="dla") - cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1, ttl=1000) + cls.run_1 = cls.process_1.worker_runs.create(version=cls.version_1) cls.configuration_1 = cls.worker_1.configurations.create(name="My config", configuration={"key": "value"}) worker_version = WorkerVersion.objects.exclude(worker=cls.version_1.worker).first() cls.configuration_2 = worker_version.worker.configurations.create(name="Config") @@ -99,7 +97,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): ) run_2 = self.process_1.worker_runs.create( version=version_2, - ttl=0, ) with self.assertNumQueries(0): @@ -137,7 +134,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): """ A user cannot update a worker run on a local process """ - run = self.local_process.worker_runs.create(version=self.version_1, ttl=1000) + run = self.local_process.worker_runs.create(version=self.version_1) self.client.force_login(self.user) with self.assertNumQueries(5): @@ -161,7 +158,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): ) run_2 = self.process_1.worker_runs.create( version=version_2, - ttl=0, ) self.client.force_login(self.user) @@ -194,7 +190,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): def test_update_duplicate_parents(self): self.client.force_login(self.user) - run_2 = self.process_1.worker_runs.create(version=self.version_2, ttl=0) + run_2 = self.process_1.worker_runs.create(version=self.version_2) with self.assertNumQueries(4): response = self.client.put( @@ -218,7 +214,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): """ run_2 = self.process_1.worker_runs.create( version=self.version_2, - ttl=0, ) run_2.parents = [self.run_1.id, self.run_1.id] @@ -286,7 +281,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 3600, "summary": "Worker Recognizer @ version 1", }) self.run_1.refresh_from_db() @@ -352,7 +346,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): }, }, "use_gpu": False, - "ttl": 3600, "summary": "Worker Recognizer @ version 1", }) self.run_1.refresh_from_db() @@ -426,7 +419,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 3600, "summary": "Worker Recognizer @ version 1 using configuration 'My config'", }) self.assertEqual(self.run_1.configuration.id, self.configuration_1.id) @@ -481,7 +473,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): ) run_2 = self.process_1.worker_runs.create( version=version_no_model, - ttl=0, ) with self.assertNumQueries(5): @@ -511,7 +502,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): ) run_2 = self.process_1.worker_runs.create( version=version_no_model, - ttl=0, ) random_model_version_uuid = str(uuid.uuid4()) @@ -543,7 +533,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): ) run_2 = self.process_1.worker_runs.create( version=version_no_model, - ttl=0, ) # Create a model version, the user has no access to @@ -590,7 +579,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): ) run_2 = self.process_1.worker_runs.create( version=version_no_model, - ttl=0, ) def filter_rights(user, model, level): @@ -655,7 +643,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): ) run = self.process_1.worker_runs.create( version=version, - ttl=0, ) self.model_version_1.state = ModelVersionState.Error self.model_version_1.save() @@ -682,7 +669,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): configuration={"test": "test2"}, model_usage=FeatureUsage.Required ) - run = self.process_1.worker_runs.create(version=version, ttl=0) + run = self.process_1.worker_runs.create(version=version) self.model_1.archived = datetime.now(timezone.utc) self.model_1.save() @@ -712,7 +699,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): ) run = self.process_1.worker_runs.create( version=version_with_model, - ttl=0, ) self.assertEqual(run.model_version, None) # Check generated summary, before updating, there should be only information about the worker version @@ -794,7 +780,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 3600, "summary": f"Worker Recognizer @ version 2 with model {model_version.model.name} @ {str(model_version.id)[:6]}", }) self.assertEqual(run.model_version_id, model_version.id) @@ -813,7 +798,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): ) run = self.process_1.worker_runs.create( version=version_with_model, - ttl=0, ) self.assertIsNone(run.model_version) self.assertIsNone(run.configuration) @@ -892,7 +876,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 3600, "summary": f"Worker Recognizer @ version 2 with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'", }) self.assertEqual(run.model_version_id, self.model_version_1.id) @@ -907,7 +890,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): ) run_2 = self.process_1.worker_runs.create( version=version_2, - ttl=0, ) self.client.force_login(self.user) @@ -916,7 +898,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): reverse("api:worker-run-details", kwargs={"pk": str(self.run_1.id)}), data={ "parents": [str(run_2.id)], - "ttl": 500, }, ) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -967,7 +948,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): } }, "use_gpu": False, - "ttl": 500, "summary": "Worker Recognizer @ version 1", }) @@ -995,7 +975,6 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): version=self.version_1, model_version=None if model_version else self.model_version_1, configuration=None if configuration else self.configuration_1, - ttl=0, ) # Having a model version or a configuration adds one query for each diff --git a/arkindex/sql_validation/indexer_prefetch.sql b/arkindex/sql_validation/indexer_prefetch.sql index aab95251662980a622405d111ab3a2b38c83f94f..31118a36fb017e3469755d35d223db5b4a8e2bef 100644 --- a/arkindex/sql_validation/indexer_prefetch.sql +++ b/arkindex/sql_validation/indexer_prefetch.sql @@ -56,8 +56,7 @@ SELECT "process_workerrun"."id", "process_workerrun"."created", "process_workerrun"."updated", "process_workerrun"."has_results", - "process_workerrun"."use_gpu", - "process_workerrun"."ttl" + "process_workerrun"."use_gpu" FROM "process_workerrun" WHERE "process_workerrun"."id" IN ('{worker_run_id}'::uuid); @@ -152,8 +151,7 @@ SELECT "process_workerrun"."id", "process_workerrun"."created", "process_workerrun"."updated", "process_workerrun"."has_results", - "process_workerrun"."use_gpu", - "process_workerrun"."ttl" + "process_workerrun"."use_gpu" FROM "process_workerrun" WHERE "process_workerrun"."id" IN ('{worker_run_id}'::uuid); diff --git a/arkindex/sql_validation/list_elements.sql b/arkindex/sql_validation/list_elements.sql index 546d2c19cbbc33a7b861e648aa38d76a47533326..1a542e371a3e03cecff3059fe69f92ab010b7ee5 100644 --- a/arkindex/sql_validation/list_elements.sql +++ b/arkindex/sql_validation/list_elements.sql @@ -41,8 +41,7 @@ SELECT "documents_element"."id", "process_workerrun"."created", "process_workerrun"."updated", "process_workerrun"."has_results", - "process_workerrun"."use_gpu", - "process_workerrun"."ttl" + "process_workerrun"."use_gpu" FROM "documents_element" LEFT OUTER JOIN "process_workerrun" ON ("documents_element"."worker_run_id" = "process_workerrun"."id") WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid