Modify sla failure rate

Parameter "max_failure_percent" of sla section becomes depricated.
Now use
...
  sla:
    failure_rate:
      min: ...
      max: ...

Change-Id: I5e1e4f280084263a483008ba3922be75eab5b6e8
This commit is contained in:
Olga Kopylova 2014-10-24 11:36:52 -04:00
parent 17cece806f
commit 6a890f6b07
6 changed files with 259 additions and 91 deletions

View File

@ -10,7 +10,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
DesignateBasic.create_and_delete_records:
-
@ -25,7 +26,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
DesignateBasic.create_and_list_domains:
-
@ -38,7 +40,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
DesignateBasic.create_and_list_records:
-
@ -53,7 +56,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
DesignateBasic.list_domains:
-
@ -66,4 +70,5 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0

View File

@ -34,7 +34,8 @@
security_group: -1
security_group_rule: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_list_networks:
-
@ -52,7 +53,8 @@
neutron:
network: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_list_subnets:
-
@ -74,7 +76,8 @@
network: -1
subnet: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_list_routers:
-
@ -98,7 +101,8 @@
subnet: -1
router: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_list_ports:
-
@ -121,7 +125,8 @@
router: -1
port: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_update_networks:
-
@ -142,7 +147,8 @@
neutron:
network: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_update_subnets:
-
@ -167,7 +173,8 @@
network: -1
subnet: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_update_routers:
-
@ -194,7 +201,8 @@
subnet: -1
router: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_update_ports:
-
@ -220,7 +228,8 @@
network: -1
port: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_delete_networks:
-
@ -239,7 +248,8 @@
network: -1
subnet: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_delete_subnets:
-
@ -261,7 +271,8 @@
network: -1
subnet: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NeutronNetworks.create_and_delete_ports:
-
@ -282,7 +293,8 @@
network: -1
port: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_server:
-
@ -300,7 +312,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_and_delete_server:
-
@ -318,7 +331,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_and_list_server:
-
@ -337,7 +351,8 @@
tenants: 3
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_and_bounce_server:
-
@ -364,7 +379,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_server_from_volume_and_delete:
-
@ -383,7 +399,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_server_from_volume:
-
@ -402,7 +419,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.snapshot_server:
-
@ -420,7 +438,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.resize_server:
-
@ -441,7 +460,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
HeatStacks.create_and_delete_stack:
-
@ -456,4 +476,5 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0

View File

@ -8,4 +8,5 @@
times: 100
concurrency: 10
sla:
max_failure_percent: 0
failure_rate:
max: 0

View File

@ -9,7 +9,8 @@
times: 10
concurrency: 10
sla:
max_failure_percent: 0
failure_rate:
max: 0
KeystoneBasic.create_delete_user:
-
@ -20,7 +21,8 @@
times: 10
concurrency: 10
sla:
max_failure_percent: 0
failure_rate:
max: 0
KeystoneBasic.create_and_list_tenants:
-
@ -31,7 +33,8 @@
times: 10
concurrency: 10
sla:
max_failure_percent: 0
failure_rate:
max: 0
KeystoneBasic.create_and_list_users:
-
@ -42,7 +45,8 @@
times: 10
concurrency: 10
sla:
max_failure_percent: 0
failure_rate:
max: 0
KeystoneBasic.create_tenant:
-
@ -53,7 +57,8 @@
times: 10
concurrency: 10
sla:
max_failure_percent: 0
failure_rate:
max: 0
KeystoneBasic.create_tenant_with_users:
-
@ -68,7 +73,8 @@
users:
tenants: 3
sla:
max_failure_percent: 0
failure_rate:
max: 0
KeystoneBasic.create_delete_user:
-
@ -79,7 +85,8 @@
times: 10
concurrency: 10
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerAlarms.create_alarm:
-
@ -100,7 +107,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerAlarms.create_and_delete_alarm:
-
@ -121,7 +129,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerAlarms.create_and_list_alarm:
-
@ -142,7 +151,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerAlarms.create_and_update_alarm:
-
@ -163,7 +173,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerAlarms.list_alarms:
-
@ -176,7 +187,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerMeters.list_meters:
-
@ -189,7 +201,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerResource.list_resources:
-
@ -202,7 +215,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
Dummy.dummy:
-
@ -213,7 +227,8 @@
times: 20
concurrency: 5
sla:
max_failure_percent: 0
failure_rate:
max: 0
-
args:
@ -223,7 +238,8 @@
times: 2000
rps: 200
sla:
max_failure_percent: 0
failure_rate:
max: 0
-
args:
@ -252,7 +268,8 @@
snapshots: -1
volumes: -1
sla:
max_failure_percent: 0
failure_rate:
max: 0
-
args:
@ -266,7 +283,8 @@
tenants: 30
users_per_tenant: 15
sla:
max_failure_percent: 0
failure_rate:
max: 0
Dummy.dummy_exception:
-
@ -294,6 +312,18 @@
times: 2042
concurrency: 1
-
args:
exception_probability: 0.5
runner:
type: "constant"
times: 100
concurrency: 1
sla:
failure_rate:
min: 20
max: 80
Dummy.dummy_with_scenario_output:
-
runner:
@ -301,7 +331,8 @@
times: 20
concurrency: 10
sla:
max_failure_percent: 0
failure_rate:
max: 0
Dummy.dummy_random_fail_in_atomic:
-
@ -319,7 +350,8 @@
times: 4
concurrency: 4
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerStats.create_meter_and_get_stats:
-
@ -338,7 +370,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerQueries.create_and_query_alarms:
-
@ -362,7 +395,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerQueries.create_and_query_alarm_history:
-
@ -385,7 +419,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CeilometerQueries.create_and_query_samples:
-
@ -407,7 +442,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
HeatStacks.create_and_list_stack:
-
@ -420,7 +456,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
HeatStacks.create_and_delete_stack:
-
@ -433,7 +470,8 @@
tenants: 2
users_per_tenant: 3
sla:
max_failure_percent: 0
failure_rate:
max: 0
-
args:
@ -447,7 +485,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
Authenticate.keystone:
-
@ -460,7 +499,8 @@
tenants: 2
users_per_tenant: 10
sla:
max_failure_percent: 0
failure_rate:
max: 0
SaharaNodeGroupTemplates.create_and_list_node_group_templates:
-
@ -476,7 +516,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
SaharaNodeGroupTemplates.create_delete_node_group_templates:
-
@ -492,7 +533,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
Authenticate.validate_cinder:
-
@ -507,7 +549,8 @@
tenants: 3
users_per_tenant: 5
sla:
max_failure_percent: 0
failure_rate:
max: 0
Authenticate.validate_glance:
-
@ -522,7 +565,8 @@
tenants: 3
users_per_tenant: 5
sla:
max_failure_percent: 0
failure_rate:
max: 0
Authenticate.validate_heat:
-
@ -537,7 +581,8 @@
tenants: 3
users_per_tenant: 5
sla:
max_failure_percent: 0
failure_rate:
max: 0
Authenticate.validate_nova:
-
@ -552,7 +597,8 @@
tenants: 3
users_per_tenant: 5
sla:
max_failure_percent: 0
failure_rate:
max: 0
Quotas.cinder_update_and_delete:
-
@ -567,7 +613,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
Quotas.cinder_update:
-
@ -582,7 +629,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
Quotas.nova_update_and_delete:
-
@ -597,7 +645,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
Quotas.nova_update:
-
@ -612,7 +661,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
CinderVolumes.create_and_delete_volume:
-
@ -627,7 +677,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
CinderVolumes.create_and_list_volume:
-
@ -643,7 +694,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CinderVolumes.create_volume:
-
@ -658,7 +710,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
CinderVolumes.create_and_delete_snapshot:
-
@ -675,7 +728,8 @@
volumes:
size: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
CinderVolumes.create_and_attach_volume:
-
@ -694,7 +748,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
GlanceImages.create_and_delete_image:
-
@ -711,7 +766,8 @@
tenants: 2
users_per_tenant: 3
sla:
max_failure_percent: 0
failure_rate:
max: 0
GlanceImages.create_and_list_image:
-
@ -728,7 +784,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
GlanceImages.create_image_and_boot_instances:
-
@ -748,7 +805,8 @@
tenants: 3
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
GlanceImages.list_images:
-
@ -766,7 +824,8 @@
image_container: "bare"
images_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_and_delete_server:
-
@ -802,7 +861,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_and_list_server:
-
@ -821,7 +881,8 @@
tenants: 4
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.resize_server:
-
@ -842,7 +903,8 @@
tenants: 4
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_and_bounce_server:
-
@ -869,7 +931,8 @@
tenants: 4
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_server_from_volume_and_delete:
-
@ -888,7 +951,8 @@
tenants: 3
users_per_tenant: 3
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_server_from_volume:
-
@ -907,7 +971,8 @@
tenants: 2
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.snapshot_server:
-
@ -925,7 +990,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
NovaServers.boot_server:
-
@ -944,7 +1010,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
-
args:
flavor:
@ -960,7 +1027,8 @@
tenants: 3
users_per_tenant: 2
sla:
max_failure_percent: 0
failure_rate:
max: 0
VMTasks.boot_runcommand_delete:
-
@ -984,7 +1052,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
-
args:
@ -1009,7 +1078,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
-
args:
@ -1031,7 +1101,8 @@
tenants: 1
users_per_tenant: 1
sla:
max_failure_percent: 0
failure_rate:
max: 0
Requests.check_response:
-

