workerpool

package
v1.30.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 17, 2026 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrJobTimeout = errors.New("managed worker job timeout")

ErrJobTimeout은 dequeue 이후 job budget이 소진된 원인이다.

View Source
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 QueuedConfig struct {
	Workers   int
	QueueSize int
}

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL