Move lesson source into the teaching structure, align the course path with the learner's Go and DevOps experience, and add the interactive lesson guides. Add advanced DevOps lifecycle study as a separate section. Bound MQTT message work and drain accepted jobs during shutdown; align the backend implementation with the revised course through Section 6.
24 lines
485 B
Go
24 lines
485 B
Go
package dispatch
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
)
|
|
|
|
func Shutdown(ctx context.Context, pools ...*Pool) error {
|
|
// Close admission on every pool before waiting for any worker to drain.
|
|
for _, pool := range pools {
|
|
if pool != nil {
|
|
pool.StopAdmission()
|
|
}
|
|
}
|
|
var result error
|
|
// Share one deadline across the drain so total shutdown time stays bounded.
|
|
for _, pool := range pools {
|
|
if pool != nil {
|
|
result = errors.Join(result, pool.Shutdown(ctx))
|
|
}
|
|
}
|
|
return result
|
|
}
|