From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng1.m.smailru.net (smtpng1.m.smailru.net [94.100.181.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 44A1F45C305 for ; Fri, 4 Dec 2020 11:19:32 +0300 (MSK) References: <21c361f06e0658ce49df2445984d9144272d4e6e.1607036572.git.avtikhon@tarantool.org> From: Aleksandr Lyapunov Message-ID: <62b5e108-5022-4804-846c-b0035cd82a8e@tarantool.org> Date: Fri, 4 Dec 2020 11:19:30 +0300 MIME-Version: 1.0 In-Reply-To: <21c361f06e0658ce49df2445984d9144272d4e6e.1607036572.git.avtikhon@tarantool.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Subject: Re: [Tarantool-patches] [PATCH v2 2/2] test: flaky hang vinyl/ddl.test.lua test List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Alexander V. Tikhonov" , Kirill Yukhin Cc: tarantool-patches@dev.tarantool.org Hi! Thanks for the path! See 4 comments below: On 04.12.2020 11:05, Alexander V. Tikhonov wrote: > Found hanging test vinyl/ddl.test.lua on: > > [159] inspector:wait_cond(function() return box.space.test.index.pk:count() == box.space.test.index.tk:count() end) > [159] --- > [159] - true > [159] ... > [159] -box.snapshot() > [159] ---- > [159] -- ok > [159] -... > > The real issue happend before it when test failed on: > > [091] --- engine/ddl.result Thu May 14 16:12:09 2020 > [091] +++ engine/ddl.reject Fri May 15 04:15:07 2020 > [091] @@ -2558,7 +2558,7 @@ > [091] ... > [091] inspector:wait_cond(function() return box.space.test.index.pk:count() == box.space.test.index.sk:count() end) > [091] --- > [091] -- true > [091] +- false > [091] ... > > Our tests have structure when different standalone subtests exists > in the test files. To be able to check all of them this hang must > be neutralized to give the next standalone subtest ability to pass. > To avoid of this hang decided to disable box.snapshot check if the > previous check of the current subtest failed. > > Needed for #4353 > --- > test/engine/ddl.result | 92 +++++++++++++++++++++++++++------------- > test/engine/ddl.test.lua | 76 +++++++++++++++++++++++++++------ > test/engine/suite.ini | 2 +- > 3 files changed, 125 insertions(+), 45 deletions(-) > > diff --git a/test/engine/ddl.result b/test/engine/ddl.result > index b7c04aafe..6603da719 100644 > --- a/test/engine/ddl.result > +++ b/test/engine/ddl.result > @@ -2526,62 +2526,94 @@ function gen_load() > end; > --- > ... > -inspector:cmd("setopt delimiter ''"); > ---- > -- true > -... > -fiber = require('fiber') > ---- > -... > -ch = fiber.channel(1) > ---- > -... > -_ = fiber.create(function() gen_load() ch:put(true) end) > +function check_equal(check, pk, k) > + if pk ~= k then > + require('log').error("Error on fiber check: failed '" .. check .. > + "' check on equal pk " .. pk .. " and k = " .. k) > + return false > + end > + return true > +end; > --- > ... > -_ = box.space.test:create_index('sk', {unique = false, parts = {2, 'unsigned'}}) > +function check_fiber() > + _ = fiber.create(function() gen_load() ch:put(true) end) > + _ = box.space.test:create_index('sk', {unique = false, parts = {2, 'unsigned'}}) > + > + ch:get(10) > + > + local index = box.space.test.index > + if not check_equal("1st step secondary keys", index.pk:count(), index.sk:count()) then > + return false > + end > + > + _ = fiber.create(function() gen_load() ch:put(true) end) > + _ = box.space.test:create_index('tk', {unique = true, parts = {3, 'unsigned'}}) > + > + ch:get(10) > + > + index = box.space.test.index > + if not check_equal("2nd step secondary keys", index.pk:count(), index.sk:count()) or > + not check_equal("2nd step third keys", index.pk:count(), index.tk:count()) then > + return false > + end > + return true > +end; > --- > ... > -ch:get() > +inspector:cmd("setopt delimiter ''"); > --- > - true > ... > -_ = fiber.create(function() gen_load() ch:put(true) end) > ---- > -... > -_ = box.space.test:create_index('tk', {unique = true, parts = {3, 'unsigned'}}) > +fiber = require('fiber') > --- > ... > -ch:get() > +ch = fiber.channel(1) > --- > -- true > ... > -box.space.test.index.pk:count() == box.space.test.index.sk:count() > +check_fiber() > --- > - true > ... > -box.space.test.index.pk:count() == box.space.test.index.tk:count() > +inspector:cmd("restart server default") > +inspector = require('test_run').new() > --- > -- true > ... > -inspector:cmd("restart server default") > -box.space.test.index.pk:count() == box.space.test.index.sk:count() > +inspector:cmd("setopt delimiter ';'") > --- > - true > ... > -box.space.test.index.pk:count() == box.space.test.index.tk:count() > +function check_equal(check, pk, k) > + if pk ~= k then > + require('log').error("Error on server restart check: failed '" .. check .. > + "' check on equal pk " .. pk .. " and k = " .. k) > + return false > + end > + return true > +end; > --- > -- true > ... > -box.snapshot() > +function check_server_restart() > + local index = box.space.test.index > + if not check_equal("1rd step secondary keys", index.pk:count(), index.sk:count()) or > + not check_equal("1rd step third keys", index.pk:count(), index.tk:count()) then > + return false > + end > + box.snapshot() > + index = box.space.test.index > + if not check_equal("2th step secondary keys", index.pk:count(), index.sk:count()) or > + not check_equal("2th step third keys", index.pk:count(), index.tk:count()) then > + return false > + end > + return true > +end; > --- > -- ok > ... > -box.space.test.index.pk:count() == box.space.test.index.sk:count() > +inspector:cmd("setopt delimiter ''"); > --- > - true > ... > -box.space.test.index.pk:count() == box.space.test.index.tk:count() > +check_server_restart() > --- > - true > ... > diff --git a/test/engine/ddl.test.lua b/test/engine/ddl.test.lua > index 7d408807f..5ba80e075 100644 > --- a/test/engine/ddl.test.lua > +++ b/test/engine/ddl.test.lua > @@ -1003,28 +1003,76 @@ function gen_load() > end > end; > > +function check_equal(check, pk, k) > + if pk ~= k then > + require('log').error("Error on fiber check: failed '" .. check .. > + "' check on equal pk " .. pk .. " and k = " .. k) > + return false > + end > + return true > +end; > + > +function check_fiber() > + _ = fiber.create(function() gen_load() ch:put(true) end) > + _ = box.space.test:create_index('sk', {unique = false, parts = {2, 'unsigned'}}) > + > + ch:get(10) Why have you replaced ch:get() with ch:get(10) ? > + > + local index = box.space.test.index > + if not check_equal("1st step secondary keys", index.pk:count(), index.sk:count()) then > + return false > + end > + > + _ = fiber.create(function() gen_load() ch:put(true) end) > + _ = box.space.test:create_index('tk', {unique = true, parts = {3, 'unsigned'}}) > + > + ch:get(10) And here? > + > + index = box.space.test.index > + if not check_equal("2nd step secondary keys", index.pk:count(), index.sk:count()) or > + not check_equal("2nd step third keys", index.pk:count(), index.tk:count()) then > + return false > + end > + return true > +end; > + > inspector:cmd("setopt delimiter ''"); > > fiber = require('fiber') > ch = fiber.channel(1) > +check_fiber() > > -_ = fiber.create(function() gen_load() ch:put(true) end) > -_ = box.space.test:create_index('sk', {unique = false, parts = {2, 'unsigned'}}) > -ch:get() > +inspector:cmd("restart server default") > +inspector = require('test_run').new() > > -_ = fiber.create(function() gen_load() ch:put(true) end) > -_ = box.space.test:create_index('tk', {unique = true, parts = {3, 'unsigned'}}) > -ch:get() > +inspector:cmd("setopt delimiter ';'") > > -box.space.test.index.pk:count() == box.space.test.index.sk:count() > -box.space.test.index.pk:count() == box.space.test.index.tk:count() > +function check_equal(check, pk, k) > + if pk ~= k then > + require('log').error("Error on server restart check: failed '" .. check .. > + "' check on equal pk " .. pk .. " and k = " .. k) > + return false > + end > + return true > +end; > > -inspector:cmd("restart server default") > +function check_server_restart() > + local index = box.space.test.index > + if not check_equal("1rd step secondary keys", index.pk:count(), index.sk:count()) or > + not check_equal("1rd step third keys", index.pk:count(), index.tk:count()) then 2x '1rd' -> '1st' > + return false > + end > + box.snapshot() > + index = box.space.test.index > + if not check_equal("2th step secondary keys", index.pk:count(), index.sk:count()) or > + not check_equal("2th step third keys", index.pk:count(), index.tk:count()) then 2x '2th' -> '2nd' > + return false > + end > + return true > +end; > > -box.space.test.index.pk:count() == box.space.test.index.sk:count() > -box.space.test.index.pk:count() == box.space.test.index.tk:count() > -box.snapshot() > -box.space.test.index.pk:count() == box.space.test.index.sk:count() > -box.space.test.index.pk:count() == box.space.test.index.tk:count() > +inspector:cmd("setopt delimiter ''"); > + > +check_server_restart() > > box.space.test:drop() > diff --git a/test/engine/suite.ini b/test/engine/suite.ini > index ca68e8f83..7a8bfd9b7 100644 > --- a/test/engine/suite.ini > +++ b/test/engine/suite.ini > @@ -15,7 +15,7 @@ fragile = { > "tests": { > "ddl.test.lua": { > "issues": [ "gh-4353" ], > - "checksums": [ "dd8851d80183cc75052119ba646e295d" ] > + "checksums": [ "c04fa9a0fae1bb63a86a5304f7679245" ] > }, > "gh-4973-concurrent-alter-fails.test.lua": { > "issues": [ "gh-5157" ],