Documentation
¶
Index ¶
- Variables
- type JobOutcome
- type JobSpec
- type ManagedConfig
- type ManagedFinalizerSnapshot
- type ManagedPool
- type ManagedSnapshot
- type ManagedSubmitReason
- type ManagedSubmitResult
- type QueuedConfig
- type QueuedPool
- func (p *QueuedPool) Pending() int
- func (p *QueuedPool) QueueSize() int
- func (p *QueuedPool) StopAndWait()
- func (p *QueuedPool) StopAndWaitContext(ctx context.Context) error
- func (p *QueuedPool) SubmitWait(task func()) bool
- func (p *QueuedPool) TrySubmit(task func()) bool
- func (p *QueuedPool) Workers() int
Constants ¶
This section is empty.
Variables ¶
var ErrJobTimeout = errors.New("managed worker job timeout")
ErrJobTimeout은 dequeue 이후 job budget이 소진된 원인이다.
var ErrPoolShutdown = errors.New("managed worker pool shutdown")
ErrPoolShutdown은 pool shutdown으로 in-flight job이 취소된 원인이다.
Functions ¶
This section is empty.
Types ¶
type JobOutcome ¶ added in v1.29.0
type JobOutcome string
JobOutcome은 managed job이 종료된 이유를 나타낸다.
const ( JobOutcomeSuccess JobOutcome = "success" JobOutcomeRejected JobOutcome = "rejected" JobOutcomeStale JobOutcome = "stale" JobOutcomePanic JobOutcome = "panic" JobOutcomeShutdown JobOutcome = "shutdown" JobOutcomeTimeout JobOutcome = "timeout" JobOutcomeCanceled JobOutcome = "canceled" )
type JobSpec ¶ added in v1.29.0
type JobSpec struct {
Context context.Context
Kind string
Timeout time.Duration
MaxQueueAge time.Duration
Run func(context.Context)
Finalize func(context.Context, JobOutcome)
}
JobSpec은 queue admission 이후 dequeue 시점에 실행 budget을 만드는 작업 계약이다.
type ManagedConfig ¶ added in v1.29.0
type ManagedConfig struct {
Workers int
QueueSize int
// FinalizeTimeout은 callback 실제 시작 시점부터 적용한다.
FinalizeTimeout time.Duration
// FinalizeConcurrency는 동시에 실행할 수 있는 callback 수다.
FinalizeConcurrency int
// FinalizeQueueSize는 accepted job의 pending reservation, queued callback,
// in-flight callback을 합한 총 reservation capacity다. 0 이하면 Workers+QueueSize를 사용한다.
FinalizeQueueSize int
Logger *slog.Logger
}
ManagedConfig는 ManagedPool의 고정 worker, queue, finalizer scheduler budget을 설정한다.
type ManagedFinalizerSnapshot ¶ added in v1.30.1
type ManagedFinalizerSnapshot struct {
Concurrency int
QueueSize int
QueueDepth int
InFlight int
Reservations int
// Accepting은 finalizer가 새 reservation을 받을 수 있는 lifecycle 상태다.
Accepting bool
// DispatchDrained는 Close 이후 pending reservation과 callback queue가 모두 dispatch됐음을 뜻한다.
// 이미 시작된 callback의 실제 반환 완료는 뜻하지 않는다.
DispatchDrained bool
// Quiesced는 Close 이후 모든 callback이 실제로 반환하고 reservation이 해제됐음을 뜻한다.
Quiesced bool
Claimed uint64
Started uint64
Completed uint64
CompletedLate uint64
TimedOut uint64
Overloaded uint64
ReservationRejected uint64
Panicked uint64
}
ManagedFinalizerSnapshot은 finalizer reservation, scheduler lifecycle, callback 누계를 제공한다. FinalizeTimeout은 callback 시작 시점부터 적용되며 이미 발생한 외부 효과나 goroutine을 중단시키지 못한다.
type ManagedPool ¶ added in v1.29.0
type ManagedPool struct {
// contains filtered or unexported fields
}
ManagedPool은 dequeue-time budget과 단일 finalization을 소유하는 worker pool이다.
func NewManaged ¶ added in v1.29.0
func NewManaged(config ManagedConfig) *ManagedPool
NewManaged는 immutable worker와 queue 크기로 ManagedPool을 시작한다.
func (*ManagedPool) CloseContext ¶ added in v1.29.0
func (p *ManagedPool) CloseContext(ctx context.Context) error
CloseContext는 admission을 닫고 queued job을 drop하며 in-flight job을 취소한다. nil을 반환하면 pool이 소유한 accepted/rejected Finalize callback이 모두 실제로 반환했고 finalizer reservation도 모두 해제된 상태다. callback이 context를 무시하면 호출자 context로 bounded하게 반환하되 성공을 보고하지 않는다.
func (*ManagedPool) Snapshot ¶ added in v1.29.0
func (p *ManagedPool) Snapshot() ManagedSnapshot
Snapshot은 호출 시점의 queue depth, in-flight, oldest queue age, outcome 누계를 반환한다.
func (*ManagedPool) TrySubmit ¶ added in v1.29.0
func (p *ManagedPool) TrySubmit(spec JobSpec) bool
TrySubmit은 작업을 기다리지 않고 queue에 admission한다. false이면 pool은 Finalize를 호출하지 않으며 callback ownership은 호출자에게 남는다. rejected callback도 pool에 위임해야 하는 caller는 TrySubmitResult를 사용한다.
func (*ManagedPool) TrySubmitResult ¶ added in v1.30.1
func (p *ManagedPool) TrySubmitResult(spec JobSpec) ManagedSubmitResult
TrySubmitResult는 TrySubmit과 같은 admission을 수행하고 Finalize callback의 ownership을 반환한다.
type ManagedSnapshot ¶ added in v1.29.0
type ManagedSnapshot struct {
QueueDepth int
InFlight int
OldestQueueAge time.Duration
Outcomes map[JobOutcome]uint64
Finalizer ManagedFinalizerSnapshot
}
ManagedSnapshot은 pool의 현재 queue, 실행, outcome 상태를 복사해 제공한다.
type ManagedSubmitReason ¶ added in v1.30.1
type ManagedSubmitReason string
ManagedSubmitReason은 TrySubmitResult의 admission 또는 callback ownership 결론이다.
const ( ManagedSubmitAccepted ManagedSubmitReason = "accepted" ManagedSubmitRejected ManagedSubmitReason = "rejected" ManagedSubmitRejectedFinalizerScheduled ManagedSubmitReason = "rejected_finalizer_scheduled" ManagedSubmitRejectedFinalizerCapacity ManagedSubmitReason = "rejected_finalizer_capacity" )
type ManagedSubmitResult ¶ added in v1.30.1
type ManagedSubmitResult struct {
Accepted bool
FinalizerClaimed bool
Reason ManagedSubmitReason
}
ManagedSubmitResult는 admission과 pool의 Finalize callback ownership을 함께 제공한다. FinalizerClaimed가 true이면 callback lifecycle은 pool이 소유하며 호출자는 직접 Finalize하지 않는다. false인 rejected 결과는 callback이 전혀 예약되지 않았으므로 호출자가 durable claim을 직접 복구해야 한다.
type QueuedConfig ¶
type QueuedPool ¶
type QueuedPool struct {
// contains filtered or unexported fields
}
func NewQueued ¶
func NewQueued(config QueuedConfig) *QueuedPool
func NewQueuedWithLogger ¶
func NewQueuedWithLogger(config QueuedConfig, logger *slog.Logger) *QueuedPool
NewQueuedWithLogger는 panic recover 로그에 사용할 logger를 주입한다. logger가 nil이면 slog.Default()를 사용한다.
func (*QueuedPool) Pending ¶
func (p *QueuedPool) Pending() int
func (*QueuedPool) QueueSize ¶
func (p *QueuedPool) QueueSize() int
func (*QueuedPool) StopAndWait ¶
func (p *QueuedPool) StopAndWait()
func (*QueuedPool) StopAndWaitContext ¶
func (p *QueuedPool) StopAndWaitContext(ctx context.Context) error
func (*QueuedPool) SubmitWait ¶
func (p *QueuedPool) SubmitWait(task func()) bool
func (*QueuedPool) TrySubmit ¶
func (p *QueuedPool) TrySubmit(task func()) bool
func (*QueuedPool) Workers ¶
func (p *QueuedPool) Workers() int