Fix some typos by toolkit typo
There commands: $pip install topy $cd rally $topy -a rally Change-Id: I40ac3b34b97743edf5edc0a17b9553bb2f3476e2
This commit is contained in:
@@ -13,7 +13,7 @@ well as test results.
|
|||||||
Problem description
|
Problem description
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
In case of errors it is quite hard to debug what happend.
|
In case of errors it is quite hard to debug what happened.
|
||||||
|
|
||||||
|
|
||||||
Possible solution
|
Possible solution
|
||||||
|
|||||||
@@ -114,6 +114,6 @@ Let’s run it!
|
|||||||
.. image:: ../images/Report-Abort-on-SLA-task-2.png
|
.. image:: ../images/Report-Abort-on-SLA-task-2.png
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
This time load stopped after 1410 iterations versus 2495 which is much better. The interesting thing on this chart is that first occurence of “> 10 second” authentication happened on 950 iteration. The reasonable question: “Why Rally run 500 more authentication requests then?”. This appears from the math: During the execution of **bad** authentication (10 seconds) Rally performed about 50 request/sec * 10 sec = 500 new requests as a result we run 1400 iterations instead of 950.
|
This time load stopped after 1410 iterations versus 2495 which is much better. The interesting thing on this chart is that first occurrence of “> 10 second” authentication happened on 950 iteration. The reasonable question: “Why Rally run 500 more authentication requests then?”. This appears from the math: During the execution of **bad** authentication (10 seconds) Rally performed about 50 request/sec * 10 sec = 500 new requests as a result we run 1400 iterations instead of 950.
|
||||||
|
|
||||||
(based on: http://boris-42.me/rally-tricks-stop-load-before-your-openstack-goes-wrong/)
|
(based on: http://boris-42.me/rally-tricks-stop-load-before-your-openstack-goes-wrong/)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ TestLodge etc, which objective is to manage, organize and track all testing
|
|||||||
efforts.
|
efforts.
|
||||||
|
|
||||||
Most of the systems provide an API for importing test data. The systems also
|
Most of the systems provide an API for importing test data. The systems also
|
||||||
posess data model somewhat similar to Rally's one.
|
possess data model somewhat similar to Rally's one.
|
||||||
It usually includes (among others) models for project, test suite test case,
|
It usually includes (among others) models for project, test suite test case,
|
||||||
test plan and test execution results.
|
test plan and test execution results.
|
||||||
|
|
||||||
|
|||||||
@@ -557,7 +557,7 @@ def run(argv, categories):
|
|||||||
if logging.is_debug():
|
if logging.is_debug():
|
||||||
LOG.exception(e)
|
LOG.exception(e)
|
||||||
print(e)
|
print(e)
|
||||||
print("Looks like Rally can't connect to it's DB.")
|
print("Looks like Rally can't connect to its DB.")
|
||||||
print("Make a sure that connection string in rally.conf is proper:")
|
print("Make a sure that connection string in rally.conf is proper:")
|
||||||
print(CONF.database.connection)
|
print(CONF.database.connection)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class BigJSONEncodedDict(JSONEncodedDict):
|
|||||||
"""Represents an immutable structure as a json-encoded string.
|
"""Represents an immutable structure as a json-encoded string.
|
||||||
|
|
||||||
MySql can store only 64kb in Text type, and for example in psql or
|
MySql can store only 64kb in Text type, and for example in psql or
|
||||||
sqlite we are able to store more then 1GB. In some cases, like storing
|
sqlite we are able to store more than 1GB. In some cases, like storing
|
||||||
results of task 64kb is not enough. So this type uses for MySql
|
results of task 64kb is not enough. So this type uses for MySql
|
||||||
LONGTEXT that allows us to store 4GiB.
|
LONGTEXT that allows us to store 4GiB.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ def from_func(plugin_baseclass=None):
|
|||||||
assert my_plugin_like_func.get_all() == []
|
assert my_plugin_like_func.get_all() == []
|
||||||
|
|
||||||
|
|
||||||
As a result adding plugin behavior for benchmark scenarios fully unifies
|
As a result, adding plugin behavior for benchmark scenarios fully unifies
|
||||||
work with benchmark scenarios and other kinds of plugins.
|
work with benchmark scenarios and other kinds of plugins.
|
||||||
|
|
||||||
:param plugin_baseclass: if specified, subclass of this class will be used
|
:param plugin_baseclass: if specified, subclass of this class will be used
|
||||||
@@ -166,7 +166,7 @@ class Plugin(meta.MetaMixin, info.InfoMixin):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, name, namespace=None):
|
def get(cls, name, namespace=None):
|
||||||
"""Return plugin by it's name from specified namespace.
|
"""Return plugin by its name from specified namespace.
|
||||||
|
|
||||||
This method iterates over all subclasses of cls and returns plugin
|
This method iterates over all subclasses of cls and returns plugin
|
||||||
by name from specified namespace.
|
by name from specified namespace.
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class ManilaShareNetworks(context.Context):
|
|||||||
# ]
|
# ]
|
||||||
# Also, make sure that all 'existing users' in appropriate
|
# Also, make sure that all 'existing users' in appropriate
|
||||||
# registered deployment have share networks if its usage is
|
# registered deployment have share networks if its usage is
|
||||||
# enbaled, else Rally will randomly take users that does not
|
# enabled, else Rally will randomly take users that does not
|
||||||
# satisfy criteria.
|
# satisfy criteria.
|
||||||
"share_networks": {"type": "object"},
|
"share_networks": {"type": "object"},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ class CeilometerScenario(scenario.OpenStackScenario):
|
|||||||
now - datetime.timedelta(seconds=(interval * i))
|
now - datetime.timedelta(seconds=(interval * i))
|
||||||
).isoformat()
|
).isoformat()
|
||||||
if metadata_list:
|
if metadata_list:
|
||||||
# NOTE(idegtiarov): Adding more then one template of metadata
|
# NOTE(idegtiarov): Adding more than one template of metadata
|
||||||
# required it's proportional distribution among whole samples.
|
# required it's proportional distribution among whole samples.
|
||||||
sample_item["resource_metadata"] = metadata_list[
|
sample_item["resource_metadata"] = metadata_list[
|
||||||
i * len_meta // count
|
i * len_meta // count
|
||||||
|
|||||||
@@ -311,7 +311,7 @@ class CinderVolumes(cinder_utils.CinderScenario,
|
|||||||
|
|
||||||
"""Create volume, snapshot and attach/detach volume.
|
"""Create volume, snapshot and attach/detach volume.
|
||||||
|
|
||||||
This scenario is based off of the standalone qaStressTest.py
|
This scenario is based on the standalone qaStressTest.py
|
||||||
(https://github.com/WaltHP/cinder-stress).
|
(https://github.com/WaltHP/cinder-stress).
|
||||||
|
|
||||||
:param volume_type: Whether or not to specify volume type when creating
|
:param volume_type: Whether or not to specify volume type when creating
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class NeutronScenario(scenario.OpenStackScenario):
|
|||||||
|
|
||||||
:param resource: A neutron resource object dict describing the
|
:param resource: A neutron resource object dict describing the
|
||||||
resource that the name is being set for. In
|
resource that the name is being set for. In
|
||||||
particular, this must have have a single key
|
particular, this must have a single key
|
||||||
that is the resource type, and a single value
|
that is the resource type, and a single value
|
||||||
that is itself a dict including the "id" key.
|
that is itself a dict including the "id" key.
|
||||||
:param kwargs: The keyword arg dict that the user supplied,
|
:param kwargs: The keyword arg dict that the user supplied,
|
||||||
|
|||||||
@@ -326,7 +326,7 @@ class NovaServers(utils.NovaScenario,
|
|||||||
|
|
||||||
A rescue will be issued on the given server upon which time
|
A rescue will be issued on the given server upon which time
|
||||||
this method will wait for the server to become 'RESCUE'.
|
this method will wait for the server to become 'RESCUE'.
|
||||||
Once the server is RESCUE a unrescue will be issued and
|
Once the server is RESCUE an unrescue will be issued and
|
||||||
this method will wait for the server to become 'ACTIVE'
|
this method will wait for the server to become 'ACTIVE'
|
||||||
again.
|
again.
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class SaharaClusters(utils.SaharaScenario):
|
|||||||
:param floating_ip_pool: floating ip pool name from which Floating
|
:param floating_ip_pool: floating ip pool name from which Floating
|
||||||
IPs will be allocated. Sahara will determine
|
IPs will be allocated. Sahara will determine
|
||||||
automatically how to treat this depending on
|
automatically how to treat this depending on
|
||||||
it's own configurations. Defaults to None
|
its own configurations. Defaults to None
|
||||||
because in some cases Sahara may work w/o
|
because in some cases Sahara may work w/o
|
||||||
Floating IPs.
|
Floating IPs.
|
||||||
:param volumes_per_node: number of Cinder volumes that will be
|
:param volumes_per_node: number of Cinder volumes that will be
|
||||||
@@ -135,7 +135,7 @@ class SaharaClusters(utils.SaharaScenario):
|
|||||||
:param floating_ip_pool: floating ip pool name from which Floating
|
:param floating_ip_pool: floating ip pool name from which Floating
|
||||||
IPs will be allocated. Sahara will determine
|
IPs will be allocated. Sahara will determine
|
||||||
automatically how to treat this depending on
|
automatically how to treat this depending on
|
||||||
it's own configurations. Defaults to None
|
its own configurations. Defaults to None
|
||||||
because in some cases Sahara may work w/o
|
because in some cases Sahara may work w/o
|
||||||
Floating IPs.
|
Floating IPs.
|
||||||
:param neutron_net_id: id of a Neutron network that will be used
|
:param neutron_net_id: id of a Neutron network that will be used
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ class VMTasks(vm_utils.VMScenario):
|
|||||||
"interpreter": ["NAME=Earth", "/bin/sh"]
|
"interpreter": ["NAME=Earth", "/bin/sh"]
|
||||||
}
|
}
|
||||||
|
|
||||||
# Run an inline script sending it to a uploaded remote
|
# Run an inline script sending it to an uploaded remote
|
||||||
# interpreter
|
# interpreter
|
||||||
command = {
|
command = {
|
||||||
"script_inline": "echo \"Hello, ${NAME:-World}\"",
|
"script_inline": "echo \"Hello, ${NAME:-World}\"",
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class ActionTimer(utils.Timer):
|
|||||||
"""A class to measure the duration of atomic operations
|
"""A class to measure the duration of atomic operations
|
||||||
|
|
||||||
This would simplify the way measure atomic operation duration
|
This would simplify the way measure atomic operation duration
|
||||||
in certain cases. For example if we want to get the duration
|
in certain cases. For example, if we want to get the duration
|
||||||
for each operation which runs in an iteration
|
for each operation which runs in an iteration
|
||||||
for i in range(repetitions):
|
for i in range(repetitions):
|
||||||
with atomic.ActionTimer(instance_of_action_timer, "name_of_action"):
|
with atomic.ActionTimer(instance_of_action_timer, "name_of_action"):
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class Chart(object):
|
|||||||
"""Add iteration data.
|
"""Add iteration data.
|
||||||
|
|
||||||
This method must be called for each iteration.
|
This method must be called for each iteration.
|
||||||
If overriden, this method must use streaming data processing,
|
If overridden, this method must use streaming data processing,
|
||||||
so chart instance could process unlimited number of iterations,
|
so chart instance could process unlimited number of iterations,
|
||||||
with low memory usage.
|
with low memory usage.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -308,7 +308,7 @@ class ActionBuilder(object):
|
|||||||
|
|
||||||
[{"action": times}, {"action": times}...]
|
[{"action": times}, {"action": times}...]
|
||||||
|
|
||||||
Here 'action' is a string which indicates a action to perform and
|
Here 'action' is a string which indicates an action to perform and
|
||||||
'times' is a non-zero positive integer which specifies how many
|
'times' is a non-zero positive integer which specifies how many
|
||||||
times to run the action in sequence.
|
times to run the action in sequence.
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ def number(config, clients, deployment, param_name, minval=None, maxval=None,
|
|||||||
:param param_name: Name of parameter to validate
|
:param param_name: Name of parameter to validate
|
||||||
:param minval: Lower endpoint of valid interval
|
:param minval: Lower endpoint of valid interval
|
||||||
:param maxval: Upper endpoint of valid interval
|
:param maxval: Upper endpoint of valid interval
|
||||||
:param nullable: Allow parameter not specified, or paramater=None
|
:param nullable: Allow parameter not specified, or parameter=None
|
||||||
:param integer_only: Only accept integers
|
:param integer_only: Only accept integers
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|||||||
@@ -512,7 +512,7 @@
|
|||||||
<b ng-show="ov_srt=='runner' && ov_dir">▾</b>
|
<b ng-show="ov_srt=='runner' && ov_dir">▾</b>
|
||||||
</span>
|
</span>
|
||||||
<th class="sortable"
|
<th class="sortable"
|
||||||
title="Number of errors occured"
|
title="Number of errors occurred"
|
||||||
ng-click="ov_srt='errors.length'; ov_dir=!ov_dir">
|
ng-click="ov_srt='errors.length'; ov_dir=!ov_dir">
|
||||||
Errors
|
Errors
|
||||||
<span class="arrow">
|
<span class="arrow">
|
||||||
|
|||||||
Reference in New Issue
Block a user