From c45e0ca46669ffdc3c61fc767127533fe6e7d9ec Mon Sep 17 00:00:00 2001 From: SKAJohanVenter <aventer@ska.ac.za> Date: Thu, 28 Oct 2021 11:25:23 +0200 Subject: [PATCH] SAR-286 Proposed improvements for LRC --- src/ska_tango_base/base/component_manager.py | 11 +++- .../base/reference_component_manager.py | 53 +------------------ .../reference_base_device.py | 6 ++- .../test_task_queue_manager.py | 12 +++-- 4 files changed, 22 insertions(+), 60 deletions(-) diff --git a/src/ska_tango_base/base/component_manager.py b/src/ska_tango_base/base/component_manager.py index 824c994f..27356903 100644 --- a/src/ska_tango_base/base/component_manager.py +++ b/src/ska_tango_base/base/component_manager.py @@ -54,6 +54,9 @@ class BaseComponentManager: manager """ self.op_state_model = op_state_model + self._max_queue_size = kwargs.get("max_queue_size", 0) + self._num_workers = kwargs.get("num_workers", 0) + self._push_change_event = kwargs.get("push_change_event", None) self._queue_manager = self.create_queue_manager() def start_communicating(self): @@ -216,7 +219,13 @@ class BaseComponentManager: :return: The queue manager. :rtype: QueueManager """ - return QueueManager(max_queue_size=0, num_workers=0) + logger = getattr(self, "logger", None) + return QueueManager( + max_queue_size=self._max_queue_size, + num_workers=self._num_workers, + logger=logger, + push_change_event=self._push_change_event, + ) def enqueue( self, diff --git a/src/ska_tango_base/base/reference_component_manager.py b/src/ska_tango_base/base/reference_component_manager.py index 8a8f94e3..b830eb84 100644 --- a/src/ska_tango_base/base/reference_component_manager.py +++ b/src/ska_tango_base/base/reference_component_manager.py @@ -5,11 +5,8 @@ It is provided for explanatory purposes, and to support testing of this package. """ import functools -import logging -from typing import Optional, Callable -from ska_tango_base.base import BaseComponentManager, OpStateModel -from ska_tango_base.base.task_queue_manager import QueueManager +from ska_tango_base.base import BaseComponentManager from ska_tango_base.control_model import PowerMode from ska_tango_base.faults import ComponentFault @@ -392,51 +389,3 @@ class ReferenceBaseComponentManager(BaseComponentManager): This is a callback hook. """ self.op_state_model.perform_action("component_fault") - - -class QueueWorkerComponentManager(ReferenceBaseComponentManager): - """A component manager that configures the queue manager.""" - - def __init__( - self, - op_state_model: Optional[OpStateModel], - logger: logging.Logger, - max_queue_size: int, - num_workers: int, - push_change_event: Optional[Callable], - *args, - **kwargs - ): - """Component manager that configures the queue. - - :param op_state_model: The ops state model - :type op_state_model: OpStateModel - :param logger: Logger to use - :type logger: logging.Logger - :param max_queue_size: The size of the queue - :type max_queue_size: int - :param num_workers: The number of workers - :type num_workers: int - :param push_change_event: A method that will be called when attributes are updated - :type push_change_event: Callable - """ - self.logger = logger - self.max_queue_size = max_queue_size - self.num_workers = num_workers - self.push_change_event = push_change_event - super().__init__(op_state_model, *args, logger=logger, **kwargs) - - def create_queue_manager(self) -> QueueManager: - """Create a QueueManager. - - Create the QueueManager with the queue configured as needed. - - :return: The queue manager - :rtype: QueueManager - """ - return QueueManager( - max_queue_size=self.max_queue_size, - num_workers=self.num_workers, - logger=self.logger, - push_change_event=self.push_change_event, - ) diff --git a/tests/long_running_tasks/reference_base_device.py b/tests/long_running_tasks/reference_base_device.py index 329d1c54..47a67578 100644 --- a/tests/long_running_tasks/reference_base_device.py +++ b/tests/long_running_tasks/reference_base_device.py @@ -14,7 +14,9 @@ import tango from tango.server import command, device_property from tango import DebugIt -from ska_tango_base.base.reference_component_manager import QueueWorkerComponentManager +from ska_tango_base.base.reference_component_manager import ( + ReferenceBaseComponentManager, +) from ska_tango_base.base.base_device import SKABaseDevice from ska_tango_base.base.task_queue_manager import ResultCode from ska_tango_base.commands import ResponseCommand @@ -234,7 +236,7 @@ class AsyncBaseDevice(LongRunningCommandBaseTestDevice): def create_component_manager(self: SKABaseDevice): """Create the component manager with a queue manager that has workers.""" - return QueueWorkerComponentManager( + return ReferenceBaseComponentManager( op_state_model=self.op_state_model, logger=self.logger, max_queue_size=20, diff --git a/tests/long_running_tasks/test_task_queue_manager.py b/tests/long_running_tasks/test_task_queue_manager.py index f20b0e56..fd764c26 100644 --- a/tests/long_running_tasks/test_task_queue_manager.py +++ b/tests/long_running_tasks/test_task_queue_manager.py @@ -10,7 +10,9 @@ from ska_tango_base.base.task_queue_manager import ( TaskResult, TaskState, ) -from ska_tango_base.base.reference_component_manager import QueueWorkerComponentManager +from ska_tango_base.base.reference_component_manager import ( + ReferenceBaseComponentManager, +) from ska_tango_base.commands import BaseCommand logger = logging.getLogger(__name__) @@ -396,7 +398,7 @@ class TestQueueManagerExit: ) ) - cm = QueueWorkerComponentManager( + cm = ReferenceBaseComponentManager( op_state_model=None, logger=logger, max_queue_size=10, @@ -458,7 +460,7 @@ class TestQueueManagerExit: @pytest.mark.timeout(5) def test_exit_stop(self, stop_task): """Test stopping exit.""" - cm = QueueWorkerComponentManager( + cm = ReferenceBaseComponentManager( op_state_model=None, logger=logger, max_queue_size=5, @@ -486,7 +488,7 @@ class TestQueueManagerExit: @pytest.mark.timeout(5) def test_delete_queue(self, slow_task, stop_task, abort_task): """Test deleting the queue.""" - cm = QueueWorkerComponentManager( + cm = ReferenceBaseComponentManager( op_state_model=None, logger=logger, max_queue_size=8, @@ -514,7 +516,7 @@ class TestComponentManager: def test_init(self): """Test that we can init the component manager.""" - cm = QueueWorkerComponentManager( + cm = ReferenceBaseComponentManager( op_state_model=None, logger=logger, max_queue_size=0, -- GitLab