mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
## What changed?
<!-- Describe what has changed in this PR -->
Remove license header from every file. Because it is really hard to
follow in this PR here is the summary:
1. License header is removed from all `.go` and `.proto` files
:fireworks::fireworks:🎆.
2. `LICENSE` file in the root directory has only Temporal and Uber
copyrights.
3. 5 other `LICENSE` files added to the packages which have copyrights
different from Temporal and Uber: Datadog, Xargin, "Mat Ryer, Tyler
Bunnell and contributors".
4. `license_file` flag is removed from all code generation tools.
5. `copyright_file` flag is removed from `go:generate mockgen`
directive.
6. All copyright related targets are removed from `Makefile`.
7. Updated Temporal copyright year to 2025 everywhere.
## Why?
<!-- Tell your future self why have you made these changes -->
I double checked with legal department that it is not needed to have
license header in every file. One file per repo is enough. I put all
copyrights to the root `LICENSE` file and removed header from all other
files. Also updated tools and `Makefile`.
85 lines
2.4 KiB
Go
85 lines
2.4 KiB
Go
package scheduler
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
schedulespb "go.temporal.io/server/api/schedule/v1"
|
|
"go.temporal.io/server/service/history/hsm"
|
|
"google.golang.org/protobuf/proto"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
)
|
|
|
|
type (
|
|
// The Generator sub state machine is responsible for buffering actions according
|
|
// to the schedule's specification. Manually requested actions (from an immediate
|
|
// request or backfill) are separately handled in the Backfiller sub state machine.
|
|
Generator struct {
|
|
*schedulespb.GeneratorInternal
|
|
}
|
|
|
|
// The machine definition provides serialization/deserialization and type information.
|
|
generatorMachineDefinition struct{}
|
|
|
|
GeneratorMachineState int
|
|
)
|
|
|
|
const (
|
|
// Unique identifier for the Generator sub state machine.
|
|
GeneratorMachineType = "scheduler.Generator"
|
|
|
|
// The Generator has only a single running state.
|
|
GeneratorMachineStateRunning GeneratorMachineState = 0
|
|
)
|
|
|
|
var (
|
|
_ hsm.StateMachine[GeneratorMachineState] = Generator{}
|
|
_ hsm.StateMachineDefinition = &generatorMachineDefinition{}
|
|
|
|
// Each sub state machine is a singleton of the top-level Scheduler, accessed with
|
|
// a fixed key
|
|
GeneratorMachineKey = hsm.Key{Type: GeneratorMachineType, ID: ""}
|
|
)
|
|
|
|
// NewGenerator returns an intialized Generator sub state machine, which should
|
|
// be parented under a Scheduler root node.
|
|
func NewGenerator() *Generator {
|
|
return &Generator{
|
|
GeneratorInternal: &schedulespb.GeneratorInternal{
|
|
NextInvocationTime: timestamppb.Now(),
|
|
LastProcessedTime: timestamppb.Now(),
|
|
},
|
|
}
|
|
}
|
|
|
|
func (g Generator) State() GeneratorMachineState {
|
|
return GeneratorMachineStateRunning
|
|
}
|
|
|
|
func (g Generator) SetState(_ GeneratorMachineState) {}
|
|
|
|
func (g Generator) RegenerateTasks(node *hsm.Node) ([]hsm.Task, error) {
|
|
return g.tasks()
|
|
}
|
|
|
|
func (generatorMachineDefinition) Type() string {
|
|
return GeneratorMachineType
|
|
}
|
|
|
|
func (generatorMachineDefinition) Serialize(state any) ([]byte, error) {
|
|
if state, ok := state.(Generator); ok {
|
|
return proto.Marshal(state.GeneratorInternal)
|
|
}
|
|
return nil, fmt.Errorf("invalid generator state provided: %v", state)
|
|
}
|
|
|
|
func (generatorMachineDefinition) Deserialize(body []byte) (any, error) {
|
|
state := &schedulespb.GeneratorInternal{}
|
|
return Generator{
|
|
GeneratorInternal: state,
|
|
}, proto.Unmarshal(body, state)
|
|
}
|
|
|
|
func (generatorMachineDefinition) CompareState(a any, b any) (int, error) {
|
|
panic("TODO: CompareState not yet implemented for Generator")
|
|
}
|