Documentation
¶
Overview ¶
Package pipe is an orch recipe: typed linear pipeline with per-Push Result.
Build with FromJob / FromUniversalJobs, then NodeOrch.Then, NodeOrch.Parallel, NodeOrch.EndJob / NodeOrch.EndJobs, and Builder.Build. Lifecycle:
Build → Run → Push* → Close
Scheduler matches schedx.RetrievableScheduler in shape. Admission uses a RetrievableScheduler whose Job injects into stage pumps (chanx) and waits on a ticket until Tail or failure. Scheduler.Pending is admission queue depth, not in-stage count. Scheduler.Close fails unfinished Results immediately and stops stage pumps.
Node jobs are TransformJob / TransformFunc (In → Out). Parallel stages fan out UniversalTransformJob and merge with a summary. This package does not re-export chanx.
Code generated by genx:code@v0.3.7 DO NOT EDIT.
Index ¶
- Constants
- func IsPipelineError(err error) bool
- func IsShutdown(err error) bool
- func IsTaskError(err error) bool
- type Builder
- type Error
- type Node
- type NodeOrch
- func (o *NodeOrch[Head, Tail, Last]) EndJob(name string, job TransformJob[Last, Tail]) *Builder[Head, Tail]
- func (o *NodeOrch[Head, Tail, Last]) EndJobs(name string, summary func(in Last, outs ...any) Tail, ...) *Builder[Head, Tail]
- func (o *NodeOrch[Head, Tail, Last]) Parallel[Next any](name string, summary func(in Last, outs ...any) Next, ...) *NodeOrch[Head, Tail, Next]
- func (o *NodeOrch[Head, Tail, Last]) Then[Next any](name string, job TransformJob[Last, Next]) *NodeOrch[Head, Tail, Next]
- type OptionFunc
- type ParallelNode
- type Result
- type Scheduler
- type SimpleNode
- type Summary
- type TransformFunc
- type TransformJob
- type UniversalTransformJob
Examples ¶
Constants ¶
const ( Lifetime_Orchestrating = iota + int32(0) Lifetime_Orchestrated Lifetime_Building Lifetime_Built Lifetime_Running Lifetime_Closed )
Variables ¶
This section is empty.
Functions ¶
func IsPipelineError ¶ added in v0.2.2
func IsShutdown ¶ added in v0.2.2
func IsTaskError ¶ added in v0.2.2
Types ¶
type Builder ¶ added in v0.2.2
type Builder[Head, Tail any] struct { // contains filtered or unexported fields }
func (*Builder[Head, Tail]) Build ¶ added in v0.2.2
func (b *Builder[Head, Tail]) Build(fs ...OptionFunc) Scheduler[Head, Tail]
type NodeOrch ¶ added in v0.2.2
type NodeOrch[Head, Tail, Last any] struct { // contains filtered or unexported fields }
func FromJob ¶ added in v0.2.2
func FromJob[Head, Tail, Next any]( name string, job TransformJob[Head, Next], ) *NodeOrch[Head, Tail, Next]
Example ¶
ExampleFromJob shows Build → Run → Push → Result → Close.
package main
import (
"context"
"fmt"
"sort"
"time"
"github.com/xoctopus/x/slicex"
"github.com/xoctopus/concx/pkg/orch/pipe"
)
func main() {
ctx := context.Background()
p := pipe.FromJob[string, string, string](
"initializing",
pipe.TransformFunc[string, string](func(_ context.Context, in string) (string, error) {
fmt.Println("initializing:", in)
return in, nil
}),
).Parallel[[]string](
"dag",
func(in string, outs ...any) []string {
return slicex.Mapping(outs, func(v any) string { return v.(string) })
},
pipe.TransformFunc[string, any](func(_ context.Context, in string) (any, error) {
fmt.Println("dag-a node:", in)
return "dag-a-result", nil
}),
pipe.TransformFunc[string, any](func(_ context.Context, in string) (any, error) {
fmt.Println("dag-b node:", in)
return "dag-b-result", nil
}),
).EndJob(
"summary",
pipe.TransformFunc[[]string, string](func(_ context.Context, res []string) (string, error) {
sort.Strings(res)
fmt.Println("summary:", res)
return "finished", nil
}),
).Build(
pipe.WithMaxPending(2),
pipe.WithShutdownTimeout(time.Second),
)
_ = p.Run(ctx)
defer func() { _ = p.Close() }()
for _, name := range []string{"first", "second"} {
ret, _ := p.Push(ctx, name)
res, _ := ret.Result(ctx)
fmt.Println(res, name)
}
}
Output: initializing: first dag-a node: first dag-b node: first summary: [dag-a-result dag-b-result] finished first initializing: second dag-a node: second dag-b node: second summary: [dag-a-result dag-b-result] finished second
func FromUniversalJobs ¶ added in v0.2.2
func FromUniversalJobs[Head, Tail, Next any]( name string, summary func(in Head, outs ...any) Next, jobs ...UniversalTransformJob[Head], ) *NodeOrch[Head, Tail, Next]
func (*NodeOrch[Head, Tail, Last]) EndJob ¶ added in v0.2.2
func (o *NodeOrch[Head, Tail, Last]) EndJob( name string, job TransformJob[Last, Tail], ) *Builder[Head, Tail]
func (*NodeOrch[Head, Tail, Last]) EndJobs ¶ added in v0.2.2
func (o *NodeOrch[Head, Tail, Last]) EndJobs( name string, summary func(in Last, outs ...any) Tail, jobs ...UniversalTransformJob[Last], ) *Builder[Head, Tail]
type OptionFunc ¶ added in v0.2.2
type OptionFunc func(*option)
func WithMaxPending ¶ added in v0.2.2
func WithMaxPending(maxPending int) OptionFunc
func WithParallel ¶ added in v0.2.2
func WithParallel(n int) OptionFunc
WithParallel sets how many pipeline tickets may run concurrently (RetrievableScheduler worker count). Each in-flight ticket holds a worker until Tail or failure.
func WithShutdownTimeout ¶ added in v0.2.2
func WithShutdownTimeout(timeout time.Duration) OptionFunc
type ParallelNode ¶ added in v0.2.2
type ParallelNode[Head, Tail, I, O any] struct { // contains filtered or unexported fields }
func (*ParallelNode[Head, Tail, I, O]) Name ¶ added in v0.2.2
func (n *ParallelNode[Head, Tail, I, O]) Name() string
type Result ¶ added in v0.2.2
Result is the completion handle returned by Scheduler.Push.
type Scheduler ¶ added in v0.2.2
type Scheduler[Head, Tail any] interface { Push(context.Context, Head) (Result[Tail], error) Pending() int Close() error Run(context.Context) error }
Scheduler is the runnable pipeline surface. Shape matches schedx.RetrievableScheduler; runtime is RetrievableScheduler plus stage pumps (nodes / finale) and chanx shutdown.
type SimpleNode ¶ added in v0.2.2
type SimpleNode[Head, Tail, I, O any] struct { // contains filtered or unexported fields }
func (*SimpleNode[Head, Tail, I, O]) Name ¶ added in v0.2.2
func (n *SimpleNode[Head, Tail, I, O]) Name() string
type TransformFunc ¶ added in v0.2.2
type TransformJob ¶ added in v0.2.2
type UniversalTransformJob ¶ added in v0.2.2
type UniversalTransformJob[In any] = TransformJob[In, any]