Commit Graph

2056 Commits

Author SHA1 Message Date
licanwei
a4d978b893 Define a new InstanceNotMapped exception
In get_node_by_instance_uuid, an exception ComputeNodeNotFound
will be thrown if can't find a node through instance uuid.
But the exception information replaces the node name with
instance uuid, which is misleading, so we define a new exception.

Closes-Bug: #1832156

Change-Id: Ic6c44ae44da7c3b9a1c20e9b24a036063af266ba
2019-06-14 10:51:20 +08:00
Zuul
6495e42a60 Merge "Optimize NovaHelper.get_compute_node_by_hostname" 2019-06-14 02:31:13 +00:00
Zuul
e4f80b5461 Merge "Optimize hypervisor API calls" 2019-06-14 02:28:51 +00:00
Zuul
2a2f7902bd Merge "Improve DevStack documentation to support metrics" 2019-06-14 02:28:48 +00:00
Zuul
6502435dc5 Merge "Remove dead code" 2019-06-14 02:28:47 +00:00
Zuul
5f126cffe0 Merge "Add Placement helper" 2019-06-14 02:21:44 +00:00
licanwei
7281f6184f Remove dead code
get_node_by_instance_uuid will never return None,
so the OR condition is dead code.

Change-Id: I26c553e1067a3cbeac6c0afe1c4bfdee4d939055
2019-06-13 17:31:49 +08:00
chenming
731d4bfdf2 update contraints url
http://lists.openstack.org/pipermail/openstack-discuss/2019-May/006478.html

Change-Id: I1929fc98cd728eb0dae66762481880e23cd793c7
2019-06-12 19:11:53 +00:00
licanwei
b57feba5e8 Add Placement helper
This patch added Placement to Watcher
We plan to improve the data model and strategies in
the future specs.

Change-Id: I7141459eef66557cd5d525b5887bd2a381cdac3f
Implements: blueprint support-placement-api
2019-06-12 11:11:13 +08:00
Zuul
46a36d1ad7 Merge "Fix string formatting" 2019-06-11 09:58:38 +00:00
licanwei
2d4bc095db Fix string formatting
Change-Id: Iaf995355ec542db076683374c6128656bee2ee6f
2019-06-10 17:16:51 +08:00
Zuul
8000dd650f Merge "add strategy tempest job" 2019-06-06 09:11:19 +00:00
licanwei
c3e0e41fbf add strategy tempest job
Change-Id: I84a68f92fa34cf19487323f2afb89d379b8d80f5
2019-06-06 07:18:53 +00:00
licanwei
7f37f7b92a Remove apidoc
Now there are some errors when running apidoc,
actually we don't need apidoc, so remove it.
Closes-Bug: #1831515

Change-Id: I3b91a2c05ed62ae7bbd30a29e9db51d0e021410f
2019-06-04 11:34:07 +08:00
Matt Riedemann
374fd2791f Optimize NovaHelper.get_compute_node_by_hostname
The get_compute_node_by_hostname method is given a
compute service hostname and then does two queries to
find the matching hypervisor (compute node) with details:

1. List hypervisors with details and find the one that
   matches the given compute service hostname.

2. Using that node, search for hypervisors with the
   matching hypervisor_hostname.

There are two issues here:

1. The first query is inefficient in that it has to list
   all hypervisors in the deployment to try and match the
   one with the compute service hostname client side.

2. The second query is a fuzzy match on the server side [1]
   so even though we have matched on the node we want,
   get_compute_node_by_name can still return more than
   one hypervisor which will result in the helper method
   raising ComputeNodeNotFound. Consider having compute
   hosts with names compute1, compute10, compute11, compute100,
   and so on. The fuzzy match on compute1 would return all of
   those hypervisors.

For non-ironic nodes in nova, the compute service host and
hypervisor should be 1:1, meaning the hypervisor.service['host']
should be the same as hypervisor.hypervisor_hostname. Knowing
this, we can simplify the code to search just on the given
compute service hostname and if we get more than one result, it
is because of the fuzzy match and we can then do our client-side
filtering on the compute service hostname.

