Problem
While using scheduled sandbox shutdowns, I ran into a boundary issue at the exact shutdown time.
A sandbox is expected to expire as soon as the current time reaches spec.shutdownTime, but in practice it could remain active briefly past that point.
Expected behavior
When now == spec.shutdownTime, the sandbox should be treated as expired immediately.
Actual behavior
When now == spec.shutdownTime, the sandbox was still treated as active and only expired on a later reconcile.
Impact
This means a sandbox can stay alive briefly past its configured shutdown time instead of expiring right at the deadline.
Reproduction idea
This can be observed around the equality boundary where the reconcile happens exactly at spec.shutdownTime.
Problem
While using scheduled sandbox shutdowns, I ran into a boundary issue at the exact shutdown time.
A sandbox is expected to expire as soon as the current time reaches
spec.shutdownTime, but in practice it could remain active briefly past that point.Expected behavior
When
now == spec.shutdownTime, the sandbox should be treated as expired immediately.Actual behavior
When
now == spec.shutdownTime, the sandbox was still treated as active and only expired on a later reconcile.Impact
This means a sandbox can stay alive briefly past its configured shutdown time instead of expiring right at the deadline.
Reproduction idea
This can be observed around the equality boundary where the reconcile happens exactly at
spec.shutdownTime.