Skip to content

fix(checkpointer): apply ttl to minimal checkpoint for cancellation#190

Open
zettlt2 wants to merge 1 commit into
redis-developer:mainfrom
zettlt2:fix/checkpoint-ttl-on-canceled-error
Open

fix(checkpointer): apply ttl to minimal checkpoint for cancellation#190
zettlt2 wants to merge 1 commit into
redis-developer:mainfrom
zettlt2:fix/checkpoint-ttl-on-canceled-error

Conversation

@zettlt2

@zettlt2 zettlt2 commented Jun 19, 2026

Copy link
Copy Markdown

Summary

This PR ensures that Time-to-Live (TTL) is applied to minimal fallback checkpoints created during cancellation or interruption events, preventing orphaned keys from persisting indefinitely in Redis when a TTL is configured.

Cause of the Issue

When AsyncRedisSaver.aput() intercepts an asyncio.CancelledError during streaming ( values or messages modes), it writes a minimal fallback checkpoint to allow later resumption. However, this fallback write path did not invoke the TTL application logic. As a result, these fallback checkpoints remained in Redis permanently, bypassing any global or thread-specific TTL policy.

Solution

• Added a call to await self._apply_ttl_to_keys(checkpoint_key) directly after saving the minimal checkpoint inside the CancelledError block in langgraph/checkpoint/redis/aio.py .
• This ensures any configured default TTL is applied to the key if configured using the existing private function.

Testing

Added a new test case test_async_ttl_applied_on_cancellation to tests/test_async_ttl_synchronization.py .

@zettlt2 zettlt2 changed the title fix(checkpointer): apply ttl to minimal checkpoint for cancellation/ fix(checkpointer): apply ttl to minimal checkpoint for cancellation Jun 19, 2026
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

Successfully merging this pull request may close these issues.

1 participant