MCPcopy Create free account
hub / github.com/PostHog/duckgres / Transition

Method Transition

controlplane/worker_state.go:124–169  ·  view source on GitHub ↗

Transition validates a lifecycle change and returns the next worker state. When assignment metadata is omitted, the current assignment is carried forward for states that remain tenant-bound.

(next WorkerLifecycleState, assignment *WorkerAssignment)

Source from the content-addressed store, hash-verified

122// When assignment metadata is omitted, the current assignment is carried
123// forward for states that remain tenant-bound.
124func (s SharedWorkerState) Transition(next WorkerLifecycleState, assignment *WorkerAssignment) (SharedWorkerState, error) {
125 current := s.NormalizedLifecycle()
126 if err := s.Validate(); err != nil {
127 return SharedWorkerState{}, err
128 }
129 if !isAllowedWorkerLifecycleTransition(current, next) {
130 return SharedWorkerState{}, fmt.Errorf("invalid worker lifecycle transition %q -> %q", current, next)
131 }
132
133 nextState := SharedWorkerState{Lifecycle: next}
134 switch next {
135 case WorkerLifecycleIdle:
136 nextState.Assignment = nil
137 case WorkerLifecycleReserved, WorkerLifecycleActivating, WorkerLifecycleHot, WorkerLifecycleHotIdle:
138 resolved, err := resolveWorkerAssignment(s.Assignment, assignment)
139 if err != nil {
140 return SharedWorkerState{}, err
141 }
142 nextState.Assignment = resolved
143 case WorkerLifecycleDraining:
144 if s.Assignment != nil || assignment != nil {
145 resolved, err := resolveWorkerAssignment(s.Assignment, assignment)
146 if err != nil {
147 return SharedWorkerState{}, err
148 }
149 nextState.Assignment = resolved
150 }
151 case WorkerLifecycleRetired:
152 if assignment != nil {
153 resolved, err := resolveWorkerAssignment(s.Assignment, assignment)
154 if err != nil {
155 return SharedWorkerState{}, err
156 }
157 nextState.Assignment = resolved
158 } else {
159 nextState.Assignment = cloneWorkerAssignment(s.Assignment)
160 }
161 default:
162 return SharedWorkerState{}, fmt.Errorf("unknown worker lifecycle %q", next)
163 }
164
165 if err := nextState.Validate(); err != nil {
166 return SharedWorkerState{}, err
167 }
168 return nextState, nil
169}
170
171func isAllowedWorkerLifecycleTransition(current, next WorkerLifecycleState) bool {
172 switch current {

Calls 5

NormalizedLifecycleMethod · 0.95
ValidateMethod · 0.95
resolveWorkerAssignmentFunction · 0.85
cloneWorkerAssignmentFunction · 0.85