Skip to content

test: flaky issue 'Duplicate key exists in unique index' in replication/transaction.test.lua and replication/skip_conflict_row.test.lua #194

Open
@avtikhon

Description

@avtikhon

Tarantool version:
Tarantool 2.6.0-93-gace41229f
Target: Linux-x86_64-RelWithDebInfo
Build options: cmake . -DCMAKE_INSTALL_PREFIX=/builds/kGZwxbcs/0/tarantool/tarantool/static-build/tarantool-prefix -DENABLE_BACKTRACE=TRUE
Compiler: /usr/bin/cc /usr/bin/c++
C_FLAGS: -static-libstdc++ -fexceptions -funwind-tables -fno-omit-frame-pointer -fno-stack-protector -fno-common -fopenmp -msse2 -std=c11 -Wall -Wextra -Wno-strict-aliasing -Wno-char-subscripts -Wno-format-truncation -Wno-gnu-alignof-expression -fno-gnu89-inline -Wno-cast-function-type -Werror
CXX_FLAGS: -static-libstdc++ -fexceptions -funwind-tables -fno-omit-frame-pointer -fno-stack-protector -fno-common -fopenmp -msse2 -std=c++11 -Wall -Wextra -Wno-strict-aliasing -Wno-char-subscripts -Wno-format-truncation -Wno-invalid-offsetof -Wno-gnu-alignof-expression -Wno-cast-function-type -Werror

OS version:
Linux (CentOS 7)
OSX 15

Bug description:
Issues:
1a. https://gitlab.com/tarantool/tarantool/-/jobs/746998490#L4675
results file checksum: 302cbcfde971bc8cb65b059165509d20

[242] --- replication/transaction.result	Sat Sep 19 04:07:40 2020
[242] +++ replication/transaction.reject	Sun Sep 20 01:00:05 2020
[242] @@ -189,6 +189,7 @@
[242]  ...
[242]  box.begin() s:insert({8, 'm'}) s:insert({9, 'm'}) box.commit()
[242]  ---
[242] +- error: Duplicate key exists in unique index 'pk' in space 'test'
[242]  ...
[242]  test_run:cmd("switch replica")
[242]  ---
[242] 

1b. https://gitlab.com/tarantool/tarantool/-/jobs/746707311#L4262
results file checksum: a488d1f66d4d0325c28746db77cf5e17

[036] --- replication/transaction.result	Sat Sep 19 07:07:22 2020
[036] +++ replication/transaction.reject	Sat Sep 19 14:39:47 2020
[036] @@ -53,10 +53,12 @@
[036]  -- create a two-row transaction with conflicting second
[036]  box.begin() s:insert({3, 'm'}) s:insert({4, 'm'}) box.commit()
[036]  ---
[036] +- error: Duplicate key exists in unique index 'pk' in space 'test'
[036]  ...
[036]  -- create a third transaction
[036]  box.begin() s:insert({5, 'm'}) s:insert({6, 'm'}) s:insert({7, 'm'}) box.commit()
[036]  ---
[036] +- error: 'Operation is not permitted when there is an active transaction '
[036]  ...
[036]  test_run:cmd("switch replica")
[036]  ---
[036] @@ -76,11 +78,11 @@
[036]  -- check replication status
[036]  box.info.replication[1].upstream.status
[036]  ---
[036] -- stopped
[036] +- follow
[036]  ...
[036]  box.info.replication[1].upstream.message
[036]  ---
[036] -- Duplicate key exists in unique index 'pk' in space 'test'
[036] +- null
[036]  ...
[036]  -- set conflict to third transaction
[036]  _ = box.space.test:delete({4})
[036] @@ -108,24 +110,22 @@
[036]  ...
[036]  v1[1] + 2 == box.info.vclock[1]
[036]  ---
[036] -- true
[036] -...
[036] -box.space.test:select()
[036] ----
[036] -- - [1, 'm']
[036] -  - [2, 'm']
[036] -  - [3, 'm']
[036] -  - [4, 'm']
[036] +- false
[036] +...
[036] +box.space.test:select()
[036] +---
[036] +- - [1, 'm']
[036] +  - [2, 'm']
[036]    - [6, 'r']
[036]  ...
[036]  -- check replication status
[036]  box.info.replication[1].upstream.status
[036]  ---
[036] -- stopped
[036] +- follow
[036]  ...
[036]  box.info.replication[1].upstream.message
[036]  ---
[036] -- Duplicate key exists in unique index 'pk' in space 'test'
[036] +- null
[036]  ...
[036]  -- check restart does not help
[036]  test_run:cmd("switch default")
[036] @@ -144,8 +144,6 @@
[036]  ---
[036]  - - [1, 'm']
[036]    - [2, 'm']
[036] -  - [3, 'm']
[036] -  - [4, 'm']
[036]    - [6, 'r']
[036]  ...
[036]  -- set skip conflict rows and check that non-conflicting were applied
[036] @@ -163,11 +161,7 @@
[036]  ---
[036]  - - [1, 'm']
[036]    - [2, 'm']
[036] -  - [3, 'm']
[036] -  - [4, 'm']
[036] -  - [5, 'm']
[036] -  - [6, 'r']
[036] -  - [7, 'm']
[036] +  - [6, 'r']
[036]  ...
[036]  box.info.replication[1].upstream.status
[036]  ---
[036] @@ -189,6 +183,7 @@
[036]  ...
[036]  box.begin() s:insert({8, 'm'}) s:insert({9, 'm'}) box.commit()
[036]  ---
[036] +- error: Duplicate key exists in unique index 'pk' in space 'test'
[036]  ...
[036]  test_run:cmd("switch replica")
[036]  ---
[036] @@ -199,11 +194,7 @@
[036]  ---
[036]  - - [1, 'm']
[036]    - [2, 'm']
[036] -  - [3, 'm']
[036] -  - [4, 'm']
[036] -  - [5, 'm']
[036] -  - [6, 'r']
[036] -  - [7, 'm']
[036] +  - [6, 'r']
[036]    - [8, 'r']
[036]    - [9, 'r']
[036]  ...
[036] @@ -224,11 +215,7 @@
[036]  ---
[036]  - - [1, 'm']
[036]    - [2, 'm']
[036] -  - [3, 'm']
[036] -  - [4, 'm']
[036] -  - [5, 'm']
[036] -  - [6, 'r']
[036] -  - [7, 'm']
[036] +  - [6, 'r']
[036]    - [8, 'r']
[036]    - [9, 'r']
[036]  ...
[036] 
  1. https://gitlab.com/tarantool/tarantool/-/jobs/746707419#L6083
