From 76c9b18d5838168369351fa1da84ae8fc5db21f9 Mon Sep 17 00:00:00 2001 From: hweawer Date: Fri, 28 Feb 2025 13:33:25 +0100 Subject: [PATCH 1/3] Skip ejection on empty exitable_validators --- src/services/exit_order_iterator.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/services/exit_order_iterator.py b/src/services/exit_order_iterator.py index 265d32436..d34db242f 100644 --- a/src/services/exit_order_iterator.py +++ b/src/services/exit_order_iterator.py @@ -346,6 +346,14 @@ def get_remaining_forced_validators(self) -> list[tuple[NodeOperatorGlobalIndex, # The current and all subsequent NOs in the list has no forced validators to exit. Cycle done return result + gid = ( + no_stats.node_operator.staking_module.id, + no_stats.node_operator.id, + ) + + if not self.exitable_validators[gid]: + continue + if no_stats.predictable_validators: # When found Node Operator self.index += 1 From c78205b33f43184af598a9b36522420b8c7908c9 Mon Sep 17 00:00:00 2001 From: hweawer Date: Fri, 28 Feb 2025 14:00:58 +0100 Subject: [PATCH 2/3] Add to test --- src/services/exit_order_iterator.py | 9 +-------- .../ejector/test_validator_exit_order_iterator.py | 6 ++++++ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/services/exit_order_iterator.py b/src/services/exit_order_iterator.py index d34db242f..809618bf8 100644 --- a/src/services/exit_order_iterator.py +++ b/src/services/exit_order_iterator.py @@ -351,16 +351,9 @@ def get_remaining_forced_validators(self) -> list[tuple[NodeOperatorGlobalIndex, no_stats.node_operator.id, ) - if not self.exitable_validators[gid]: - continue - - if no_stats.predictable_validators: + if no_stats.predictable_validators and self.exitable_validators[gid]: # When found Node Operator self.index += 1 - gid = ( - no_stats.node_operator.staking_module.id, - no_stats.node_operator.id, - ) result.append((gid, self._eject_validator(gid))) break diff --git a/tests/modules/ejector/test_validator_exit_order_iterator.py b/tests/modules/ejector/test_validator_exit_order_iterator.py index 6bad56b26..a00e58ca0 100644 --- a/tests/modules/ejector/test_validator_exit_order_iterator.py +++ b/tests/modules/ejector/test_validator_exit_order_iterator.py @@ -396,6 +396,11 @@ def test_get_remaining_forced_validators(iterator): force_exit_to=9, node_operator=NodeOperatorFactory.build(id=4, staking_module=sm), ), + (1, 5): NodeOperatorStatsFactory.build( + predictable_validators=10, + force_exit_to=9, + node_operator=NodeOperatorFactory.build(id=5, staking_module=sm), + ), } iterator.exitable_validators = { @@ -403,6 +408,7 @@ def test_get_remaining_forced_validators(iterator): (1, 2): [LidoValidatorFactory.build(index=5)], (1, 3): [LidoValidatorFactory.build(index=3)], (1, 4): [LidoValidatorFactory.build(index=4)], + (1, 5): [], } def _eject(self, gid): From 529c64537ce94b4cb8c700f374d21952f0697487 Mon Sep 17 00:00:00 2001 From: hweawer Date: Fri, 28 Feb 2025 14:05:13 +0100 Subject: [PATCH 3/3] single check --- src/services/exit_order_iterator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/exit_order_iterator.py b/src/services/exit_order_iterator.py index 809618bf8..3e83c9e11 100644 --- a/src/services/exit_order_iterator.py +++ b/src/services/exit_order_iterator.py @@ -351,7 +351,7 @@ def get_remaining_forced_validators(self) -> list[tuple[NodeOperatorGlobalIndex, no_stats.node_operator.id, ) - if no_stats.predictable_validators and self.exitable_validators[gid]: + if self.exitable_validators[gid]: # When found Node Operator self.index += 1 result.append((gid, self._eject_validator(gid)))