Skip to content

Channel linearizability tests fail #1475

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
dkhalanskyjb opened this issue Aug 27, 2019 · 1 comment
Closed

Channel linearizability tests fail #1475

dkhalanskyjb opened this issue Aug 27, 2019 · 1 comment

Comments

@dkhalanskyjb
Copy link
Collaborator

dkhalanskyjb commented Aug 27, 2019

testArrayChannelLinearizability[jvm]

The non-linearizable execution, according to the log file:

Non-linearizable execution:
Thread 0: [[send1=kotlin.Unit], [receive1=3, send2=kotlin.Unit]]
Thread 1: [[send2=COROUTINE_SUSPENDED], [close2=true, receive2=java.io.IOException: close2]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=false]]
Op map: {send1=[kotlin.Unit], receive1=[3], send2=[kotlin.Unit], close2=[true], receive2=[java.io.IOException: close2], close1=[false]}

Possible linearizable executions:
Thread 0: [[send1=kotlin.Unit], [receive1=3]]
Thread 1: [[send2=kotlin.Unit], [close2=true]]
Thread 2: [[receive2=3], [close1=false]]
Op map: {send1=[kotlin.Unit], receive1=[3], send2=[kotlin.Unit], close2=[true], receive2=[3], close1=[false]}

Thread 0: [[send1=kotlin.Unit], [receive1=3]]
Thread 1: [[send2=kotlin.Unit], [close2=false]]
Thread 2: [[receive2=3], [close1=true]]
Op map: {send1=[kotlin.Unit], receive1=[3], send2=[kotlin.Unit], close2=[false], receive2=[3], close1=[true]}

Thread 0: [[send1=kotlin.Unit], [receive1=3]]
Thread 1: [[send2=kotlin.Unit, receive2=3], [close2=true]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=false]]
Op map: {send1=[kotlin.Unit], receive1=[3], send2=[kotlin.Unit], receive2=[3], close2=[true], close1=[false]}

Thread 0: [[send1=kotlin.Unit], [receive1=3]]
Thread 1: [[send2=kotlin.Unit, receive2=3], [close2=false]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=true]]
Op map: {send1=[kotlin.Unit], receive1=[3], send2=[kotlin.Unit], receive2=[3], close2=[false], close1=[true]}

Thread 0: [[send1=kotlin.Unit], [receive1=3]]
Thread 1: [[send2=java.io.IOException: close1], [close2=false]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=true, receive2=java.io.IOException: close1]]
Op map: {send1=[kotlin.Unit], receive1=[3], send2=[java.io.IOException: close1], close2=[false], close1=[true], receive2=[java.io.IOException: close1]}

Thread 0: [[send1=kotlin.Unit], [receive1=3, send2=kotlin.Unit]]
Thread 1: [[send2=COROUTINE_SUSPENDED], [close2=true]]
Thread 2: [[receive2=3], [close1=false]]
Op map: {send1=[kotlin.Unit], receive1=[3], send2=[kotlin.Unit], close2=[true], receive2=[3], close1=[false]}

Thread 0: [[send1=kotlin.Unit], [receive1=3, send2=kotlin.Unit]]
Thread 1: [[send2=COROUTINE_SUSPENDED], [close2=false]]
Thread 2: [[receive2=3], [close1=true]]
Op map: {send1=[kotlin.Unit], receive1=[3], send2=[kotlin.Unit], close2=[false], receive2=[3], close1=[true]}

Thread 0: [[send1=kotlin.Unit], [receive1=3]]
Thread 1: [[send2=COROUTINE_SUSPENDED], [close2=true]]
Thread 2: [[receive2=3, send2=kotlin.Unit], [close1=false]]
Op map: {send1=[kotlin.Unit], receive1=[3], close2=[true], receive2=[3], send2=[kotlin.Unit], close1=[false]}

Thread 0: [[send1=kotlin.Unit], [receive1=3]]
Thread 1: [[send2=COROUTINE_SUSPENDED], [close2=false]]
Thread 2: [[receive2=3, send2=kotlin.Unit], [close1=true]]
Op map: {send1=[kotlin.Unit], receive1=[3], close2=[false], receive2=[3], send2=[kotlin.Unit], close1=[true]}

Thread 0: [[send1=kotlin.Unit], [receive1=COROUTINE_SUSPENDED]]
Thread 1: [[send2=kotlin.Unit, receive1=3], [close2=true]]
Thread 2: [[receive2=3], [close1=false]]
Op map: {send1=[kotlin.Unit], send2=[kotlin.Unit], receive1=[3], close2=[true], receive2=[3], close1=[false]}