[112] --- replication/skip_conflict_row.result	Fri Sep 18 12:44:13 2020
[112] +++ replication/skip_conflict_row.reject	Sat Sep 19 11:42:45 2020
[112] @@ -41,7 +41,7 @@
[112]  ...
[112]  space:insert{1, 1}
[112]  ---
[112] -- [1, 1]
[112] +- error: Duplicate key exists in unique index 'primary' in space 'test'
[112]  ...
[112]  space:insert{2}
[112]  ---
[112] @@ -104,7 +104,7 @@
[112]  ...
[112]  box.space.test:insert{3, 3}
[112]  ---
[112] -- [3, 3]
[112] +- error: Duplicate key exists in unique index 'primary' in space 'test'
[112]  ...
[112]  box.space.test:insert{4}
[112]  ---
[112] @@ -117,11 +117,23 @@
[112]  -- lsn is not promoted
[112]  lsn1 == box.info.vclock[1]
[112]  ---
[112] -- true
[112] +- false
[112]  ...
[112]  test_run:wait_upstream(1, {status = 'stopped', message_re = "Duplicate key exists in unique index 'primary' in space 'test'"})
[112]  ---
[112] -- true
[112] +- false
[112] +- id: 1
[112] +  uuid: 55c558fd-fa36-4f4e-bada-162cf2e4b6e6
[112] +  lsn: 43
[112] +  upstream:
[112] +    status: follow
[112] +    idle: 0.099210985004902
[112] +    peer: unix/:/builds/kGZwxbcs/0/tarantool/tarantool/test/var/112_replication/master.socket-iproto
[112] +    lag: 6.1750411987305e-05
[112] +  downstream:
[112] +    status: follow
[112] +    idle: 0.018791247159243
[112] +    vclock: {2: 2, 1: 43}
[112]  ...
[112]  test_run:cmd("switch default")
[112]  ---
[112] @@ -134,7 +146,19 @@
[112]  -- applier is not in follow state
[112]  test_run:wait_upstream(1, {status = 'stopped', message_re = "Duplicate key exists in unique index 'primary' in space 'test'"})
[112]  ---
[112] -- true
[112] +- false
[112] +- id: 1
[112] +  uuid: 55c558fd-fa36-4f4e-bada-162cf2e4b6e6
[112] +  lsn: 43
[112] +  upstream:
[112] +    status: follow
[112] +    idle: 0.0093947425484657
[112] +    peer: unix/:/builds/kGZwxbcs/0/tarantool/tarantool/test/var/112_replication/master.socket-iproto
[112] +    lag: 4.1961669921875e-05
[112] +  downstream:
[112] +    status: follow
[112] +    idle: 0.080363821238279
[112] +    vclock: {2: 2, 1: 43}
[112]  ...
[112]  --
[112]  -- tarantool/tarantool#3977: check that NOP is written instead of conflicting row.
[112] @@ -185,6 +209,7 @@
[112]  ...
[112]  for i = 1, 10 do box.space.test:insert({i, 'm'}) end
[112]  ---
[112] +- error: Duplicate key exists in unique index 'primary' in space 'test'
[112]  ...
[112]  test_run:cmd("switch replica")
[112]  ---
[112] @@ -193,7 +218,7 @@
[112]  -- lsn should be incremented
[112]  test_run:wait_cond(function() return v1 == box.info.vclock[1] - 10 end)
[112]  ---
[112] -- true
[112] +- false
[112]  ...
[112]  -- and state is follow
[112]  test_run:wait_upstream(1, {status = 'follow'})
[112] 

Steps to reproduce:

Optional (but very desirable):

  • coredump
  • backtrace
  • netstat

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions