From 9e0e16ea9a0aa22110862789047aa1f41e3a52c5 Mon Sep 17 00:00:00 2001 From: cat-bro Date: Thu, 30 Mar 2023 20:00:49 +1100 Subject: [PATCH 1/2] If a tool has file size rules, a role rule has no access to entity tags --- tests/fixtures/mapping-role.yml | 17 +++++++++++++++++ tests/test_mapper_role.py | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/fixtures/mapping-role.yml b/tests/fixtures/mapping-role.yml index 738deba..bca2058 100644 --- a/tests/fixtures/mapping-role.yml +++ b/tests/fixtures/mapping-role.yml @@ -28,6 +28,23 @@ tools: - pulsar-training-large require: - pulsar + fastqc: + cores: 8 + mem: 30.7 + env: + _JAVA_OPTIONS: -Xmx{int(mem)}G -Xms1G + scheduling: + require: + - pulsar + rules: + - id: fastqc_small_input_rule + if: input_size < 0.01 + cores: 2 + mem: 7.6 + - id: fastqc_medium_input_rule + if: 0.01 <= input_size < 2 + cores: 4 + mem: 15.3 users: default: max_cores: 3 diff --git a/tests/test_mapper_role.py b/tests/test_mapper_role.py index f2b3591..a7b65b4 100644 --- a/tests/test_mapper_role.py +++ b/tests/test_mapper_role.py @@ -58,7 +58,7 @@ def test_map_role_training_matching_tag_values(self): self.assertEqual(destination.params['native_spec'], '--mem 1 --cores 1') # test training small pulsar rule - tool = mock_galaxy.Tool('bwa') + tool = mock_galaxy.Tool('fastqc') destination = self._map_to_destination(tool, user) self.assertEqual(destination.params['native_spec'], '--mem 2 --cores 2') From 6e5a702f7feef828a05a954c6b476b4defe1b153 Mon Sep 17 00:00:00 2001 From: nuwang <2070605+nuwang@users.noreply.github.com> Date: Thu, 30 Mar 2023 15:15:18 +0530 Subject: [PATCH 2/2] Fix incorrect entity being passed in entity when evaluating rules --- tpv/core/entities.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tpv/core/entities.py b/tpv/core/entities.py index 4d3e47e..9738116 100644 --- a/tpv/core/entities.py +++ b/tpv/core/entities.py @@ -484,14 +484,14 @@ def evaluate(self, context): for rule in self.rules.values(): if rule.is_matching(context): rule = rule.evaluate(context) - context.update({ - 'entity': rule - }) new_entity = rule.inherit(new_entity) new_entity.gpus = rule.gpus or self.gpus new_entity.cores = rule.cores or self.cores new_entity.mem = rule.mem or self.mem new_entity.id = f"{new_entity.id}, Rule: {rule.id}" + context.update({ + 'entity': new_entity + }) return super(EntityWithRules, new_entity).evaluate(context) def __repr__(self):