Thread 0: [[send1=kotlin.Unit], [receive1=COROUTINE_SUSPENDED]]
Thread 1: [[send2=kotlin.Unit, receive1=3], [close2=false]]
Thread 2: [[receive2=3], [close1=true]]
Op map: {send1=[kotlin.Unit], send2=[kotlin.Unit], receive1=[3], close2=[false], receive2=[3], close1=[true]}

Thread 0: [[send1=kotlin.Unit], [receive1=COROUTINE_SUSPENDED]]
Thread 1: [[send2=java.io.IOException: close1], [close2=false]]
Thread 2: [[receive2=3], [close1=true, receive1=java.io.IOException: close1]]
Op map: {send1=[kotlin.Unit], send2=[java.io.IOException: close1], close2=[false], receive2=[3], close1=[true], receive1=[java.io.IOException: close1]}

Thread 0: [[send1=kotlin.Unit], [receive1=java.io.IOException: close1]]
Thread 1: [[send2=java.io.IOException: close1], [close2=false]]
Thread 2: [[receive2=3], [close1=true]]
Op map: {send1=[kotlin.Unit], receive1=[java.io.IOException: close1], send2=[java.io.IOException: close1], close2=[false], receive2=[3], close1=[true]}

Thread 0: [[send1=COROUTINE_SUSPENDED], [receive1=3, send1=kotlin.Unit]]
Thread 1: [[send2=kotlin.Unit], [close2=true]]
Thread 2: [[receive2=3], [close1=false]]
Op map: {receive1=[3], send1=[kotlin.Unit], send2=[kotlin.Unit], close2=[true], receive2=[3], close1=[false]}

Thread 0: [[send1=COROUTINE_SUSPENDED], [receive1=3, send1=kotlin.Unit]]
Thread 1: [[send2=kotlin.Unit], [close2=false]]
Thread 2: [[receive2=3], [close1=true]]
Op map: {receive1=[3], send1=[kotlin.Unit], send2=[kotlin.Unit], close2=[false], receive2=[3], close1=[true]}

Thread 0: [[send1=COROUTINE_SUSPENDED], [receive1=3]]
Thread 1: [[send2=kotlin.Unit], [close2=true]]
Thread 2: [[receive2=3, send1=kotlin.Unit], [close1=false]]
Op map: {receive1=[3], send2=[kotlin.Unit], close2=[true], receive2=[3], send1=[kotlin.Unit], close1=[false]}

Thread 0: [[send1=COROUTINE_SUSPENDED], [receive1=3]]
Thread 1: [[send2=kotlin.Unit], [close2=false]]
Thread 2: [[receive2=3, send1=kotlin.Unit], [close1=true]]
Op map: {receive1=[3], send2=[kotlin.Unit], close2=[false], receive2=[3], send1=[kotlin.Unit], close1=[true]}

Thread 0: [[send1=java.io.IOException: close2], [receive1=3]]
Thread 1: [[send2=kotlin.Unit], [close2=true]]
Thread 2: [[receive2=java.io.IOException: close2], [close1=false]]
Op map: {send1=[java.io.IOException: close2], receive1=[3], send2=[kotlin.Unit], close2=[true], receive2=[java.io.IOException: close2], close1=[false]}

Thread 0: [[send1=java.io.IOException: close2], [receive1=java.io.IOException: close2]]
Thread 1: [[send2=kotlin.Unit], [close2=true]]
Thread 2: [[receive2=3], [close1=false]]
Op map: {send1=[java.io.IOException: close2], receive1=[java.io.IOException: close2], send2=[kotlin.Unit], close2=[true], receive2=[3], close1=[false]}

Thread 0: [[send1=java.io.IOException: close1], [receive1=java.io.IOException: close1]]
Thread 1: [[send2=kotlin.Unit], [close2=false]]
Thread 2: [[receive2=3], [close1=true]]
Op map: {send1=[java.io.IOException: close1], receive1=[java.io.IOException: close1], send2=[kotlin.Unit], close2=[false], receive2=[3], close1=[true]}

Thread 0: [[send1=kotlin.Unit, receive2=3], [receive1=COROUTINE_SUSPENDED]]
Thread 1: [[send2=kotlin.Unit, receive1=3], [close2=true]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=false]]
Op map: {send1=[kotlin.Unit], receive2=[3], send2=[kotlin.Unit], receive1=[3], close2=[true], close1=[false]}

Thread 0: [[send1=kotlin.Unit, receive2=3], [receive1=COROUTINE_SUSPENDED]]
Thread 1: [[send2=kotlin.Unit, receive1=3], [close2=false]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=true]]
Op map: {send1=[kotlin.Unit], receive2=[3], send2=[kotlin.Unit], receive1=[3], close2=[false], close1=[true]}

