From 4e78c2812960301a75e134a538de5ef1388f6620 Mon Sep 17 00:00:00 2001 From: Ali Mohammed <ali.mohammed@hpe.com> Date: Wed, 5 Jan 2022 10:50:55 +0100 Subject: [PATCH] add a sync cdo to avoid races in check_pm_redundant_interlock test --- tests/Makefile.am | 128 ++++++++++++++--------- tests/check_pm_redundant_interlock.sh.in | 7 +- 2 files changed, 83 insertions(+), 52 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index b1db7485..9ffc798c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -129,7 +129,9 @@ check_PROGRAMS = check_version check_init check_uuid \ simple_group_client \ simple_group_injector \ simple_interlock_client_1 \ + redundant_interlock_client_1 \ simple_interlock_client_2 \ + redundant_interlock_client_2 \ colliding_client_1 \ colliding_client_2 \ reentrant_client \ @@ -165,6 +167,16 @@ CLIENT1_OPS="DECLARE cdo1 1025\ DISPOSE cdo1 -1\ DISPOSE cdo2 -1" +R_CLIENT1_OPS="DECLARE cdo1a 11\ + SEAL cdo1a -1 \ + DECLARE cdo2 20480\ + REQUIRE cdo2 -1\ + OFFER cdo1a -1 \ + DEMAND cdo2 -1\ + WITHDRAW cdo1a -1\ + DISPOSE cdo1a -1\ + DISPOSE cdo2 -1" + CLIENT2_OPS="DECLARE cdo2 20480\ SEAL cdo2 -1 \ DECLARE cdo1 1025\ @@ -172,72 +184,83 @@ CLIENT2_OPS="DECLARE cdo2 20480\ DECLARE cdo1a 11 REQUIRE cdo1a -1 \ OFFER cdo2 -1 \ DEMAND cdo1 -1\ - RETRACT cdo1a -1 DISPOSE cdo1a -1 \ + RETRACT cdo1a -1 DISPOSE cdo1a -1 \ WITHDRAW cdo2 -1\ DISPOSE cdo2 -1\ DISPOSE cdo1 -1" - -ASYNC_CLIENT1_OPS="DECLARE cdo1 1025\ - DECLARE cdo2 1024\ - DECLARE cdo3 20480\ - WAIT cdo1 -1\ - SEAL cdo1 -1\ - WAIT cdo2 -1\ - SEAL cdo2 -1\ - WAIT cdo3 -1\ - SEAL cdo3 -1\ - WAIT cdo3 -1\ - REQUIRE cdo3 -1\ - WAIT cdo1 -1\ - WAIT cdo2 -1\ - WAIT cdo3 -1\ - OFFER cdo1 -1\ - WAIT cdo1 -1\ - DEMAND cdo3 -1\ - WAIT cdo3 -1\ - WITHDRAW cdo1 -1\ - WAIT cdo1 -1\ - DISPOSE cdo1 -1\ - DISPOSE cdo2 -1\ - DISPOSE cdo3 -1" - -ASYNC_CLIENT2_OPS="DECLARE cdo3 20480\ - DECLARE cdo2 1024\ - WAIT cdo2 -1\ - WAIT cdo3 -1\ - SEAL cdo3 -1\ +R_CLIENT2_OPS="DECLARE cdo2 20480\ + SEAL cdo2 -1 \ DECLARE cdo1 1025\ - WAIT cdo1 -1\ - SEAL cdo1 -1\ - SEAL cdo2 -1\ - WAIT cdo1 -1\ - WAIT cdo2 -1\ REQUIRE cdo1 -1\ - REQUIRE cdo2 -1\ - WAIT cdo3 -1\ - WAIT cdo1 -1\ - OFFER cdo3 -1\ - WAIT cdo3 -1\ + DECLARE cdo1a 11 REQUIRE cdo1a -1 \ + OFFER cdo2 -1 \ DEMAND cdo1 -1\ - WAIT cdo1 -1\ - WITHDRAW cdo3 -1\ - WAIT cdo2 -1\ - RETRACT cdo2 -1\ - WAIT cdo2 -1\ - WAIT cdo3 -1\ + DEMAND cdo1a -1 DISPOSE cdo1a -1 \ + WITHDRAW cdo2 -1\ DISPOSE cdo2 -1\ - DISPOSE cdo3 -1\ DISPOSE cdo1 -1" +ASYNC_CLIENT1_OPS=" DECLARE cdo1 1025\ + DECLARE cdo2 1024\ + DECLARE cdo3 20480\ + WAIT cdo1 -1\ + SEAL cdo1 -1\ + WAIT cdo2 -1\ + SEAL cdo2 -1\ + WAIT cdo3 -1\ + SEAL cdo3 -1\ + WAIT cdo3 -1\ + REQUIRE cdo3 -1\ + WAIT cdo1 -1\ + WAIT cdo2 -1\ + WAIT cdo3 -1\ + OFFER cdo1 -1\ + WAIT cdo1 -1\ + DEMAND cdo3 -1\ + WAIT cdo3 -1\ + WITHDRAW cdo1 -1\ + WAIT cdo1 -1\ + DISPOSE cdo1 -1\ + DISPOSE cdo2 -1\ + DISPOSE cdo3 -1" + +ASYNC_CLIENT2_OPS=" DECLARE cdo3 20480\ + DECLARE cdo2 1024\ + WAIT cdo2 -1\ + WAIT cdo3 -1\ + SEAL cdo3 -1\ + DECLARE cdo1 1025\ + WAIT cdo1 -1\ + SEAL cdo1 -1\ + SEAL cdo2 -1\ + WAIT cdo1 -1\ + WAIT cdo2 -1\ + REQUIRE cdo1 -1\ + REQUIRE cdo2 -1\ + WAIT cdo3 -1\ + WAIT cdo1 -1\ + OFFER cdo3 -1\ + WAIT cdo3 -1\ + DEMAND cdo1 -1\ + WAIT cdo1 -1\ + WITHDRAW cdo3 -1\ + WAIT cdo2 -1\ + RETRACT cdo2 -1\ + WAIT cdo2 -1\ + WAIT cdo3 -1\ + DISPOSE cdo2 -1\ + DISPOSE cdo3 -1\ + DISPOSE cdo1 -1" + INJECTOR_OPS="\ DECLARE cdo1 1023 SEAL cdo1 -1 OFFER cdo1 -1 \ DECLARE cdo2 1023000 SEAL cdo2 -1 OFFER cdo2 -1 \ DECLARE cdo3 102 SEAL cdo3 -1 OFFER cdo3 -1 \ DECLARE cdo1a 107 REQUIRE cdo1a -1 \ - RETRACT cdo1a -1 DISPOSE cdo1a -1 \ + RETRACT cdo1a -1 DISPOSE cdo1a -1 \ WITHDRAW cdo1 -1 WITHDRAW cdo2 -1 WITHDRAW cdo3 -1 \ - DISPOSE cdo3 -1 DISPOSE cdo2 -1 DISPOSE cdo1 -1" + DISPOSE cdo3 -1 DISPOSE cdo2 -1 DISPOSE cdo1 -1" @@ -247,6 +270,11 @@ simple_interlock_client_1_CPPFLAGS = $(AM_CPPFLAGS) -DCOMPONENT_ID=1 -DCLIENT_A simple_interlock_client_2_SOURCES = simple_interlock_client.c simple_interlock_client_2_CPPFLAGS = $(AM_CPPFLAGS) -DCOMPONENT_ID=2 -DCLIENT_ARGS=$(CLIENT2_OPS) +redundant_interlock_client_1_SOURCES = simple_interlock_client.c +redundant_interlock_client_1_CPPFLAGS = $(AM_CPPFLAGS) -DCOMPONENT_ID=1 -DCLIENT_ARGS=$(R_CLIENT1_OPS) +redundant_interlock_client_2_SOURCES = simple_interlock_client.c +redundant_interlock_client_2_CPPFLAGS = $(AM_CPPFLAGS) -DCOMPONENT_ID=2 -DCLIENT_ARGS=$(R_CLIENT2_OPS) + colliding_client_1_SOURCES = colliding_client.c colliding_client_1_CPPFLAGS = $(AM_CPPFLAGS) -DREPETITION=1 colliding_client_2_SOURCES = colliding_client.c diff --git a/tests/check_pm_redundant_interlock.sh.in b/tests/check_pm_redundant_interlock.sh.in index 6e14f68c..10d03f73 100644 --- a/tests/check_pm_redundant_interlock.sh.in +++ b/tests/check_pm_redundant_interlock.sh.in @@ -49,6 +49,8 @@ PM_CMD="@top_builddir@/tests/simple_pool_manager" # 'O' -- offer 'R' -- require -- 'D' demand -- 'W' withdraw # 'S' -- sleep CLIENT_CMD="@top_builddir@/tests/simple_interlock_client" +R_CLIENT_CMD="@top_builddir@/tests/redundant_interlock_client" + # start pool manager, connect its output to fd 3: # (we need to run in a subshell to start a new process group) @@ -95,13 +97,14 @@ export MSTRO_POOL_MANAGER_INFO (env MSTRO_COMPONENT_NAME="Client1" MSTRO_TRANSPORT_DEFAULT="MIO" MSTRO_MIO_CONFIG="./mio-config-C1a.yaml" MSTRO_LOG_COLOR_ERRORS=1 MSTRO_LOG_COLOR="BLUE" ${CLIENT_CMD}_1 -n) || exit 99 & # start client 1 again (simulating redundant participants) -(env MSTRO_COMPONENT_NAME="Client1a" MSTRO_TRANSPORT_DEFAULT="MIO" MSTRO_MIO_CONFIG="./mio-config-C1a.yaml" MSTRO_LOG_COLOR_ERRORS=1 MSTRO_LOG_COLOR="BLUE" ${CLIENT_CMD}_1 -n) || exit 99 & +(env MSTRO_COMPONENT_NAME="Client1a" MSTRO_TRANSPORT_DEFAULT="MIO" MSTRO_MIO_CONFIG="./mio-config-C1a.yaml" MSTRO_LOG_COLOR_ERRORS=1 MSTRO_LOG_COLOR="BLUE" ${R_CLIENT_CMD}_1 -n) || exit 99 & # start client 2 -(env MSTRO_COMPONENT_NAME="Client2" MSTRO_TRANSPORT_DEFAULT="MIO" MSTRO_MIO_CONFIG="./mio-config-C2a.yaml" MSTRO_LOG_COLOR_ERRORS=1 MSTRO_LOG_COLOR="CYAN" ${CLIENT_CMD}_2 -n) || exit 99 & +(env MSTRO_COMPONENT_NAME="Client2" MSTRO_TRANSPORT_DEFAULT="MIO" MSTRO_MIO_CONFIG="./mio-config-C2a.yaml" MSTRO_LOG_COLOR_ERRORS=1 MSTRO_LOG_COLOR="CYAN" ${R_CLIENT_CMD}_2 -n) || exit 99 & wait %1 || exit 99 wait %2 || exit 99 +wait %3 || exit 99 # trap normal script termination: close pipe to pool manager terminate ${PM_PID} 0 -- GitLab