Files
2026-08-13 11:26:02 +01:00

30 lines
1.1 KiB
Go

package lifecycle
import (
"context"
"github.com/kandev/kandev/internal/common/constants"
)
// launchPhaseParentKey lets a runtime recover the deadline-free parent when a
// launch phase context is passed through its CreateInstance call. Preparation
// has its own budget and must not inherit the launch phase's remaining time.
type launchPhaseParentKey struct{}
// withLaunchPhaseTimeout starts a fresh budget for one runtime launch phase.
// The parent remains available through preparationContext for setup scripts.
func withLaunchPhaseTimeout(ctx context.Context) (context.Context, context.CancelFunc) {
parent := preparationContext(ctx)
phaseParent := context.WithValue(parent, launchPhaseParentKey{}, parent)
return context.WithTimeout(phaseParent, constants.AgentLaunchTimeout)
}
// preparationContext returns the context that owns caller and manager
// cancellation, without a launch-phase deadline.
func preparationContext(ctx context.Context) context.Context {
if parent, ok := ctx.Value(launchPhaseParentKey{}).(context.Context); ok {
return parent
}
return ctx
}