Thread 0: [[send1=kotlin.Unit, receive2=3], [receive1=COROUTINE_SUSPENDED]]
Thread 1: [[send2=java.io.IOException: close1], [close2=false]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=true, receive1=java.io.IOException: close1]]
Op map: {send1=[kotlin.Unit], receive2=[3], send2=[java.io.IOException: close1], close2=[false], close1=[true], receive1=[java.io.IOException: close1]}

Thread 0: [[send1=kotlin.Unit, receive2=3], [receive1=3]]
Thread 1: [[send2=kotlin.Unit], [close2=true]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=false]]
Op map: {send1=[kotlin.Unit], receive2=[3], receive1=[3], send2=[kotlin.Unit], close2=[true], close1=[false]}

Thread 0: [[send1=kotlin.Unit, receive2=3], [receive1=3]]
Thread 1: [[send2=kotlin.Unit], [close2=false]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=true]]
Op map: {send1=[kotlin.Unit], receive2=[3], receive1=[3], send2=[kotlin.Unit], close2=[false], close1=[true]}

Thread 0: [[send1=kotlin.Unit, receive2=3], [receive1=java.io.IOException: close1]]
Thread 1: [[send2=java.io.IOException: close1], [close2=false]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=true]]
Op map: {send1=[kotlin.Unit], receive2=[3], receive1=[java.io.IOException: close1], send2=[java.io.IOException: close1], close2=[false], close1=[true]}

Thread 0: [[send1=java.io.IOException: close2], [receive1=java.io.IOException: close2]]
Thread 1: [[send2=kotlin.Unit, receive2=3], [close2=true]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=false]]
Op map: {send1=[java.io.IOException: close2], receive1=[java.io.IOException: close2], send2=[kotlin.Unit], receive2=[3], close2=[true], close1=[false]}

Thread 0: [[send1=java.io.IOException: close1], [receive1=java.io.IOException: close1]]
Thread 1: [[send2=kotlin.Unit, receive2=3], [close2=false]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=true]]
Op map: {send1=[java.io.IOException: close1], receive1=[java.io.IOException: close1], send2=[kotlin.Unit], receive2=[3], close2=[false], close1=[true]}

Thread 0: [[send1=java.io.IOException: close1], [receive1=java.io.IOException: close1]]
Thread 1: [[send2=java.io.IOException: close1], [close2=false]]
Thread 2: [[receive2=COROUTINE_SUSPENDED], [close1=true, receive2=java.io.IOException: close1]]
Op map: {send1=[java.io.IOException: close1], receive1=[java.io.IOException: close1], send2=[java.io.IOException: close1], close2=[false], close1=[true], receive2=[java.io.IOException: close1]}

testConflatedChannelLinearizability[jvm]

Non-linearizable execution:
Thread 0: [[close2=true, receive2=java.io.IOException: close2], [close1=false]]
Thread 1: [[send1=java.io.IOException: close2], [send2=kotlin.Unit, receive1=2]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=COROUTINE_SUSPENDED]]
Op map: {close2=[true], receive2=[java.io.IOException: close2], close1=[false], send1=[java.io.IOException: close2], send2=[kotlin.Unit], receive1=[2]}

Possible linearizable executions:
Thread 0: [[close2=true], [close1=false]]
Thread 1: [[send1=java.io.IOException: close2], [send2=java.io.IOException: close2]]
Thread 2: [[receive1=java.io.IOException: close2], [receive2=java.io.IOException: close2]]
Op map: {close2=[true], close1=[false], send1=[java.io.IOException: close2], send2=[java.io.IOException: close2], receive1=[java.io.IOException: close2], receive2=[java.io.IOException: close2]}

Thread 0: [[close2=true], [close1=false]]
Thread 1: [[send1=kotlin.Unit], [send2=java.io.IOException: close2]]
Thread 2: [[receive1=2], [receive2=java.io.IOException: close2]]
Op map: {close2=[true], close1=[false], send1=[kotlin.Unit], send2=[java.io.IOException: close2], receive1=[2], receive2=[java.io.IOException: close2]}

Thread 0: [[close2=true], [close1=false]]
Thread 1: [[send1=kotlin.Unit], [send2=kotlin.Unit]]
Thread 2: [[receive1=2], [receive2=java.io.IOException: close2]]
Op map: {close2=[true], close1=[false], send1=[kotlin.Unit], send2=[kotlin.Unit], receive1=[2], receive2=[java.io.IOException: close2]}

