Adding scope for Watcher data model

Change-Id: I2586999eb2fca872765e0aa36b7d8641a28ba083
Implements: blueprint scope-for-watcher-datamodel
This commit is contained in:
licanwei 2019-03-07 17:14:31 +08:00
parent f3b4429951
commit dfee900122

View File

@ -0,0 +1,196 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
===================================
Adding scope for Watcher data model
===================================
https://blueprints.launchpad.net/watcher/+spec/scope-for-watcher-datamodel
Problem description
===================
For a large cloud infrastructure, such as CERN, there are more than
10k servers, retrieving data from Nova to build Watcher compute
data model may take a long time. If the audit is just for a subset
of all nodes, it's better to get the data from the nodes that audit needs.
Use Cases
----------
As a Watcher user, I want that Watcher doesn't build compute data model before
creating audit.
As a Watcher user, I want that Watcher build compute data model according to
the scope of audit.
Proposed change
===============
As now, Watcher builds compute data model when starting the Decision Engine.
And there is a periodic task to rebuild the data model.
To avoid building the data model before creating audit, we need to check a
flag before building the data model.
for example:
.. code-block:: python
def execute(self):
"""Build the compute cluster data model"""
if self._audit_scope_handler is None:
LOG.debug("No audit, Don't Build compute data model")
return
builder = ModelBuilder(self.osc)
return builder.execute(self._data_model_scope)
Audit scope is a optional parameter when creating audit. If user don't
set a scope ,the default scope is empty, it means this audit used for
all nodes.
An example of the audit scope:
.. code-block:: python
{"compute":
[{"host_aggregates": [
{"id": 1},
{"id": 2},
{"id": 3}]},
{"availability_zones": [
{"name": "AZ1"},
{"name": "AZ2"}]},
}
When building the data model according to audit scope, there are some cases
need to be considered:
no data model, audit scope is empty
-----------------------------------
* It's the first time to build the data model. Because audit scope is empty,
the data model should include all the nodes.
no data model, audit scope is not empty
---------------------------------------
* It's the first time to build the data model according to audit scope.
Existing data model, new audit scope is empty
---------------------------------------------
* If the data model has included all nodes, it will not be rebuilt.
* If the data model doesn't include all nodes, it will be rebuilt.
existing data model, new audit scope is not empty
-------------------------------------------------
* If the nodes specified in scope are already included in the data model,
it will not be rebuilt.
* If the nodes specified in the scope aren't included in the data model,
it will be rebuilt.
Alternatives
------------
None
Data model impact
-----------------
None
REST API impact
---------------
None
Security impact
---------------
None
Notifications impact
--------------------
None
Other end user impact
---------------------
None
Performance Impact
------------------
This will reduce the impact on system performance, especially for
large cloud infrastructure.
Other deployer impact
---------------------
None
Developer impact
----------------
None
Implementation
==============
Assignee(s)
-----------
Primary assignee:
<licanwei>
Work Items
----------
* Add a check to the audit to create before building the data model.
* Add the model scope to record the audit scope in the ModelBuilder class.
* Update the data model according to the audit scope.
Dependencies
============
None
Testing
=======
Add unit tests.
Documentation Impact
====================
Update Watcher developer documents.
References
==========
None
History
=======
.. list-table:: Revisions
:header-rows: 1
* - Release Name
- Description
* - Stein
- Introduced