Tarantool development patches archive
 help / color / mirror / Atom feed
From: "Alexander V. Tikhonov" <avtikhon@tarantool.org>
To: Aleksandr Lyapunov <alyapunov@tarantool.org>,
	Kirill Yukhin <kyukhin@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: [Tarantool-patches] [PATCH v2 2/2] test: flaky hang vinyl/ddl.test.lua test
Date: Fri,  4 Dec 2020 11:05:40 +0300	[thread overview]
Message-ID: <21c361f06e0658ce49df2445984d9144272d4e6e.1607036572.git.avtikhon@tarantool.org> (raw)
In-Reply-To: <cover.1607036572.git.avtikhon@tarantool.org>

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)
+
+    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;
+
 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
+        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;
 
-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" ],
-- 
2.24.1 (Apple Git-126)

  parent reply	other threads:[~2020-12-04  8:05 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-04  8:05 [Tarantool-patches] [PATCH v2 0/2] " Alexander V. Tikhonov
2020-12-04  8:05 ` [Tarantool-patches] [PATCH v2 1/2] Revert "Fix flaky test engine/ddl" Alexander V. Tikhonov
2020-12-04  8:05 ` Alexander V. Tikhonov [this message]
2020-12-04  8:19   ` [Tarantool-patches] [PATCH v2 2/2] test: flaky hang vinyl/ddl.test.lua test Aleksandr Lyapunov
2020-12-04  8:34     ` Aleksandr Lyapunov
2020-12-04  8:34 ` [Tarantool-patches] [PATCH v2 0/2] " Aleksandr Lyapunov
2020-12-04  9:35 ` Kirill Yukhin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=21c361f06e0658ce49df2445984d9144272d4e6e.1607036572.git.avtikhon@tarantool.org \
    --to=avtikhon@tarantool.org \
    --cc=alyapunov@tarantool.org \
    --cc=kyukhin@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH v2 2/2] test: flaky hang vinyl/ddl.test.lua test' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox