diff --git a/src/box/blackhole.c b/src/box/blackhole.c index 96b9fd147977ef5ba0a89ac5eb94c2a333d700e4..f979304eb175c543d133de7c6d0a9bf7803f0332 100644 --- a/src/box/blackhole.c +++ b/src/box/blackhole.c @@ -206,5 +206,6 @@ blackhole_engine_new(void) engine->vtab = &blackhole_engine_vtab; engine->name = "blackhole"; + engine->flags = ENGINE_BYPASS_TX; return engine; } diff --git a/test/box/blackhole.result b/test/box/blackhole.result index a985fcd7236cc21c320f11d0ae0fd4c9262adbcd..945b2755cd5a4fa8c93b6dd263dea25076b300b0 100644 --- a/test/box/blackhole.result +++ b/test/box/blackhole.result @@ -95,6 +95,58 @@ s:on_replace(nil, f1) s:before_replace(nil, f2) --- ... +-- Blackhole statements can be mixed in other engines' transactions. +memtx = box.schema.space.create('memtx', {engine = 'memtx'}) +--- +... +_ = memtx:create_index('pk') +--- +... +test_run:cmd("setopt delimiter ';'") +--- +- true +... +box.begin() +s:replace{1} +memtx:replace{1} +s:replace{2} +memtx:replace{2} +box.commit(); +--- +... +test_run:cmd("setopt delimiter ''"); +--- +- true +... +memtx:select() +--- +- - [1] + - [2] +... +f = s:on_replace(function(old, new) memtx:replace(new) end) +--- +... +s:replace{3} +--- +- [3] +... +s:replace{4} +--- +- [4] +... +memtx:select() +--- +- - [1] + - [2] + - [3] + - [4] +... +s:on_replace(nil, f) +--- +... +memtx:drop() +--- +... -- Test recovery. test_run:cmd('restart server default') s = box.space.test diff --git a/test/box/blackhole.test.lua b/test/box/blackhole.test.lua index 5dcf9e6181ba1d40a692fcb8d3468eb088aab057..bcf05f3a648659c0ae9ecaab9469ded807693860 100644 --- a/test/box/blackhole.test.lua +++ b/test/box/blackhole.test.lua @@ -33,6 +33,25 @@ s_old, s_new s:on_replace(nil, f1) s:before_replace(nil, f2) +-- Blackhole statements can be mixed in other engines' transactions. +memtx = box.schema.space.create('memtx', {engine = 'memtx'}) +_ = memtx:create_index('pk') +test_run:cmd("setopt delimiter ';'") +box.begin() +s:replace{1} +memtx:replace{1} +s:replace{2} +memtx:replace{2} +box.commit(); +test_run:cmd("setopt delimiter ''"); +memtx:select() +f = s:on_replace(function(old, new) memtx:replace(new) end) +s:replace{3} +s:replace{4} +memtx:select() +s:on_replace(nil, f) +memtx:drop() + -- Test recovery. test_run:cmd('restart server default') s = box.space.test