View File

@ -91,7 +91,7 @@ class SLA(object):
raise exceptions.NoSuchSLA(name=name)
class FailureRate(SLA):
class FailureRateDeprecated(SLA):
"""Failure rate in percents."""
OPTION_NAME = "max_failure_percent"
CONFIG_SCHEMA = {"type": "number", "minimum": 0.0, "maximum": 100.0}
@ -109,6 +109,34 @@ class FailureRate(SLA):
return SLAResult(success, msg)
class FailureRate(SLA):
"""Failure rate minimum and maximum in percents."""
OPTION_NAME = "failure_rate"
CONFIG_SCHEMA = {
"type": "object",
"$schema": utils.JSON_SCHEMA,
"properties": {
"min": {"type": "number", "minimum": 0.0, "maximum": 100.0},
"max": {"type": "number", "minimum": 0.0, "maximum": 100.0}
}
}
@staticmethod
def check(criterion_value, result):
min_percent = criterion_value.get("min", 0)
max_percent = criterion_value.get("max", 100)
errors = len(filter(lambda x: x['error'], result))
error_rate = errors * 100.0 / len(result) if len(result) > 0 else 100.0
success = min_percent <= error_rate <= max_percent
msg = (_("Maximum failure rate percent %s%% failures, minimum failure "
"rate percent %s%% failures, actually %s%%") %
(max_percent, min_percent, error_rate))
return SLAResult(success, msg)
class IterationTime(SLA):
"""Maximum time for one iteration in seconds."""
OPTION_NAME = "max_seconds_per_iteration"

View File

@ -63,20 +63,62 @@ class BaseSLATestCase(test.TestCase):
self.assertEqual(expected, results)
class FailureRateTestCase(test.TestCase):
class FailureRateDeprecatedTestCase(test.TestCase):
def test_check(self):
result = [
{"error": ["error"]},
{"error": []},
] # one error and one success. 50% success rate
# 50% < 75.0%
self.assertTrue(base.FailureRate.check(75.0, result).success)
self.assertTrue(base.FailureRateDeprecated.check(75.0, result).success)
# 50% > 25%
self.assertFalse(base.FailureRate.check(25, result).success)
self.assertFalse(base.FailureRateDeprecated.check(25, result).success)
def test_check_with_no_results(self):
result = []
self.assertFalse(base.FailureRate.check(10.0, result).success)
self.assertFalse(base.FailureRateDeprecated.check(10, result).success)
class FailureRateTestCase(test.TestCase):
def test_config_schema(self):
self.assertRaises(jsonschema.ValidationError,
base.IterationTime.validate,
{"failure_rate": {"min": -1}})
self.assertRaises(jsonschema.ValidationError,
base.IterationTime.validate,
{"failure_rate": {"min": 100.1}})
self.assertRaises(jsonschema.ValidationError,
base.IterationTime.validate,
{"failure_rate": {"max": -0.1}})
self.assertRaises(jsonschema.ValidationError,
base.IterationTime.validate,
{"failure_rate": {"max": 101}})
def test_check_min(self):
result = [{"error": ["error"]}, {"error": []}, {"error": ["error"]},
{"error": ["error"]}, ] # 75% failure rate
self.assertFalse(base.FailureRate.check({"min": 80}, result).success)
self.assertTrue(base.FailureRate.check({"min": 60.5}, result).success)
def test_check_max(self):
result = [{"error": ["error"]}, {"error": []}] # 50% failure rate
self.assertFalse(base.FailureRate.check({"max": 25}, result).success)
self.assertTrue(base.FailureRate.check({"max": 75.0}, result).success)
def test_check_min_max(self):
result = [{"error": ["error"]}, {"error": []}, {"error": []},
{"error": []}] # 25% failure rate
self.assertFalse(base.FailureRate.check({"min": 50, "max": 90}, result)
.success)
self.assertFalse(base.FailureRate.check({"min": 5, "max": 20}, result)
.success)
self.assertTrue(base.FailureRate.check({"min": 24.9, "max": 25.1},
result).success)
def test_check_empty_result(self):
result = []
self.assertFalse(base.FailureRate.check({"max": 10.0}, result).success)
class IterationTimeTestCase(test.TestCase):