diff --git a/src/box/memtx_engine.c b/src/box/memtx_engine.c index 057a35de022d9e5fbc2e5127bb0f463272e07a4c..07ebfffffa1dd38176de8ea4eb871855aa331b82 100644 --- a/src/box/memtx_engine.c +++ b/src/box/memtx_engine.c @@ -634,7 +634,10 @@ checkpoint_f(va_list ap) } } } - xlog_flush(&snap); + if (xlog_flush(&snap) < 0) { + xlog_close(&snap, false); + return -1; + } xlog_close(&snap, false); say_info("done"); return 0; diff --git a/test/box/errinj.result b/test/box/errinj.result index a83dcf0a409ca6aee719548af04c9d7acfa05a25..355185169428cc3b1f9eef9d9b9c93084756ecec 100644 --- a/test/box/errinj.result +++ b/test/box/errinj.result @@ -667,6 +667,21 @@ errinj.set("ERRINJ_WAL_WRITE_DISK", false) --- - ok ... +_ = space:insert{1} +--- +... +errinj.set("ERRINJ_WAL_WRITE", true) +--- +- ok +... +box.snapshot() +--- +- error: Error injection 'xlog write injection' +... +errinj.set("ERRINJ_WAL_WRITE", false) +--- +- ok +... space:drop() --- ... diff --git a/test/box/errinj.test.lua b/test/box/errinj.test.lua index e4dc7a5497ac2db4bf9d02aac559aa26a5366d95..992f6e2a99f04aef0e27dc3d7b6658c7abdd9351 100644 --- a/test/box/errinj.test.lua +++ b/test/box/errinj.test.lua @@ -196,6 +196,12 @@ errinj.set("ERRINJ_WAL_WRITE", false) errinj.set("ERRINJ_WAL_WRITE_DISK", true) _ = space:insert{1, require'digest'.urandom(192 * 1024)} errinj.set("ERRINJ_WAL_WRITE_DISK", false) + +_ = space:insert{1} + +errinj.set("ERRINJ_WAL_WRITE", true) +box.snapshot() +errinj.set("ERRINJ_WAL_WRITE", false) space:drop() --test space:bsize() in case of memory error