[1] https://github.com/openstack/nova/blob/d4f58f5eb/nova/db/sqlalchemy/api.py#L676

Change-Id: I84f387982f665d7cc11bffe8ec390cc7e7ed5278
2019-06-03 12:18:54 -04:00
Matt Riedemann
3f76f9cfdb Optimize hypervisor API calls
The nova CDM builder code and notification handling
code had some inefficiencies when it came to looking
up a hypevisor to get details. The general pattern
used before was:

1. get the minimal hypervisor information by hypervisor_hostname
2. make another query to get the hypervisor details by id

In the notifications case, it was actually three calls because
the first is listing hyprvisors to filter client-side by service
host.

This change collapses 1 and 2 above into a single API call
to get the hypervisor by hypervisor_hostname with details
which will include the service (compute) host information
which is what get_compute_node_by_id() was being used for.
Now that nothing is using get_compute_node_by_id it is removed.

There is more work we could do in get_compute_node_by_hostname
if the compute API allowed filtering hypervisors by service
host so a TODO is left for that.

One final thing: the TODO in get_compute_node_by_hostname about
there being more than one hypervisor per compute service host
for vmware vcenter is not accurate - nova's vcenter driver
hasn't supported a host:node 1:M topology like that since the
Liberty release [1]. The only in-tree driver in nova that supports
1:M is the ironic baremetal driver, so the comment is updated.

[1] Ifc17c5049e3ed29c8dd130339207907b00433960

Depends-On: https://review.opendev.org/661785/
Change-Id: I5e0e88d7b2dd1a69117ab03e0e66851c687606da
2019-06-03 12:18:54 -04:00
zhufl
9c1b83e610 Add missing ws separator between words
This is to add missing ws separator between words.

Change-Id: Iab23ce2ad081fef18978579594886950b8e2cb01
2019-05-31 14:51:30 +08:00
Zuul
5f94eef027 Merge "Group instance methods together in nova_helper" 2019-05-31 02:58:11 +00:00
Zuul
788f0055c1 Merge "Improve exceptions and logging in ds manager" 2019-05-31 02:57:33 +00:00
Zuul
88fb097539 Merge "Audit API supports new force option" 2019-05-29 10:01:04 +00:00
Zuul
ee3cbe46ef Merge "Fix test_metric_file_override metric from backend" 2019-05-29 08:13:31 +00:00
Dantali0n
a00daf9f26 Group instance methods together in nova_helper
Some of the methods for retrieving data about instances was placed
at the bottom of nova_helper instead of being close to the other
instance based methods.

Change-Id: I68475883529610e514aa82f1881105ab0cf24ec3
2019-05-29 09:02:21 +02:00
Zuul
855bfecf2f Merge "formal datasource interface implementation" 2019-05-28 12:15:06 +00:00
Zuul
5a3d1b741d Merge "Add force field to api-ref" 2019-05-28 02:10:42 +00:00
Zuul
15316a57db Merge "Optimize NovaClusterDataModelCollector.add_instance_node" 2019-05-27 03:02:53 +00:00
Zuul
38131a37b2 Merge "Remove 2.56 version compatibility check" 2019-05-27 03:01:48 +00:00
Zuul
59306b9a47 Merge "Require nova_client.api_version >= 2.56" 2019-05-27 03:01:47 +00:00
licanwei
2afd0dfcf5 Audit API supports new force option
Depends-on:Ia08694d2fb76907ea14e64116af2e722fe930063

Change-Id: Ib2d221ea9c994dea396c54cc8d2d32237025a1d4
Implements: blueprint add-force-field-to-audit
2019-05-27 02:08:33 +00:00
Matt Riedemann
fdea38fb06 Optimize NovaClusterDataModelCollector.add_instance_node
This does two things:

