[tarantool-patches] [PATCH] recovery: build secondary index in hot standby mode
Ilya Kosarev
i.kosarev at tarantool.org
Mon Sep 16 22:33:36 MSK 2019
End recovery (which means building secondary indexes) just after
last known log file was read. This allows fast switch to hot standby
instance without any delay for secondary index to be built.
Closes #4135
---
Branch: https://github.com/tarantool/tarantool/tree/i.kosarev/gh-4135-secondary-index-for-hot-standby
Issue: https://github.com/tarantool/tarantool/issues/4135
src/box/box.cc | 3 ++-
src/box/memtx_engine.c | 1 -
test/replication/hot_standby.result | 16 ++++++++++++++++
test/replication/hot_standby.test.lua | 2 ++
4 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/src/box/box.cc b/src/box/box.cc
index 40920e649..060f8d2fe 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -1968,6 +1968,7 @@ local_recovery(const struct tt_uuid *instance_uuid,
engine_begin_final_recovery_xc();
recover_remaining_wals(recovery, &wal_stream.base, NULL, false);
+ engine_end_recovery_xc();
/*
* Leave hot standby mode, if any, only after
* acquiring the lock.
@@ -2005,7 +2006,7 @@ local_recovery(const struct tt_uuid *instance_uuid,
if (wal_enable() != 0)
diag_raise();
- engine_end_recovery_xc();
+ xdir_collect_inprogress(&memtx->snap_dir);
/* Check replica set UUID. */
if (!tt_uuid_is_nil(replicaset_uuid) &&
diff --git a/src/box/memtx_engine.c b/src/box/memtx_engine.c
index eb11346c1..8bdf7f068 100644
--- a/src/box/memtx_engine.c
+++ b/src/box/memtx_engine.c
@@ -315,7 +315,6 @@ memtx_engine_end_recovery(struct engine *engine)
if (space_foreach(memtx_build_secondary_keys, memtx) != 0)
return -1;
}
- xdir_collect_inprogress(&memtx->snap_dir);
return 0;
}
diff --git a/test/replication/hot_standby.result b/test/replication/hot_standby.result
index b140887df..5dc12a462 100644
--- a/test/replication/hot_standby.result
+++ b/test/replication/hot_standby.result
@@ -130,6 +130,9 @@ space = box.schema.space.create('tweedledum', {engine = engine})
index = space:create_index('primary', {type = 'tree'})
---
...
+index = space:create_index('secondary', {type = 'tree'})
+---
+...
-- set begin lsn on master, replica and hot_standby.
test_run:cmd("set variable replica_port to 'replica.listen'")
---
@@ -203,6 +206,19 @@ test_run:cmd("switch hot_standby")
_wait_lsn(10)
---
...
+box.space.tweedledum.index[1]:select()
+---
+- - [1, 'the tuple 1']
+ - [2, 'the tuple 2']
+ - [3, 'the tuple 3']
+ - [4, 'the tuple 4']
+ - [5, 'the tuple 5']
+ - [6, 'the tuple 6']
+ - [7, 'the tuple 7']
+ - [8, 'the tuple 8']
+ - [9, 'the tuple 9']
+ - [10, 'the tuple 10']
+...
test_run:cmd("switch replica")
---
- true
diff --git a/test/replication/hot_standby.test.lua b/test/replication/hot_standby.test.lua
index f43982f15..73a5329a7 100644
--- a/test/replication/hot_standby.test.lua
+++ b/test/replication/hot_standby.test.lua
@@ -71,6 +71,7 @@ box.info.status
space = box.schema.space.create('tweedledum', {engine = engine})
index = space:create_index('primary', {type = 'tree'})
+index = space:create_index('secondary', {type = 'tree'})
-- set begin lsn on master, replica and hot_standby.
test_run:cmd("set variable replica_port to 'replica.listen'")
@@ -92,6 +93,7 @@ _select(1, 10)
-- Check box.info.vclock is updated during hot standby.
test_run:cmd("switch hot_standby")
_wait_lsn(10)
+box.space.tweedledum.index[1]:select()
test_run:cmd("switch replica")
_wait_lsn(10)
--
2.17.1
More information about the Tarantool-patches
mailing list