From 71497ba39baeb43c5c816c59ac158eb29ef35392 Mon Sep 17 00:00:00 2001 From: Zhengchao An Date: Sun, 12 Jul 2026 15:20:22 +0800 Subject: [PATCH] fix(ci): evaluate ILM every scanner cycle in lifecycle behavior lane (#4772) The s3-tests lifecycle expiration cases (test_lifecycle_expiration, test_lifecyclev2_expiration, test_lifecycle_deletemarker_expiration) flaked with counts stalling one plateau behind (e.g. `assert 6 == 4`). Root cause: a compacted directory is only re-descended -- and its objects re-evaluated against ILM rules -- once every DATA_USAGE_UPDATE_DIR_CYCLES scanner cycles (default 16). At the lane's accelerated RUSTFS_SCANNER_CYCLE=2 that is ~32s between evaluations, so a Days=1 object due at debug_day (10s) is not actually expired until the next ~32s boundary (~42s) -- just past the test's 4*lc_interval (40s) poll window, so the list still returns the pre-expiry count. Set RUSTFS_DATA_USAGE_UPDATE_DIR_CYCLES=1 for this debug-only lane so compacted directories are re-descended every cycle and ILM fires within ~2s of the due time, comfortably inside the poll window. This does not touch the 4*lc_interval < 5*debug_day plateau invariant. --- .github/workflows/ci.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4393f6f9b..5cafda9a4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -550,6 +550,15 @@ jobs: # the intermediate 4-object plateau requires 4*lc_interval < 5*debug_day, i.e. # debug_day > 8. A smaller value lets the Days=5 rule fire inside the Days=1 # poll window so the count collapses straight to 2 and the test fails (#4764). + # + # RUSTFS_DATA_USAGE_UPDATE_DIR_CYCLES=1 is also required. A compacted directory + # is only re-descended (and its objects re-evaluated for ILM) once every + # DATA_USAGE_UPDATE_DIR_CYCLES scanner cycles (default 16). At the accelerated + # RUSTFS_SCANNER_CYCLE=2 that is ~32s between evaluations, so a Days=1 object + # that becomes due at debug_day (10s) is not actually expired until the next + # ~32s boundary (~42s), landing just past the 4*lc_interval (40s) poll window + # and making the count stall at 6 (#4767). Forcing every-cycle re-descent + # evaluates ILM within ~2s of the due time, well inside the poll window. s3-lifecycle-behavior-tests: name: S3 Lifecycle Behavior Tests needs: [ build-rustfs-debug-binary ] @@ -583,6 +592,7 @@ jobs: RUSTFS_ILM_PROCESS_TIME=1 \ RUSTFS_SCANNER_ENABLED=true \ RUSTFS_SCANNER_CYCLE=2 \ + RUSTFS_DATA_USAGE_UPDATE_DIR_CYCLES=1 \ RUSTFS_SCANNER_START_DELAY_SECS=0 \ RUSTFS_API_STALE_UPLOADS_CLEANUP_INTERVAL=2s \ S3_PORT="${S3_PORT}" \