From d49d4cad284e434730ba454c41e8bcb09a57fa33 Mon Sep 17 00:00:00 2001 From: Marek Franciszkiewicz Date: Thu, 25 Jul 2019 14:12:27 +0200 Subject: [PATCH] Fix updating task status when not enough funds are available --- golem/task/rpc.py | 17 +++++++++++------ golem/task/taskmanager.py | 2 +- tests/golem/task/test_rpc.py | 4 +++- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/golem/task/rpc.py b/golem/task/rpc.py index 6683a1a75e..4a118548b7 100644 --- a/golem/task/rpc.py +++ b/golem/task/rpc.py @@ -491,14 +491,19 @@ def create_task(self, task_dict, force=False) \ logger.debug('force=%r', force) task = _create_task(self.client, task_dict) - self._validate_enough_funds_to_pay_for_task( - task.subtask_price, - task.get_total_tasks(), - task.header.concent_enabled, - force - ) task_id = task.header.task_id + try: + self._validate_enough_funds_to_pay_for_task( + task.subtask_price, + task.get_total_tasks(), + task.header.concent_enabled, + force + ) + except Exception as exc: # pylint: disable=broad-except + self.client.task_manager.task_creation_failed(task_id, str(exc)) + raise + # Fire and forget the next steps after create_task deferred = _prepare_task(client=self.client, task=task, force=force) deferred.addErrback( diff --git a/golem/task/taskmanager.py b/golem/task/taskmanager.py index 981820d5ed..a8989e821d 100644 --- a/golem/task/taskmanager.py +++ b/golem/task/taskmanager.py @@ -228,7 +228,7 @@ def add_new_task(self, task: Task, estimated_fee: int = 0) -> None: @handle_task_key_error def task_creation_failed(self, task_id: str, reason: str) -> None: - logger.error("Cannot create task. id=%s : %s", task_id, reason) + logger.error("Cannot create task. task_id=%s : %s", task_id, reason) task_state = self.tasks_states[task_id] task_state.status = TaskStatus.errorCreating diff --git a/tests/golem/task/test_rpc.py b/tests/golem/task/test_rpc.py index 3484d9c9ca..0d2e565446 100644 --- a/tests/golem/task/test_rpc.py +++ b/tests/golem/task/test_rpc.py @@ -756,14 +756,16 @@ def setUp(self): ) @mock.patch('twisted.internet.reactor', mock.Mock()) + @mock.patch("golem.task.taskmanager.TaskManager.task_creation_failed") @mock.patch("golem.task.rpc.prepare_and_validate_task_dict") - def test_create_task(self, mock_method, *_): + def test_create_task(self, mock_method, creation_failed, *_): t = dummytaskstate.DummyTaskDefinition() t.name = "test" mock_method.side_effect = Exception("Test") result = self.provider.create_task(t.to_dict()) mock_method.assert_called() + creation_failed.assert_called() self.assertEqual(result, (None, "Test")) def test_restart_task(self, *_):