Thread 0: [[close2=true, receive2=java.io.IOException: close2], [close1=false]]
Thread 1: [[send1=kotlin.Unit], [send2=kotlin.Unit]]
Thread 2: [[receive1=2], [receive2=COROUTINE_SUSPENDED]]
Op map: {close2=[true], receive2=[java.io.IOException: close2], close1=[false], send1=[kotlin.Unit], send2=[kotlin.Unit], receive1=[2]}

Thread 0: [[close2=true], [close1=false]]
Thread 1: [[send1=kotlin.Unit], [send2=kotlin.Unit]]
Thread 2: [[receive1=2], [receive2=2]]
Op map: {close2=[true], close1=[false], send1=[kotlin.Unit], send2=[kotlin.Unit], receive1=[2], receive2=[2]}

Thread 0: [[close2=true, receive2=java.io.IOException: close2], [close1=false]]
Thread 1: [[send1=kotlin.Unit], [send2=java.io.IOException: close2]]
Thread 2: [[receive1=2], [receive2=COROUTINE_SUSPENDED]]
Op map: {close2=[true], receive2=[java.io.IOException: close2], close1=[false], send1=[kotlin.Unit], send2=[java.io.IOException: close2], receive1=[2]}

Thread 0: [[close2=true], [close1=false]]
Thread 1: [[send1=kotlin.Unit], [send2=kotlin.Unit, receive2=2]]
Thread 2: [[receive1=2], [receive2=COROUTINE_SUSPENDED]]
Op map: {close2=[true], close1=[false], send1=[kotlin.Unit], send2=[kotlin.Unit], receive2=[2], receive1=[2]}

Thread 0: [[close2=true, receive1=java.io.IOException: close2], [close1=false]]
Thread 1: [[send1=java.io.IOException: close2], [send2=java.io.IOException: close2]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=java.io.IOException: close2]]
Op map: {close2=[true], receive1=[java.io.IOException: close2], close1=[false], send1=[java.io.IOException: close2], send2=[java.io.IOException: close2], receive2=[java.io.IOException: close2]}

Thread 0: [[close2=true], [close1=false]]
Thread 1: [[send1=kotlin.Unit, receive1=2], [send2=java.io.IOException: close2]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=java.io.IOException: close2]]
Op map: {close2=[true], close1=[false], send1=[kotlin.Unit], receive1=[2], send2=[java.io.IOException: close2], receive2=[java.io.IOException: close2]}

Thread 0: [[close2=true], [close1=false]]
Thread 1: [[send1=kotlin.Unit, receive1=2], [send2=kotlin.Unit]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=2]]
Op map: {close2=[true], close1=[false], send1=[kotlin.Unit], receive1=[2], send2=[kotlin.Unit], receive2=[2]}

Thread 0: [[close2=true, receive2=java.io.IOException: close2], [close1=false]]
Thread 1: [[send1=kotlin.Unit, receive1=2], [send2=java.io.IOException: close2]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=COROUTINE_SUSPENDED]]
Op map: {close2=[true], receive2=[java.io.IOException: close2], close1=[false], send1=[kotlin.Unit], receive1=[2], send2=[java.io.IOException: close2]}

Thread 0: [[close2=true], [close1=false]]
Thread 1: [[send1=kotlin.Unit, receive1=2], [send2=kotlin.Unit, receive2=2]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=COROUTINE_SUSPENDED]]
Op map: {close2=[true], close1=[false], send1=[kotlin.Unit], receive1=[2], send2=[kotlin.Unit], receive2=[2]}

Thread 0: [[close2=true, receive2=java.io.IOException: close2, receive1=java.io.IOException: close2], [close1=false]]
Thread 1: [[send1=java.io.IOException: close2], [send2=java.io.IOException: close2]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=COROUTINE_SUSPENDED]]
Op map: {close2=[true], receive2=[java.io.IOException: close2], receive1=[java.io.IOException: close2], close1=[false], send1=[java.io.IOException: close2], send2=[java.io.IOException: close2]}

testUnlimitedChannelLinearizability[jvm]

Non-linearizable execution:
Thread 0: [[send2=java.io.IOException: close2], [send1=kotlin.Unit, receive1=2]]
Thread 1: [[close2=true, receive2=java.io.IOException: close2], [close1=false]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=COROUTINE_SUSPENDED]]
Op map: {send2=[java.io.IOException: close2], send1=[kotlin.Unit], receive1=[2], close2=[true], receive2=[java.io.IOException: close2], close1=[false]}

Possible linearizable executions:
Thread 0: [[send2=kotlin.Unit], [send1=kotlin.Unit]]
Thread 1: [[close2=true], [close1=false]]
Thread 2: [[receive1=1], [receive2=2]]
Op map: {send2=[kotlin.Unit], send1=[kotlin.Unit], close2=[true], close1=[false], receive1=[1], receive2=[2]}

