From c6845c01361712f7b816d1c51a8809e3f28419d0 Mon Sep 17 00:00:00 2001 From: Hidekazu Nakamura Date: Tue, 28 Feb 2017 13:50:19 +0900 Subject: [PATCH] Added suspended audit state New audit state SUSPENDED is added in this patch set. If audit state with continuous mode is changed from ONGOING to SUSPENDED, audit's job is removed and the audit is not executed. If audit state changed from SUSPENDED to ONGOING in reverse, audit is executed again periodically. Change-Id: I32257f56a40c0352a7c24f3fb80ad95ec28dc614 Implements: blueprint suspended-audit-state --- doc/source/architecture.rst | 3 ++ .../plantuml/audit_state_machine.txt | 3 ++ doc/source/images/audit_state_machine.png | Bin 37160 -> 48406 bytes ...uspended-audit-state-07f998c94e9d9a47.yaml | 4 ++ watcher/api/controllers/v1/audit.py | 49 ++++++++---------- watcher/api/controllers/v1/utils.py | 9 ++++ watcher/decision_engine/audit/continuous.py | 4 +- watcher/objects/audit.py | 26 ++++++++++ watcher/tests/api/v1/test_audits.py | 21 ++------ watcher/tests/db/test_audit.py | 27 ++++++---- .../audit/test_audit_handlers.py | 24 +++++---- .../tests/api/admin/base.py | 11 +++- .../tests/api/admin/test_audit.py | 4 +- .../scenario/test_execute_basic_optim.py | 2 +- 14 files changed, 114 insertions(+), 73 deletions(-) create mode 100644 releasenotes/notes/suspended-audit-state-07f998c94e9d9a47.yaml diff --git a/doc/source/architecture.rst b/doc/source/architecture.rst index 479599c93..b903a9752 100644 --- a/doc/source/architecture.rst +++ b/doc/source/architecture.rst @@ -407,6 +407,9 @@ be one of the following: - **CANCELLED** : the :ref:`Audit ` was in **PENDING** or **ONGOING** state and was cancelled by the :ref:`Administrator ` +- **SUSPENDED** : the :ref:`Audit ` was in **ONGOING** + state and was suspended by the + :ref:`Administrator ` The following diagram shows the different possible states of an :ref:`Audit ` and what event makes the state change to a new diff --git a/doc/source/image_src/plantuml/audit_state_machine.txt b/doc/source/image_src/plantuml/audit_state_machine.txt index 8f4c9a1d0..860a2026e 100644 --- a/doc/source/image_src/plantuml/audit_state_machine.txt +++ b/doc/source/image_src/plantuml/audit_state_machine.txt @@ -4,11 +4,14 @@ PENDING --> ONGOING: Audit request is received\nby the Watcher Decision Engine ONGOING --> FAILED: Audit fails\n(no solution found, technical error, ...) ONGOING --> SUCCEEDED: The Watcher Decision Engine\ncould find at least one Solution +ONGOING --> SUSPENDED: Administrator wants to\nsuspend the Audit +SUSPENDED --> ONGOING: Administrator wants to\nresume the Audit FAILED --> DELETED : Administrator wants to\narchive/delete the Audit SUCCEEDED --> DELETED : Administrator wants to\narchive/delete the Audit PENDING --> CANCELLED : Administrator cancels\nthe Audit ONGOING --> CANCELLED : Administrator cancels\nthe Audit CANCELLED --> DELETED : Administrator wants to\narchive/delete the Audit +SUSPENDED --> DELETED: Administrator wants to\narchive/delete the Audit DELETED --> [*] @enduml diff --git a/doc/source/images/audit_state_machine.png b/doc/source/images/audit_state_machine.png index 58c64aa4841c9080ef240260bc9e8832c01d302c..afe21c93746b4d69e86f20ac8b592a3b86485c37 100644 GIT binary patch literal 48406 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 V_6y0-UPGMV8}e#$A7t)5`!A2hDQo}$ literal 37160 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%0A}DQRkI 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 yp9hRao$r_n=oPzgZl%su-nsR %(new_state)s)") + raise exception.PatchError( + patch=patch, + reason=error_message % dict( + initial_state=initial_state, new_state=new_state)) + audit = Audit(**api_utils.apply_jsonpatch(audit_dict, patch)) except api_utils.JSONPATCH_EXCEPTIONS as e: raise exception.PatchError(patch=patch, reason=e) - initial_state = audit_dict['state'] - new_state = api_utils.get_patch_value(patch, 'state') - allowed_states = ALLOWED_AUDIT_TRANSITIONS.get(initial_state, []) - if new_state is not None and new_state not in allowed_states: - error_message = _("State transition not allowed: " - "(%(initial_state)s -> %(new_state)s)") - raise exception.PatchError( - patch=patch, - reason=error_message % dict( - initial_state=initial_state, new_state=new_state)) - # Update only the fields that have changed for field in objects.Audit.fields: try: diff --git a/watcher/api/controllers/v1/utils.py b/watcher/api/controllers/v1/utils.py index 54edcf018..255c9ac04 100644 --- a/watcher/api/controllers/v1/utils.py +++ b/watcher/api/controllers/v1/utils.py @@ -79,6 +79,15 @@ def get_patch_value(patch, key): return p['value'] +def check_audit_state_transition(patch, initial): + is_transition_valid = True + state_value = get_patch_value(patch, "state") + if state_value is not None: + is_transition_valid = objects.audit.AuditStateTransitionManager( + ).check_transition(initial, state_value) + return is_transition_valid + + def as_filters_dict(**filters): filters_dict = {} for filter_name, filter_value in filters.items(): diff --git a/watcher/decision_engine/audit/continuous.py b/watcher/decision_engine/audit/continuous.py index 551bd97c2..91fb530c0 100644 --- a/watcher/decision_engine/audit/continuous.py +++ b/watcher/decision_engine/audit/continuous.py @@ -49,9 +49,7 @@ class ContinuousAuditHandler(base.AuditHandler): def _is_audit_inactive(self, audit): audit = objects.Audit.get_by_uuid( self.context_show_deleted, audit.uuid) - if audit.state in (objects.audit.State.CANCELLED, - objects.audit.State.DELETED, - objects.audit.State.FAILED): + if objects.audit.AuditStateTransitionManager().is_inactive(audit): # if audit isn't in active states, audit's job must be removed to # prevent using of inactive audit in future. job_to_delete = [job for job in self.jobs diff --git a/watcher/objects/audit.py b/watcher/objects/audit.py index 0dc489c5c..fa9bdd77b 100644 --- a/watcher/objects/audit.py +++ b/watcher/objects/audit.py @@ -46,6 +46,9 @@ be one of the following: - **CANCELLED** : the :ref:`Audit ` was in **PENDING** or **ONGOING** state and was cancelled by the :ref:`Administrator ` +- **SUSPENDED** : the :ref:`Audit ` was in **ONGOING** + state and was suspended by the + :ref:`Administrator ` """ import enum @@ -66,6 +69,7 @@ class State(object): CANCELLED = 'CANCELLED' DELETED = 'DELETED' PENDING = 'PENDING' + SUSPENDED = 'SUSPENDED' class AuditType(enum.Enum): @@ -296,3 +300,25 @@ class Audit(base.WatcherPersistentObject, base.WatcherObject, notifications.audit.send_delete(self._context, self) _notify() + + +class AuditStateTransitionManager(object): + + TRANSITIONS = { + State.PENDING: [State.ONGOING, State.CANCELLED], + State.ONGOING: [State.FAILED, State.SUCCEEDED, + State.CANCELLED, State.SUSPENDED], + State.FAILED: [State.DELETED], + State.SUCCEEDED: [State.DELETED], + State.CANCELLED: [State.DELETED], + State.SUSPENDED: [State.ONGOING, State.DELETED], + } + + INACTIVE_STATES = (State.CANCELLED, State.DELETED, + State.FAILED, State.SUSPENDED) + + def check_transition(self, initial, new): + return new in self.TRANSITIONS.get(initial, []) + + def is_inactive(self, audit): + return audit.state in self.INACTIVE_STATES diff --git a/watcher/tests/api/v1/test_audits.py b/watcher/tests/api/v1/test_audits.py index e842eaf8e..47749ee52 100644 --- a/watcher/tests/api/v1/test_audits.py +++ b/watcher/tests/api/v1/test_audits.py @@ -345,23 +345,10 @@ class TestPatch(api_base.FunctionalTest): ALLOWED_TRANSITIONS = [ - {"original_state": objects.audit.State.PENDING, - "new_state": objects.audit.State.ONGOING}, - {"original_state": objects.audit.State.PENDING, - "new_state": objects.audit.State.CANCELLED}, - {"original_state": objects.audit.State.ONGOING, - "new_state": objects.audit.State.FAILED}, - {"original_state": objects.audit.State.ONGOING, - "new_state": objects.audit.State.SUCCEEDED}, - {"original_state": objects.audit.State.ONGOING, - "new_state": objects.audit.State.CANCELLED}, - {"original_state": objects.audit.State.FAILED, - "new_state": objects.audit.State.DELETED}, - {"original_state": objects.audit.State.SUCCEEDED, - "new_state": objects.audit.State.DELETED}, - {"original_state": objects.audit.State.CANCELLED, - "new_state": objects.audit.State.DELETED}, -] + {"original_state": key, "new_state": value} + for key, values in ( + objects.audit.AuditStateTransitionManager.TRANSITIONS.items()) + for value in values] class TestPatchStateTransitionDenied(api_base.FunctionalTest): diff --git a/watcher/tests/db/test_audit.py b/watcher/tests/db/test_audit.py index 46b0a2aba..1b467bad5 100644 --- a/watcher/tests/db/test_audit.py +++ b/watcher/tests/db/test_audit.py @@ -53,6 +53,10 @@ class TestDbAuditFilters(base.DbTestCase): self.audit3 = utils.create_test_audit( audit_template_id=self.audit_template.id, id=3, uuid=None, state=objects.audit.State.CANCELLED) + with freezegun.freeze_time(self.FAKE_OLDER_DATE): + self.audit4 = utils.create_test_audit( + audit_template_id=self.audit_template.id, id=4, uuid=None, + state=objects.audit.State.SUSPENDED) def _soft_delete_audits(self): with freezegun.freeze_time(self.FAKE_TODAY): @@ -92,8 +96,9 @@ class TestDbAuditFilters(base.DbTestCase): res = self.dbapi.get_audit_list( self.context, filters={'deleted': False}) - self.assertEqual([self.audit2['id'], self.audit3['id']], - [r.id for r in res]) + self.assertEqual( + [self.audit2['id'], self.audit3['id'], self.audit4['id']], + [r.id for r in res]) def test_get_audit_list_filter_deleted_at_eq(self): self._soft_delete_audits() @@ -154,7 +159,7 @@ class TestDbAuditFilters(base.DbTestCase): self.context, filters={'created_at__lt': self.FAKE_TODAY}) self.assertEqual( - [self.audit2['id'], self.audit3['id']], + [self.audit2['id'], self.audit3['id'], self.audit4['id']], [r.id for r in res]) def test_get_audit_list_filter_created_at_lte(self): @@ -162,7 +167,7 @@ class TestDbAuditFilters(base.DbTestCase): self.context, filters={'created_at__lte': self.FAKE_OLD_DATE}) self.assertEqual( - [self.audit2['id'], self.audit3['id']], + [self.audit2['id'], self.audit3['id'], self.audit4['id']], [r.id for r in res]) def test_get_audit_list_filter_created_at_gt(self): @@ -230,18 +235,22 @@ class TestDbAuditFilters(base.DbTestCase): def test_get_audit_list_filter_state_in(self): res = self.dbapi.get_audit_list( self.context, - filters={'state__in': (objects.audit.State.FAILED, - objects.audit.State.CANCELLED)}) + filters={ + 'state__in': + objects.audit.AuditStateTransitionManager.INACTIVE_STATES + }) self.assertEqual( - [self.audit2['id'], self.audit3['id']], + [self.audit2['id'], self.audit3['id'], self.audit4['id']], [r.id for r in res]) def test_get_audit_list_filter_state_notin(self): res = self.dbapi.get_audit_list( self.context, - filters={'state__notin': (objects.audit.State.FAILED, - objects.audit.State.CANCELLED)}) + filters={ + 'state__notin': + objects.audit.AuditStateTransitionManager.INACTIVE_STATES + }) self.assertEqual( [self.audit1['id']], diff --git a/watcher/tests/decision_engine/audit/test_audit_handlers.py b/watcher/tests/decision_engine/audit/test_audit_handlers.py index 5d0f1d826..42079c5f3 100644 --- a/watcher/tests/decision_engine/audit/test_audit_handlers.py +++ b/watcher/tests/decision_engine/audit/test_audit_handlers.py @@ -274,16 +274,18 @@ class TestContinuousAuditHandler(base.DbTestCase): audit_handler = continuous.ContinuousAuditHandler(mock.MagicMock()) mock_list.return_value = self.audits mock_jobs.return_value = mock.MagicMock() - self.audits[1].state = objects.audit.State.CANCELLED - calls = [mock.call(audit_handler.execute_audit, 'interval', - args=[mock.ANY, mock.ANY], - seconds=3600, - name='execute_audit', - next_run_time=mock.ANY)] - audit_handler.launch_audits_periodically() - m_add_job.assert_has_calls(calls) - audit_handler.update_audit_state(self.audits[1], - objects.audit.State.CANCELLED) - is_inactive = audit_handler._is_audit_inactive(self.audits[1]) + for state in [objects.audit.State.CANCELLED, + objects.audit.State.SUSPENDED]: + self.audits[1].state = state + calls = [mock.call(audit_handler.execute_audit, 'interval', + args=[mock.ANY, mock.ANY], + seconds=3600, + name='execute_audit', + next_run_time=mock.ANY)] + audit_handler.launch_audits_periodically() + m_add_job.assert_has_calls(calls) + + audit_handler.update_audit_state(self.audits[1], state) + is_inactive = audit_handler._is_audit_inactive(self.audits[1]) self.assertTrue(is_inactive) diff --git a/watcher_tempest_plugin/tests/api/admin/base.py b/watcher_tempest_plugin/tests/api/admin/base.py index bd236a768..d1fba680d 100644 --- a/watcher_tempest_plugin/tests/api/admin/base.py +++ b/watcher_tempest_plugin/tests/api/admin/base.py @@ -27,9 +27,16 @@ class BaseInfraOptimTest(test.BaseTestCase): """Base class for Infrastructure Optimization API tests.""" # States where the object is waiting for some event to perform a transition - IDLE_STATES = ('RECOMMENDED', 'FAILED', 'SUCCEEDED', 'CANCELLED') + IDLE_STATES = ('RECOMMENDED', + 'FAILED', + 'SUCCEEDED', + 'CANCELLED', + 'SUSPENDED') # States where the object can only be DELETED (end of its life-cycle) - FINISHED_STATES = ('FAILED', 'SUCCEEDED', 'CANCELLED', 'SUPERSEDED') + FINISHED_STATES = ('FAILED', + 'SUCCEEDED', + 'CANCELLED', + 'SUPERSEDED') @classmethod def setup_credentials(cls): diff --git a/watcher_tempest_plugin/tests/api/admin/test_audit.py b/watcher_tempest_plugin/tests/api/admin/test_audit.py index d764082a0..44c2f9fc1 100644 --- a/watcher_tempest_plugin/tests/api/admin/test_audit.py +++ b/watcher_tempest_plugin/tests/api/admin/test_audit.py @@ -29,7 +29,7 @@ class TestCreateUpdateDeleteAudit(base.BaseInfraOptimTest): """Tests for audit.""" audit_states = ['ONGOING', 'SUCCEEDED', 'FAILED', - 'CANCELLED', 'DELETED', 'PENDING'] + 'CANCELLED', 'DELETED', 'PENDING', 'SUSPENDED'] def assert_expected(self, expected, actual, keys=('created_at', 'updated_at', @@ -154,7 +154,7 @@ class TestShowListAudit(base.BaseInfraOptimTest): """Tests for audit.""" audit_states = ['ONGOING', 'SUCCEEDED', 'FAILED', - 'CANCELLED', 'DELETED', 'PENDING'] + 'CANCELLED', 'DELETED', 'PENDING', 'SUSPENDED'] @classmethod def resource_setup(cls): diff --git a/watcher_tempest_plugin/tests/scenario/test_execute_basic_optim.py b/watcher_tempest_plugin/tests/scenario/test_execute_basic_optim.py index 50dab9559..b4b5e7611 100644 --- a/watcher_tempest_plugin/tests/scenario/test_execute_basic_optim.py +++ b/watcher_tempest_plugin/tests/scenario/test_execute_basic_optim.py @@ -156,7 +156,7 @@ class TestExecuteBasicStrategy(base.BaseInfraOptimScenarioTest): self.fail("The audit has failed!") _, finished_audit = self.client.show_audit(audit['uuid']) - if finished_audit.get('state') in ('FAILED', 'CANCELLED'): + if finished_audit.get('state') in ('FAILED', 'CANCELLED', 'SUSPENDED'): self.fail("The audit ended in unexpected state: %s!" % finished_audit.get('state'))