Add qa spec for bp:stress-api-tracking
This patch adds the qa spec file for the stress-api-tracking blueprint. It has been expanded to include the tracking of api calls from any tempest test, not just the stress tests. Partially implements blueprint stress-api-tracking Change-Id: I744f38612c885b455af0c505696768d716d3918e
This commit is contained in:
parent
e2a02d4dea
commit
f5a6eb8763
145
specs/stress-api-tracking.rst
Normal file
145
specs/stress-api-tracking.rst
Normal file
@ -0,0 +1,145 @@
|
||||
::
|
||||
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
..
|
||||
|
||||
==================================
|
||||
Implement API Tracking
|
||||
==================================
|
||||
|
||||
Previous BP URL: https://blueprints.launchpad.net/tempest/+spec/stress-api-tracking
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
API Call success/failure statistics provide valuable information in test
|
||||
scenarios. However, manually tracking these in test cases is tedious and
|
||||
reduces the readability of tests.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
Create a decorator that can be applied to select clients that will
|
||||
automatically monitor the number of calls, successes, and failures of its public methods.
|
||||
|
||||
Create a new class called "Trace" with a single public method called "decorate" that will
|
||||
wrap any desired class's public methods with the following functionality:
|
||||
|
||||
#. When such methods return normally the call is successful
|
||||
#. When the method raises an exception
|
||||
|
||||
* If a method in the stack trace is white-listed, the call is successful.
|
||||
* If no methods in the stack trace are white-listed, the call is a failure.
|
||||
|
||||
Example expected (and configurable) whitelisted methods could include:
|
||||
|
||||
* is_resource_deleted
|
||||
* wait_for_server_termination
|
||||
|
||||
For each decorated method, maintain a dictionary that tracks:
|
||||
|
||||
#. The number of successfull calls
|
||||
#. The number of failed calls
|
||||
#. The list of observed stacktraces for the failed calls
|
||||
|
||||
|
||||
Client APIs can then be decorated by e.g.::
|
||||
|
||||
def setUpTracking(self, trace):
|
||||
"""add stats tracking decorator to services."""
|
||||
if self.manager:
|
||||
if self.manager.servers_client:
|
||||
trace.decorate(self.manager.servers_client)
|
||||
if self.manager.network_client:
|
||||
trace.decorate(self.manager.network_client)
|
||||
if self.manager.limits_client:
|
||||
trace.decorate(self.manager.limits_client)
|
||||
if self.manager.keypairs_client:
|
||||
trace.decorate(self.manager.keypairs_client)
|
||||
if self.manager.quotas_client:
|
||||
trace.decorate(self.manager.quotas_client)
|
||||
if self.manager.flavors_client:
|
||||
trace.decorate(self.manager.flavors_client)
|
||||
if self.manager.floating_ips_client:
|
||||
trace.decorate(self.manager.floating_ips_client)
|
||||
if self.manager.snapshots_client:
|
||||
trace.decorate(self.manager.snapshots_client)
|
||||
if self.manager.volumes_client:
|
||||
trace.decorate(self.manager.volumes_client)
|
||||
if self.manager.volume_types_client:
|
||||
trace.decorate(self.manager.volume_types_client)
|
||||
|
||||
Run the test as usual.
|
||||
|
||||
Finally, the Stats class provides a basic implementation to log collected statistics as well as return the
|
||||
statistics object for custom logging and other use cases.
|
||||
|
||||
At the end of a stress test run, print out the statistics gathered e.g. using LOG.info() logging::
|
||||
|
||||
2014-03-13 15:23:40.729 12273 INFO tempest.stress.driver [-] [VolumesClientJSON:get_volume] 6225 pass, 0 fail
|
||||
2014-03-13 15:23:40.729 12273 INFO tempest.stress.driver [-] [VolumesClientJSON:create_volume] 151 pass, 0 fail
|
||||
2014-03-13 15:23:40.730 12273 INFO tempest.stress.driver [-] [SnapshotsClientJSON:create_snapshot] 278 pass, 0 fail
|
||||
2014-03-13 15:23:40.730 12273 INFO tempest.stress.driver [-] [SnapshotsClientJSON:delete_snapshot] 260 pass, 0 fail
|
||||
2014-03-13 15:23:40.730 12273 INFO tempest.stress.driver [-] [VolumesClientJSON:delete_volume] 133 pass, 0 fail
|
||||
2014-03-13 15:23:40.731 12273 INFO tempest.stress.driver [-] [ServersClientJSON:detach_volume] 583 pass, 0 fail
|
||||
2014-03-13 15:23:40.731 12273 INFO tempest.stress.driver [-] [VolumesClientJSON:list_volumes] 2833 pass, 0 fail
|
||||
2014-03-13 15:23:40.731 12273 INFO tempest.stress.driver [-] [ServersClientJSON:attach_volume] 595 pass, 0 fail
|
||||
2014-03-13 15:23:40.732 12273 INFO tempest.stress.driver [-] [ServersClientJSON:get_server] 11 pass, 0 fail
|
||||
2014-03-13 15:23:40.732 12273 INFO tempest.stress.driver [-] [SnapshotsClientJSON:wait_for_snapshot_status] 278 pass, 0 fail
|
||||
2014-03-13 15:23:40.732 12273 INFO tempest.stress.driver [-] [VolumesClientJSON:wait_for_volume_status] 1607 pass, 0 fail
|
||||
2014-03-13 15:23:40.732 12273 INFO tempest.stress.driver [-] [ServersClientJSON:wait_for_server_status] 2 pass, 0 fail
|
||||
2014-03-13 15:23:40.732 12273 INFO tempest.stress.driver [-] [ServersClientJSON:create_server] 2 pass, 0 fail
|
||||
2014-03-13 15:23:40.732 12273 INFO tempest.stress.driver [-] [SnapshotsClientJSON:list_snapshots] 2833 pass, 0 fail
|
||||
2014-03-13 15:23:40.733 12273 INFO tempest.stress.driver [-] [SnapshotsClientJSON:get_snapshot] 550 pass, 0 fail
|
||||
|
||||
|
||||
New classes could be located in module:
|
||||
common/tracking.py
|
||||
|
||||
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Ramy Asselin <ramy.asselin@hp.com>
|
||||
|
||||
Walter A. Boring IV <walter.boring@hp.com>
|
||||
|
||||
Milestones
|
||||
----------
|
||||
|
||||
Target Milestone for completion:
|
||||
Juno-2
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
[walter-boring] API Statistics Wrapper: DONE
|
||||
|
||||
[ramy-asselin] Stabilize API Statistics Wrapper: DONE
|
||||
|
||||
[walter-boring] Cinder Stress Test: DONE
|
||||
|
||||
[ramy-asselin] Stabilize Cinder Stress Tests: DONE
|
||||
|
||||
[ramy-asselin] Cinder CHO Test: DONE
|
||||
|
||||
[ramy-asselin] Cinder CHO Stabilize: DONE
|
||||
|
||||
[ramy-asselin] DOCUMENTATION: TODO
|
||||
|
||||
[ramy-asselin] Test Cases: TODO
|
||||
|
||||
[ramy-asselin] Code Cleanup: TODO
|
||||
|
||||
Current Solution
|
||||
----------------
|
||||
API Tracking: https://review.openstack.org/#/c/90449/
|
||||
|
Loading…
x
Reference in New Issue
Block a user