1. Rather than make an API call per server on the host,
   get all of the servers in a single API call by
   filtering on the host. The os-hypervisors API results
   to use make this require a bit of refactoring since
   get_compute_node_by_name does not have the service
   entry in it and get_compute_node_by_id does not have the
   servers entry in it. A TODO is added to clean that up
   with a single call to os-hypervisors once we have the
   support in python-novaclient.

2. Pulls get_node_by_uuid() out of the loop.

A test is added for the nova_helper get_instance_list method
since one did not exist before.

The fake compute node mocks in test_nova_cdmc_execute are
also cleaned up since, as noted above, get_compute_node_by_name
and get_compute_node_by_id don't both return all the details.

Change-Id: Ifd9f83c2f399d4c1765b0c520f4d5a62ad0f5fbd
2019-05-27 02:31:32 +03:00
Zuul
3b9364d4c7 Merge "Add force field to Audit" 2019-05-25 07:48:20 +00:00
Zuul
ba92791117 Merge "support-keystoneclient-option" 2019-05-25 07:01:10 +00:00
Dantali0n
5c492ea862 Fix test_metric_file_override metric from backend
Fix the list of required metrics from a datasource when testing the
existence of this metric in the metric map.

Change-Id: I19b7408a98893bc942c32edb09f1b3798ec8dc79
2019-05-24 15:32:55 +02:00
licanwei
62d181d925 Add force field to Audit
Partially Implements: blueprint add-force-field-to-audit

Change-Id: Ia08694d2fb76907ea14e64116af2e722fe930063
2019-05-24 00:05:13 -07:00
Matt Riedemann
a09cb3fa6c Remove 2.56 version compatibility check
With change Id34938c7bb8a5ca934d997e52cac3b365414c006
we require nova API version 2.56 or greater so we can
remove the compatibliity check in the
watcher_non_live_migrate_instance method.

The _check_nova_api_version method is left in place
for future compability checks.

Change-Id: I69040fbc13b03d90b9687c0d11104d4a5bae51d3
2019-05-23 16:01:44 -04:00
Matt Riedemann
7489126d83 Require nova_client.api_version >= 2.56
The [nova_client]/api_version defaults to 2.56 since
change Idd6ebc94f81ad5d65256c80885f2addc1aaeaae1. There
is compatibility code for that change but if 2.56 is
not available watcher_non_live_migrate_instance will
still fail if a destination host is used.

Since 2.56 has been available since the Queens version of
nova it should be reasonable to require at least that
version of nova is running for using Watcher.

This adds code which enforces the minimum version along
with a release note and "watcher-status upgrade check"
check method.

Note that it's kind of weird for watcher to have a config
option like nova_client.api_version since compute API
microversions are per API request even though novaclient
is constructed with the single configured version. It should
really be something the client (watcher in this case) determines
using version discovery and gracefully enables features if
the required nova API version is available, but that's a bigger
change.

Change-Id: Id34938c7bb8a5ca934d997e52cac3b365414c006
2019-05-23 15:49:19 -04:00
Zuul
1e6ce53273 Merge "Handle no nova CDM in notification code" 2019-05-22 02:57:56 +00:00
Dantali0n
e76c20d1c5 Improve exceptions and logging in ds manager
MetricNotAvailable and NoDatasourceAvailable allow to differentiate
between having no datasources configured and a required metric being
unavailable from the datasource. Both exceptions have comments so
that the use case is clear.

The input validation of the get_backend method in the datasource
manager is improved.

Additional logging information allows to identify which metric caused
the available datasource to be discarded.

Tests are updated to validate the correct functionality of the new
exceptions.

Change-Id: I512976cce2401dbcd249d42686b78843e111a0e7
2019-05-21 20:11:20 +02:00
Dantali0n
5a35b30763 Improve DevStack documentation to support metrics
Support DevStack setups with datasources configured starting with
Gnocchi.

Change-Id: Ibcf0909ccce2dbb646c23a179ca763b6c3e62633
2019-05-21 15:36:46 +02:00
Dantali0n
84cb589aa9 formal datasource interface implementation
Changes to the baseclass for datasources so strategies can be made
compatible with every datasource. Baseclass methods clearly describe
expected values and types for both parameters and for method returns.
query_retry has been added as base method since every current
datasource implements it.

