From aa3c011f86ae21d6060ad4a998bfa895bc73d550 Mon Sep 17 00:00:00 2001 From: Dmitriy Koltsov <dkoltsov@picodata.io> Date: Fri, 26 Jul 2024 18:39:55 +0300 Subject: [PATCH] fix(test): use waiters instead of timeout for replication_test.lua and wal_ext_test.lua Replace fiber.sleep with luatest.helpers.retrying to make tests less flaky NO_DOC=internal NO_CHANGELOG=internal --- test/box-luatest/wal_ext_test.lua | 20 ++++++++- test/ssl-luatest/replication_test.lua | 61 ++++++++++++++++----------- 2 files changed, 55 insertions(+), 26 deletions(-) diff --git a/test/box-luatest/wal_ext_test.lua b/test/box-luatest/wal_ext_test.lua index cacf1b3943..b2796ba6d9 100644 --- a/test/box-luatest/wal_ext_test.lua +++ b/test/box-luatest/wal_ext_test.lua @@ -134,8 +134,24 @@ g.test_new_old_extension_replicated = function() return lsn end) - -- wait until data has been replicated - require('fiber').sleep(2) + local function check_vclock_synchronized() + local function get_vclock(node_name) + return g.rs:get_server(node_name) + :exec(function() return box.info.vclock end) + end + local master_vclock = get_vclock("master") + local replica_vclock = get_vclock("replica") + + t.assert_equals( + master_vclock, + replica_vclock, + 'Vclocks are not synchronized' + ) + end + t.helpers.retrying( + {timeout = 2, delay = 0.1}, + check_vclock_synchronized + ) g.rs:get_server('replica'):exec(function(lsn) local fio = require('fio') diff --git a/test/ssl-luatest/replication_test.lua b/test/ssl-luatest/replication_test.lua index b32a35ccef..9101cdb780 100644 --- a/test/ssl-luatest/replication_test.lua +++ b/test/ssl-luatest/replication_test.lua @@ -75,26 +75,31 @@ g.test_replication = function() }) g.rs:start() - local master_lsn = g.rs:get_server('master'):exec(function() + -- write something on master + g.rs:get_server('master'):exec(function() box.schema.space.create('test'):create_index('pk') box.space.test:insert({ 1, "1" }) box.space.test:insert({ 2, "2" }) box.space.test:update(2, { { '=', 2, '3' } }) box.space.test:delete(1) - - return box.info.lsn end) - -- wait until data has been replicated - require('fiber').sleep(2) - - local replica_lsn = g.rs:get_server('replica'):exec(function() - t.assert_equals(box.space.test:len(), 1) - return box.info.replication[1].lsn - end) - - t.assert_equals(master_lsn, replica_lsn) + local function check_vclock_synchronized() + local function get_vclock(node_name) + return g.rs:get_server(node_name) + :exec(function() return box.info.vclock end) + end + local master_vclock = get_vclock("master") + local replica_vclock = get_vclock("replica") + + t.assert_equals( + master_vclock, + replica_vclock, + 'Vclocks are not synchronized' + ) + end + t.helpers.retrying({timeout = 2, delay = 0.1}, check_vclock_synchronized) end g.test_anon_replication = function() @@ -130,26 +135,34 @@ g.test_anon_replication = function() }) g.rs:start() - local master_lsn = g.rs:get_server('master'):exec(function() + -- write something on master + g.rs:get_server('master'):exec(function() box.schema.space.create('test'):create_index('pk') box.space.test:insert({ 1, "1" }) box.space.test:insert({ 2, "2" }) box.space.test:update(2, { { '=', 2, '3' } }) box.space.test:delete(1) - - return box.info.lsn end) - -- wait until data has been replicated - require('fiber').sleep(2) - - local replica_lsn = g.rs:get_server('replica'):exec(function() - t.assert_equals(box.space.test:len(), 1) - return box.info.replication[1].lsn - end) - - t.assert_equals(master_lsn, replica_lsn) + local function check_vclock_synchronized() + local function get_vclock(node_name) + return g.rs:get_server(node_name) + :exec(function() return box.info.vclock end) + end + local master_vclock = get_vclock("master") + local replica_vclock = get_vclock("replica") + + t.assert_equals( + master_vclock, + replica_vclock, + 'Vclocks are not synchronized' + ) + end + t.helpers.retrying( + {timeout = 2, delay = 0.1}, + check_vclock_synchronized + ) end g.test_plain_replication_to_ssl_master = function() -- GitLab