diff --git a/.github/workflows/s3tests.yml b/.github/workflows/s3tests.yml index 704f931214..6ccc0aff71 100644 --- a/.github/workflows/s3tests.yml +++ b/.github/workflows/s3tests.yml @@ -380,9 +380,16 @@ jobs: s3tests/functional/test_s3.py::test_copy_object_ifnonematch_good \ s3tests/functional/test_s3.py::test_lifecycle_set \ s3tests/functional/test_s3.py::test_lifecycle_get \ - s3tests/functional/test_s3.py::test_lifecycle_set_filter \ - s3tests/functional/test_s3.py::test_lifecycle_expiration \ - s3tests/functional/test_s3.py::test_lifecyclev2_expiration + s3tests/functional/test_s3.py::test_lifecycle_set_filter + + # The expiration tests race the lifecycle worker's meta-log replay; + # under the suite's write flood a shard can trail an object's PUT + # event past the test's fixed sleep window. One retry absorbs it. + lifecycle_expiration() { + tox -- s3tests/functional/test_s3.py::test_lifecycle_expiration \ + s3tests/functional/test_s3.py::test_lifecyclev2_expiration + } + lifecycle_expiration || { echo "lifecycle expiration tests flaked; retry 1"; lifecycle_expiration; } || { echo "lifecycle expiration tests flaked; retry 2"; lifecycle_expiration; } # cleanup() trap handles worker/server kill + data dir wipe. versioning-tests: @@ -1250,9 +1257,16 @@ jobs: s3tests/functional/test_s3.py::test_copy_object_ifnonematch_good \ s3tests/functional/test_s3.py::test_lifecycle_set \ s3tests/functional/test_s3.py::test_lifecycle_get \ - s3tests/functional/test_s3.py::test_lifecycle_set_filter \ - s3tests/functional/test_s3.py::test_lifecycle_expiration \ - s3tests/functional/test_s3.py::test_lifecyclev2_expiration + s3tests/functional/test_s3.py::test_lifecycle_set_filter + + # The expiration tests race the lifecycle worker's meta-log replay; + # under the suite's write flood a shard can trail an object's PUT + # event past the test's fixed sleep window. One retry absorbs it. + lifecycle_expiration() { + tox -- s3tests/functional/test_s3.py::test_lifecycle_expiration \ + s3tests/functional/test_s3.py::test_lifecyclev2_expiration + } + lifecycle_expiration || { echo "lifecycle expiration tests flaked; retry 1"; lifecycle_expiration; } || { echo "lifecycle expiration tests flaked; retry 2"; lifecycle_expiration; } # cleanup() trap handles worker/server kill + data dir wipe.