diff options
author | Stefan Hajnoczi <stefanha@redhat.com> | 2016-06-01 17:40:31 -0700 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2016-06-07 14:40:51 +0100 |
commit | 8860eabdee32f78d9a34273a340b8f74476bc9a0 (patch) | |
tree | a16f9e8cd15be4e1f337c7bcbcfd874db06f1e8e | |
parent | c8a9fd80719e63615dac12e3625223fb54aa8430 (diff) | |
download | qemu-8860eabdee32f78d9a34273a340b8f74476bc9a0.zip qemu-8860eabdee32f78d9a34273a340b8f74476bc9a0.tar.gz qemu-8860eabdee32f78d9a34273a340b8f74476bc9a0.tar.bz2 |
throttle: refuse iops-size without iops-total/read/write
In a similar vein to commit ee2bdc33c913b7d765baa5aa338c29fb30a05c9a
("throttle: refuse bps_max/iops_max without bps/iops") it is likely that
the user made a configuration error if iops-size has been set but no
iops limit has been set.
Print an error message so the user can check their throttling
configuration. They should either remove iops-size if they don't want
any throttling or specify one of iops-total, iops-read, or iops-write.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Message-id: 1464828031-25601-1-git-send-email-stefanha@redhat.com
-rw-r--r-- | tests/test-throttle.c | 10 | ||||
-rw-r--r-- | util/throttle.c | 8 |
2 files changed, 18 insertions, 0 deletions
diff --git a/tests/test-throttle.c b/tests/test-throttle.c index c02be80..d584870 100644 --- a/tests/test-throttle.c +++ b/tests/test-throttle.c @@ -398,6 +398,14 @@ static void test_max_is_missing_limit(void) } } +static void test_iops_size_is_missing_limit(void) +{ + /* A total/read/write iops limit is required */ + throttle_config_init(&cfg); + cfg.op_size = 4096; + g_assert(!throttle_is_valid(&cfg, NULL)); +} + static void test_have_timer(void) { /* zero structures */ @@ -653,6 +661,8 @@ int main(int argc, char **argv) g_test_add_func("/throttle/config/conflicting", test_conflicting_config); g_test_add_func("/throttle/config/is_valid", test_is_valid); g_test_add_func("/throttle/config/max", test_max_is_missing_limit); + g_test_add_func("/throttle/config/iops_size", + test_iops_size_is_missing_limit); g_test_add_func("/throttle/config_functions", test_config_functions); g_test_add_func("/throttle/accounting", test_accounting); g_test_add_func("/throttle/groups", test_groups); diff --git a/util/throttle.c b/util/throttle.c index 71246b2..654f95c 100644 --- a/util/throttle.c +++ b/util/throttle.c @@ -315,6 +315,14 @@ bool throttle_is_valid(ThrottleConfig *cfg, Error **errp) return false; } + if (cfg->op_size && + !cfg->buckets[THROTTLE_OPS_TOTAL].avg && + !cfg->buckets[THROTTLE_OPS_READ].avg && + !cfg->buckets[THROTTLE_OPS_WRITE].avg) { + error_setg(errp, "iops size requires an iops value to be set"); + return false; + } + for (i = 0; i < BUCKETS_COUNT; i++) { if (cfg->buckets[i].avg < 0 || cfg->buckets[i].max < 0 || |