Ceilometer is updated to work with the new baseclass. Several methods
which are not part of the baseclass and are not used by any strategies
are removed. The signature of these methods would have to be changed
to fit with the new base class while it would limit strategies to
only work with Ceilometer.

Gnocchi is updated to work with the new baseclass.

Gnocchi and Ceilometer will perform a transformation for the
host_airflow metric as it retrieves 1/10 th of the actual CFM

Monasca is updated to work with the new baseclass.

FakeMetrics for Gnocchi, Monasca and Ceilometer are updated to work
with the new method signatures of the baseclass.

FakeClusterAndMetrics for Ceilometer and Gnocchi are updated to work
with the new method signatures of the baseclass.

The strategies workload_balance, vm_workload_consolidation,
workload_stabilization, basic_consolidation, noisy_neighbour,
outlet_temp_control and uniform_airflow are updated to work with the
new datasource baseclass.

This patch will break compatibility with plugin strategies and
datasources due to the changes in signatures.

Depends-on: I7aa52a9b82f4aa849f2378d4d1c03453e45c0c78
Change-Id: Ie30ca3dbf01062cbb20d3be5d514ec6b5155cd7c
Implements: blueprint formal-datasource-interface
2019-05-21 11:18:08 +02:00
Zuul
f049815cf4 Merge "Enhance the collector_plugins option help text" 2019-05-21 09:10:12 +00:00
Zuul
7b1a7f0fe4 Merge "Allow using file to override metric map" 2019-05-21 09:04:40 +00:00
Zuul
3af43be7da Merge "Improve Gnocchi and Monasca datasource tests" 2019-05-21 09:04:39 +00:00
Zuul
f731aa1748 Merge "Fix Stein version in watcher-status docs" 2019-05-21 07:17:33 +00:00
Zuul
7d4c587014 Merge "Add doc/requirements.txt to venv tox target" 2019-05-21 07:17:32 +00:00
Zuul
124a942301 Merge "Remove dead code from NovaClusterDataModelCollector" 2019-05-20 13:00:16 +00:00
Dantali0n
dea32c5e1f Improve Gnocchi and Monasca datasource tests
As a follow up to the recent test improvements for Ceilometer this
patch ensures that the same test pattern is used for Gnocchi and
Monasca as well. This ensures that the mocked functions will be called
with matching signatures.

Change-Id: Ic14a4c087f3961a4b4f373e2e3d792aba71868f6
2019-05-20 14:41:24 +02:00
Sumit Jamgade
b620081714 Allow using file to override metric map
Override the metric map of each datasource as soon as it is created by
the manager. This override comes from a file whose path is provided by
a setting in config file.

Loading at creation time allows the correct datasource be used when
get_backend is called, this allows loading a datasource whose metric
names get updated outside the watcher's codebase.

The function 'load_metric_map' returns empty-dict in any error case.
Also in case the file is empty where safe_load is unable finds any
yaml documents, it will return None. [1]

Some minor refactoring in the test_manager file for readability and
added tests for file load and metric override.

1 - https://pyyaml.org/wiki/PyYAMLDocumentation

Change-Id: I1df16245f4c7dfd34066f3ab0553cd67154faa58
Implements: blueprint file-based-metric-map
2019-05-20 10:28:00 +02:00
Zuul
7456975445 Merge "Fix typo in ceilometer datasource" 2019-05-20 07:44:55 +00:00
chenke
f131825690 support-keystoneclient-option
Some users may want to create keystoneclient by specifying the
type of endpoint and region name, so we need to supply the option
for user to choose.

Implements: blueprint support-keystoneclient-option

Change-Id: I49b33a69ec99d2a91568ce27ef89dc80b75e7091
2019-05-18 18:36:19 +00:00
Zuul
1b328f5148 Merge "Update migration notification" 2019-05-18 08:30:15 +00:00