Files
tasks/service/history/queues/active_standby_executor.go
Alex ShtinandGitHub 8e8f1b0f7c Remove license header from every file (#7689)
## 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`.
2025-05-01 18:50:21 -07:00

73 lines
1.9 KiB
Go

package queues
import (
"context"
"go.temporal.io/server/common/headers"
"go.temporal.io/server/common/log"
"go.temporal.io/server/common/log/tag"
"go.temporal.io/server/common/namespace"
)
type (
activeStandbyExecutor struct {
currentClusterName string
registry namespace.Registry
activeExecutor Executor
standbyExecutor Executor
logger log.Logger
}
)
func NewActiveStandbyExecutor(
currentClusterName string,
registry namespace.Registry,
activeExecutor Executor,
standbyExecutor Executor,
logger log.Logger,
) Executor {
return &activeStandbyExecutor{
currentClusterName: currentClusterName,
registry: registry,
activeExecutor: activeExecutor,
standbyExecutor: standbyExecutor,
logger: logger,
}
}
func (e *activeStandbyExecutor) Execute(
ctx context.Context,
executable Executable,
) ExecuteResponse {
if e.isActiveTask(executable) {
return e.activeExecutor.Execute(ctx, executable)
}
// for standby tasks, use preemptable callerType to avoid impacting active traffic
return e.standbyExecutor.Execute(
headers.SetCallerType(ctx, headers.CallerTypePreemptable),
executable,
)
}
func (e *activeStandbyExecutor) isActiveTask(
executable Executable,
) bool {
// Following is the existing task allocator logic for verifying active task
namespaceID := executable.GetNamespaceID()
entry, err := e.registry.GetNamespaceByID(namespace.ID(namespaceID))
if err != nil {
e.logger.Warn("Unable to find namespace, process task as active.", tag.WorkflowNamespaceID(namespaceID), tag.Value(executable.GetTask()))
return true
}
if !entry.ActiveInCluster(e.currentClusterName) {
e.logger.Debug("Process task as standby.", tag.WorkflowNamespaceID(namespaceID), tag.Value(executable.GetTask()))
return false
}
e.logger.Debug("Process task as active.", tag.WorkflowNamespaceID(namespaceID), tag.Value(executable.GetTask()))
return true
}