diff --git a/src/box/box.cc b/src/box/box.cc index 1a61f5cb6ea8290a1cbe0b7827a993b5648031a4..20d6dffcd87ff9f527c05b0c7d6de26c054f5ff7 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -405,20 +405,21 @@ box_init() if (recovery_has_data(recovery)) { /* Process existing snapshot */ recover_snap(recovery); + space_end_recover_snapshot(); } else if (recovery_has_remote(recovery)) { /* Initialize a new replica */ replica_bootstrap(recovery); + space_end_recover_snapshot(); snapshot_save(recovery); } else { /* Initialize the first server of a new cluster */ recovery_bootstrap(recovery); box_set_cluster_uuid(); box_set_server_uuid(); + space_end_recover_snapshot(); snapshot_save(recovery); } - space_end_recover_snapshot(); - title("orphan", NULL); recovery_follow_local(recovery, cfg_getd("wal_dir_rescan_delay")); diff --git a/test/replication/init_storage.result b/test/replication/init_storage.result index 4b4e01d1b8939e0d54e06c5615da008c6aee96e9..1e57498026fcc632b019c7eba0d546e8852dc735 100644 --- a/test/replication/init_storage.result +++ b/test/replication/init_storage.result @@ -4,7 +4,7 @@ box.schema.user.grant('guest', 'read,write,execute', 'universe') space = box.schema.create_space('test', {id = 42}) --- ... -space:create_index('primary', { type = 'hash'}) +space:create_index('primary', { type = 'tree'}) --- ... for k = 1, 9 do space:insert{k, k*k} end @@ -17,16 +17,43 @@ box.space.test --- - null ... +------------------------------------------------------------- +replica JOIN +------------------------------------------------------------- box.snapshot() --- - ok ... -for k = 10, 19 do box.space[42]:insert{k, k*k*k} end ---- +box.space.test:select() +--- +- - [1, 1] + - [2, 4] + - [3, 9] + - [4, 16] + - [5, 25] + - [6, 36] + - [7, 49] + - [8, 64] + - [9, 81] +... +box.space.test:select() +--- +- - [1, 1] + - [2, 4] + - [3, 9] + - [4, 16] + - [5, 25] + - [6, 36] + - [7, 49] + - [8, 64] + - [9, 81] ... ------------------------------------------------------------- replica test 2 (must be ok) ------------------------------------------------------------- +for k = 10, 19 do box.space[42]:insert{k, k*k*k} end +--- +... space = box.space.test --- ... diff --git a/test/replication/init_storage.test.py b/test/replication/init_storage.test.py index d623b5eb6fde1f1c02bbeba0f7af9eb390cac14c..e7049c89a2efd78ae4f8d757e38c5ae2a35ad97c 100644 --- a/test/replication/init_storage.test.py +++ b/test/replication/init_storage.test.py @@ -4,10 +4,11 @@ from lib.tarantool_server import TarantoolServer # master server master = server +master_id = master.get_param('server')['id'] master.admin("box.schema.user.grant('guest', 'read,write,execute', 'universe')") master.admin("space = box.schema.create_space('test', {id = 42})") -master.admin("space:create_index('primary', { type = 'hash'})") +master.admin("space:create_index('primary', { type = 'tree'})") master.admin('for k = 1, 9 do space:insert{k, k*k} end') @@ -29,15 +30,35 @@ replica.admin('box.space.test') replica.stop() replica.cleanup(True) +print '-------------------------------------------------------------' +print 'replica JOIN' +print '-------------------------------------------------------------' + master.admin('box.snapshot()') master.restart() -master.admin('for k = 10, 19 do box.space[42]:insert{k, k*k*k} end') -master_id = master.get_param('server')['id'] -lsn = master.get_lsn(master_id) + +replica.deploy() +replica.wait_lsn(master_id, master.get_lsn(master_id)) +replica.admin('box.space.test:select()') + +# +# gh-484: JOIN doesn't save data to snapshot with TREE index +# + +replica.restart() + +replica.admin('box.space.test:select()') +replica.stop() +replica.cleanup(True) + print '-------------------------------------------------------------' print 'replica test 2 (must be ok)' print '-------------------------------------------------------------' +master.restart() +master.admin('for k = 10, 19 do box.space[42]:insert{k, k*k*k} end') +lsn = master.get_lsn(master_id) + replica = TarantoolServer(server.ini) replica.script = 'replication/replica.lua' replica.vardir = os.path.join(server.vardir, 'replica')