Files
tasks/chasm/lib/scheduler/library.go
Alan WuandGitHub 18b007c44f Add BusinessID search attribute option (#8803)
## What changed?
Add BusinessID search attribute option. CHASM archetype developers that
require Visibility will need to call `WithBusinessIDAlias` as a required
RegistrableComponent option.

Adds validation if BusinessIDAlias option is not set, but contains
Visibility as a child component, registration to the CHASM Registry will
fail.

## Why?
CHASM archetypes define separate aliases for BusinessID, eg.
`ActivityID`, `ScheduleID`, etc. End users of these archetypes will
query Visibility using a filter such as `ActivityID = my-activity-id`,
and should be able to map to the underlying shared `system` visibility
storage column.

## How did you test it?
- [X] built
- [X] run locally and tested manually
- [X] covered by existing tests
- [ ] added new unit test(s)
- [ ] added new functional test(s)
2026-01-05 13:46:33 -05:00

90 lines
2.5 KiB
Go

package scheduler
import (
"go.temporal.io/server/chasm"
"go.temporal.io/server/chasm/lib/scheduler/gen/schedulerpb/v1"
"google.golang.org/grpc"
)
type (
Library struct {
chasm.UnimplementedLibrary
handler *handler
SchedulerIdleTaskExecutor *SchedulerIdleTaskExecutor
GeneratorTaskExecutor *GeneratorTaskExecutor
InvokerExecuteTaskExecutor *InvokerExecuteTaskExecutor
InvokerProcessBufferTaskExecutor *InvokerProcessBufferTaskExecutor
BackfillerTaskExecutor *BackfillerTaskExecutor
}
)
func NewLibrary(
handler *handler,
SchedulerIdleTaskExecutor *SchedulerIdleTaskExecutor,
GeneratorTaskExecutor *GeneratorTaskExecutor,
InvokerExecuteTaskExecutor *InvokerExecuteTaskExecutor,
InvokerProcessBufferTaskExecutor *InvokerProcessBufferTaskExecutor,
BackfillerTaskExecutor *BackfillerTaskExecutor,
) *Library {
return &Library{
handler: handler,
SchedulerIdleTaskExecutor: SchedulerIdleTaskExecutor,
GeneratorTaskExecutor: GeneratorTaskExecutor,
InvokerExecuteTaskExecutor: InvokerExecuteTaskExecutor,
InvokerProcessBufferTaskExecutor: InvokerProcessBufferTaskExecutor,
BackfillerTaskExecutor: BackfillerTaskExecutor,
}
}
func (l *Library) Name() string {
return chasm.SchedulerLibraryName
}
func (l *Library) Components() []*chasm.RegistrableComponent {
return []*chasm.RegistrableComponent{
chasm.NewRegistrableComponent[*Scheduler](
chasm.SchedulerComponentName,
chasm.WithBusinessIDAlias("ScheduleId"),
),
chasm.NewRegistrableComponent[*Generator]("generator"),
chasm.NewRegistrableComponent[*Invoker]("invoker"),
chasm.NewRegistrableComponent[*Backfiller]("backfiller"),
}
}
func (l *Library) Tasks() []*chasm.RegistrableTask {
return []*chasm.RegistrableTask{
chasm.NewRegistrablePureTask(
"idle",
l.SchedulerIdleTaskExecutor,
l.SchedulerIdleTaskExecutor,
),
chasm.NewRegistrablePureTask(
"generate",
l.GeneratorTaskExecutor,
l.GeneratorTaskExecutor,
),
chasm.NewRegistrableSideEffectTask(
"execute",
l.InvokerExecuteTaskExecutor,
l.InvokerExecuteTaskExecutor,
),
chasm.NewRegistrablePureTask(
"processBuffer",
l.InvokerProcessBufferTaskExecutor,
l.InvokerProcessBufferTaskExecutor,
),
chasm.NewRegistrablePureTask(
"backfill",
l.BackfillerTaskExecutor,
l.BackfillerTaskExecutor,
),
}
}
func (l *Library) RegisterServices(server *grpc.Server) {
server.RegisterService(&schedulerpb.SchedulerService_ServiceDesc, l.handler)
}