From c2f887d069b6b8d6787b9549d355354a40dc4bc4 Mon Sep 17 00:00:00 2001 From: Alexander Chadin Date: Thu, 12 May 2016 16:11:13 +0300 Subject: [PATCH] Add Watcher Continuosly Optimization spec This specification is designed to implement continuous type for Watcher Audit. Change-Id: Ie2944698a228f45d7fb0ad68aeaf14fe3ef9161b Implements: blueprint continuously-optimization --- .../approved/continuously-optimization.rst | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 specs/newton/approved/continuously-optimization.rst diff --git a/specs/newton/approved/continuously-optimization.rst b/specs/newton/approved/continuously-optimization.rst new file mode 100644 index 0000000..d505e51 --- /dev/null +++ b/specs/newton/approved/continuously-optimization.rst @@ -0,0 +1,154 @@ +============================================= +Watcher Continuous Optimization +============================================= + +https://blueprints.launchpad.net/watcher/+spec/continuously-optimization + + +Problem description +=================== + +`Cluster`_ can be optimized by different `Strategies`_ only when they have +been triggered by `Administrator`_. Launching a recommended `Action Plan`_ +manually is not always suitable since state of cluster is constantly changing. +It would be better to have two ways of launching audit: either by triggering +it manually or by launching it periodically. +We propose to include continuous optimization as continuous type of +audit object in Watcher Project. + +The main purpose of this change is to design and implement active mode of +Watcher's audit. + +This specification relates to blueprint: +https://blueprints.launchpad.net/watcher/+spec/continuously-optimization + +Use Cases +--------- + +As the Administrator I want to create `Audit`_ with CONTINUOUS type. +I specify periodic time with --period parameter (in seconds) to run audit +every 600 seconds. Running audit will create action plan every 600 seconds. + +Project Priority +---------------- + +Not relevant because Watcher is not in the big tent so far. + + +Proposed change +=============== + +To perform audits with continuous type we can use periodic_task decorator +from oslo_service module on 'launch_audits_periodically' method. This method +gets continuous type audits with (PENDING, ONGOING) states. If some +of them are not in audits_to_launch list we add them to that list and to the +ThreadPoolExecutor. Once audit is added to thread, this thread is going to +sleep for PERIOD seconds. After this audit will be executed and UUID of audit +will be removed from audits_to_launch list. +To keep track of the triggered audit, notification has to be pushed on +the message bus every time the audit is re-triggered. +When a new action plan is proposed, Watcher should cancel all the previously +generated action plans (and actions) with same Audit Template become obsolete +and therefore their state should be changed to CANCELLED. + +Alternatives +------------ + +* To use Congress to automatically trigger audits when some conditions are met. +* To use a cronjob which triggers new audit regularly via python-watcherclient. + +Data model impact +----------------- + +There must be new field in Audit model: integer 'period'. 'period' field has +3600 by default. + +REST API impact +--------------- + +period's field has to be added as Audit attribute. + +Security impact +--------------- + +None expected. + +Notifications impact +-------------------- + +None expected. + +Other end user impact +--------------------- + +Support for 'period' field must be added to the python-watcherclient and +to the watcher-dashboard. + +Performance Impact +------------------ + +No specific performance impact is expected. + +Other deployer impact +--------------------- + +No specific deployer impact is envisaged. + +Developer impact +---------------- + +This will not impact other developers working on OpenStack. + +Implementation +============== + +Assignee(s) +----------- + +Primary assignee: + Alexander Chadin +Other contributors: + Vladimir Ostroverkhov + +Work Items +---------- + +* Add support for periodic_task decorator. +* Implement PeriodicAuditHandler that manages DefaultAuditHandler. +* Implement method 'execute' that runs audits periodically. +* Adapt API to support period field. +* Make some changes to python-watcherclient to add support for period argument. +* Add changes to watcher-dashboard to support CONTINUOUS type. +* Implement appropriate unit tests to test various scenarios. + +Dependencies +============ + +There are no dependencies. + +Testing +======= + +Appropriate unit tests will be adapted to new changes. + +Documentation Impact +==================== + +It will be necessary to add new content relating to this change. + +References +========== + +No references. + +History +======= + +No history. + + +.. _Strategies: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#strategy +.. _Administrator: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#administrator +.. _Audit: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#audit +.. _Action Plan: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#action-plan +.. _Cluster: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#cluster \ No newline at end of file