Thread 0: [[send2=kotlin.Unit], [send1=java.io.IOException: close2]]
Thread 1: [[close2=true], [close1=false]]
Thread 2: [[receive1=1], [receive2=java.io.IOException: close2]]
Op map: {send2=[kotlin.Unit], send1=[java.io.IOException: close2], close2=[true], close1=[false], receive1=[1], receive2=[java.io.IOException: close2]}

Thread 0: [[send2=kotlin.Unit], [send1=kotlin.Unit, receive2=2]]
Thread 1: [[close2=true], [close1=false]]
Thread 2: [[receive1=1], [receive2=COROUTINE_SUSPENDED]]
Op map: {send2=[kotlin.Unit], send1=[kotlin.Unit], receive2=[2], close2=[true], close1=[false], receive1=[1]}

Thread 0: [[send2=kotlin.Unit], [send1=java.io.IOException: close2]]
Thread 1: [[close2=true, receive2=java.io.IOException: close2], [close1=false]]
Thread 2: [[receive1=1], [receive2=COROUTINE_SUSPENDED]]
Op map: {send2=[kotlin.Unit], send1=[java.io.IOException: close2], close2=[true], receive2=[java.io.IOException: close2], close1=[false], receive1=[1]}

Thread 0: [[send2=java.io.IOException: close2], [send1=java.io.IOException: close2]]
Thread 1: [[close2=true], [close1=false]]
Thread 2: [[receive1=java.io.IOException: close2], [receive2=java.io.IOException: close2]]
Op map: {send2=[java.io.IOException: close2], send1=[java.io.IOException: close2], close2=[true], close1=[false], receive1=[java.io.IOException: close2], receive2=[java.io.IOException: close2]}

Thread 0: [[send2=kotlin.Unit, receive1=1], [send1=kotlin.Unit]]
Thread 1: [[close2=true], [close1=false]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=2]]
Op map: {send2=[kotlin.Unit], receive1=[1], send1=[kotlin.Unit], close2=[true], close1=[false], receive2=[2]}

Thread 0: [[send2=kotlin.Unit, receive1=1], [send1=java.io.IOException: close2]]
Thread 1: [[close2=true], [close1=false]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=java.io.IOException: close2]]
Op map: {send2=[kotlin.Unit], receive1=[1], send1=[java.io.IOException: close2], close2=[true], close1=[false], receive2=[java.io.IOException: close2]}

Thread 0: [[send2=kotlin.Unit, receive1=1], [send1=kotlin.Unit, receive2=2]]
Thread 1: [[close2=true], [close1=false]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=COROUTINE_SUSPENDED]]
Op map: {send2=[kotlin.Unit], receive1=[1], send1=[kotlin.Unit], receive2=[2], close2=[true], close1=[false]}

Thread 0: [[send2=kotlin.Unit, receive1=1], [send1=java.io.IOException: close2]]
Thread 1: [[close2=true, receive2=java.io.IOException: close2], [close1=false]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=COROUTINE_SUSPENDED]]
Op map: {send2=[kotlin.Unit], receive1=[1], send1=[java.io.IOException: close2], close2=[true], receive2=[java.io.IOException: close2], close1=[false]}

Thread 0: [[send2=java.io.IOException: close2], [send1=java.io.IOException: close2]]
Thread 1: [[close2=true, receive1=java.io.IOException: close2], [close1=false]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=java.io.IOException: close2]]
Op map: {send2=[java.io.IOException: close2], send1=[java.io.IOException: close2], close2=[true], receive1=[java.io.IOException: close2], close1=[false], receive2=[java.io.IOException: close2]}

Thread 0: [[send2=java.io.IOException: close2], [send1=java.io.IOException: close2]]
Thread 1: [[close2=true, receive2=java.io.IOException: close2, receive1=java.io.IOException: close2], [close1=false]]
Thread 2: [[receive1=COROUTINE_SUSPENDED], [receive2=COROUTINE_SUSPENDED]]
Op map: {send2=[java.io.IOException: close2], send1=[java.io.IOException: close2], close2=[true], receive2=[java.io.IOException: close2], receive1=[java.io.IOException: close2], close1=[false]}
@dkhalanskyjb dkhalanskyjb changed the title testArrayChannelLinearizability[jvm] failed Channel linearizability tests fail Aug 27, 2019
@dkhalanskyjb
Copy link
Collaborator Author

Duplicate of #1419

@dkhalanskyjb dkhalanskyjb marked this as a duplicate of #1419 Aug 27, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant