From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng2.m.smailru.net (smtpng2.m.smailru.net [94.100.179.3]) (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 71CAF45C305 for ; Fri, 4 Dec 2020 11:34:09 +0300 (MSK) References: <21c361f06e0658ce49df2445984d9144272d4e6e.1607036572.git.avtikhon@tarantool.org> <62b5e108-5022-4804-846c-b0035cd82a8e@tarantool.org> From: Aleksandr Lyapunov Message-ID: <88a6d15d-159d-65e3-9f82-5385595b5540@tarantool.org> Date: Fri, 4 Dec 2020 11:34:07 +0300 MIME-Version: 1.0 In-Reply-To: <62b5e108-5022-4804-846c-b0035cd82a8e@tarantool.org> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: 8bit 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 Oh I just have been told that ch:get(10) mean timeout 10 second. Ok. On 04.12.2020 11:19, Aleksandr Lyapunov via Tarantool-patches wrote: > 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" ],