[PATCH] box: add sanity check for memtx_memory and vinyl_memory cfg options

Vladimir Davydov vdavydov.dev at gmail.com
Fri Jun 1 13:03:41 MSK 2018


Follow-up #2634
Closes #3439
---
https://github.com/tarantool/tarantool/issues/3439
https://github.com/tarantool/tarantool/commits/gh-3439-memory-cfg-check

 src/box/box.cc            | 29 +++++++++++++++++++++++++++--
 test/box-tap/cfg.test.lua |  4 +++-
 test/box/cfg.result       |  8 ++++++++
 test/box/cfg.test.lua     |  2 ++
 4 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/src/box/box.cc b/src/box/box.cc
index 1bdd9f76..d52dd9b4 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -490,6 +490,26 @@ box_check_wal_max_size(int64_t wal_max_size)
 	return wal_max_size;
 }
 
+static int64_t
+box_check_memtx_memory(int64_t memory)
+{
+	if (memory <= 0) {
+		tnt_raise(ClientError, ER_CFG, "memtx_memory",
+			  "must be greater than 0");
+	}
+	return memory;
+}
+
+static int64_t
+box_check_vinyl_memory(int64_t memory)
+{
+	if (memory <= 0) {
+		tnt_raise(ClientError, ER_CFG, "vinyl_memory",
+			  "must be greater than 0");
+	}
+	return memory;
+}
+
 static void
 box_check_vinyl_options(void)
 {
@@ -501,6 +521,8 @@ box_check_vinyl_options(void)
 	double run_size_ratio = cfg_getd("vinyl_run_size_ratio");
 	double bloom_fpr = cfg_getd("vinyl_bloom_fpr");
 
+	box_check_vinyl_memory(cfg_geti64("vinyl_memory"));
+
 	if (read_threads < 1) {
 		tnt_raise(ClientError, ER_CFG, "vinyl_read_threads",
 			  "must be greater than or equal to 1");
@@ -551,6 +573,7 @@ box_check_config()
 	box_check_wal_max_rows(cfg_geti64("rows_per_wal"));
 	box_check_wal_max_size(cfg_geti64("wal_max_size"));
 	box_check_wal_mode(cfg_gets("wal_mode"));
+	box_check_memtx_memory(cfg_geti64("memtx_memory"));
 	box_check_memtx_min_tuple_size(cfg_geti64("memtx_min_tuple_size"));
 	box_check_vinyl_options();
 }
@@ -706,7 +729,8 @@ box_set_memtx_memory(void)
 	struct memtx_engine *memtx;
 	memtx = (struct memtx_engine *)engine_by_name("memtx");
 	assert(memtx != NULL);
-	memtx_engine_set_memory_xc(memtx, cfg_geti("memtx_memory"));
+	memtx_engine_set_memory_xc(memtx,
+		box_check_memtx_memory(cfg_geti64("memtx_memory")));
 }
 
 void
@@ -752,7 +776,8 @@ box_set_vinyl_memory(void)
 	struct vinyl_engine *vinyl;
 	vinyl = (struct vinyl_engine *)engine_by_name("vinyl");
 	assert(vinyl != NULL);
-	vinyl_engine_set_memory_xc(vinyl, cfg_geti("vinyl_memory"));
+	vinyl_engine_set_memory_xc(vinyl,
+		box_check_vinyl_memory(cfg_geti64("vinyl_memory")));
 }
 
 void
diff --git a/test/box-tap/cfg.test.lua b/test/box-tap/cfg.test.lua
index 453b616d..b93a21f3 100755
--- a/test/box-tap/cfg.test.lua
+++ b/test/box-tap/cfg.test.lua
@@ -6,7 +6,7 @@ local socket = require('socket')
 local fio = require('fio')
 local uuid = require('uuid')
 local msgpack = require('msgpack')
-test:plan(89)
+test:plan(91)
 
 --------------------------------------------------------------------------------
 -- Invalid values
@@ -19,6 +19,7 @@ local function invalid(name, val)
     test:ok(not status and result:match('Incorrect'), 'invalid '..name)
 end
 
+invalid('memtx_memory', -1)
 invalid('memtx_min_tuple_size', 7)
 invalid('memtx_min_tuple_size', 0)
 invalid('memtx_min_tuple_size', -1)
@@ -38,6 +39,7 @@ invalid('listen', '//!')
 invalid('log', ':')
 invalid('log', 'syslog:xxx=')
 invalid('log_level', 'unknown')
+invalid('vinyl_memory', -1)
 invalid('vinyl_read_threads', 0)
 invalid('vinyl_write_threads', 1)
 invalid('vinyl_range_size', 0)
diff --git a/test/box/cfg.result b/test/box/cfg.result
index ff208f9c..7604f61d 100644
--- a/test/box/cfg.result
+++ b/test/box/cfg.result
@@ -238,6 +238,14 @@ box.cfg{memtx_memory = "100500"}
 ---
 - error: 'Incorrect value for option ''memtx_memory'': should be of type number'
 ...
+box.cfg{memtx_memory = -1}
+---
+- error: 'Incorrect value for option ''memtx_memory'': must be greater than 0'
+...
+box.cfg{vinyl_memory = -1}
+---
+- error: 'Incorrect value for option ''vinyl_memory'': must be greater than 0'
+...
 box.cfg{vinyl = "vinyl"}
 ---
 - error: 'Incorrect value for option ''vinyl'': unexpected option'
diff --git a/test/box/cfg.test.lua b/test/box/cfg.test.lua
index 8bed7083..17876b3e 100644
--- a/test/box/cfg.test.lua
+++ b/test/box/cfg.test.lua
@@ -23,6 +23,8 @@ box.cfg{replication = {}}
 --------------------------------------------------------------------------------
 
 box.cfg{memtx_memory = "100500"}
+box.cfg{memtx_memory = -1}
+box.cfg{vinyl_memory = -1}
 box.cfg{vinyl = "vinyl"}
 box.cfg{vinyl_write_threads = "threads"}
 
-- 
2.11.0




More information about the Tarantool-patches mailing list