#8919·server

test: L0_lifecycle uses blind time.sleep(5) for model load/unload, causing flaky CI failures

Author: MoyummmmCreated Aug 6, 2026Updated Aug 6, 2026

Description

The qa/L0_lifecycle/lifecycle_test.py file contains 13 instances of time.sleep(5) that blindly wait for model load/unload operations before asserting is_model_ready(). Under CI resource contention, 5 seconds may not be sufficient for the model to reach the expected state, causing intermittent test failures.

Root cause

Fixed-duration sleeps are inherently unreliable for synchronizing with asynchronous model load/unload operations. The timing varies based on system load, I/O performance, and platform (especially Jetson/Orin). Other test files (e.g. log_format_test.py, pinned_memory_metrics_test.py) already use polling-based approaches with is_model_ready().

Proposed fix

Replace time.sleep(5) with a polling loop that uses triton_client.is_model_ready() to wait for the expected state, with a configurable timeout (default 30s). This approach:

  • Is resilient to CI load variations
  • Fails fast when the model reaches the expected state (typically <5s)
  • Provides clear error messages when the timeout is reached

Affected test functions

  • test_dynamic_model_load_unload (4 instances)
  • test_dynamic_version_load_unload (2 instances)
  • test_dynamic_model_modify (2 instances)
  • test_multiple_model_repository_polling (2 instances)
  • test_apply_custom_config / test_delete_custom_config (2 instances)
  • Model duplication/unload scenario (1 instance)

Not affected (intentionally unchanged)

  • 4 time.sleep(5) in disabled dynamic loading negative tests (model should NOT load/unload)
  • 1 time.sleep(5) for scheduler timeout wait

Source: triton-inference-server/server