Cross-system reference: dapr/dapr#3658 "Dapr actor TTL in general"
Summary
Confirmed by direct inspection: Quark has no max-lifetime/TTL concept for a grain activation — only idle-based deactivation via GrainCollectionAge. A grain under constant load (never idle) currently lives forever, with no way to force periodic re-activation regardless of activity.
Why it matters
Distinct use case from idle collection: forcing periodic re-activation is useful for grains whose in-memory state should be refreshed from source-of-truth on a schedule, or for bounding worst-case memory growth in long-lived caches, even under continuous traffic.
For future discussion
- New
MaxActivationLifetime alongside GrainCollectionAge in SiloRuntimeOptions, checked by GrainIdleCollector (or a sibling collector) regardless of recent activity.
- Interaction with in-flight calls at TTL expiry — drain-then-deactivate vs. hard cutoff.
Cross-system reference: dapr/dapr#3658 "Dapr actor TTL in general"
Summary
Confirmed by direct inspection: Quark has no max-lifetime/TTL concept for a grain activation — only idle-based deactivation via
GrainCollectionAge. A grain under constant load (never idle) currently lives forever, with no way to force periodic re-activation regardless of activity.Why it matters
Distinct use case from idle collection: forcing periodic re-activation is useful for grains whose in-memory state should be refreshed from source-of-truth on a schedule, or for bounding worst-case memory growth in long-lived caches, even under continuous traffic.
For future discussion
MaxActivationLifetimealongsideGrainCollectionAgeinSiloRuntimeOptions, checked byGrainIdleCollector(or a sibling collector) regardless of recent activity.