feat: publish v1.0.0-rc.36-custom.1
Publish Docker image (Multi-arch) / Build & push (amd64) (push) Failing after 9m20s
Release (Linux, macOS, Windows) / Linux Release (push) Failing after 55m7s
Publish Docker image (Multi-arch) / Build & push (arm64) (push) Canceled after 0s
Release (Linux, macOS, Windows) / macOS Release (push) Canceled after 0s
Release (Linux, macOS, Windows) / Windows Release (push) Canceled after 0s
Publish Docker image (Multi-arch) / Create multi-arch manifests (push) Canceled after 0s
Publish Docker image (Multi-arch) / Build & push (amd64) (push) Failing after 9m20s
Release (Linux, macOS, Windows) / Linux Release (push) Failing after 55m7s
Publish Docker image (Multi-arch) / Build & push (arm64) (push) Canceled after 0s
Release (Linux, macOS, Windows) / macOS Release (push) Canceled after 0s
Release (Linux, macOS, Windows) / Windows Release (push) Canceled after 0s
Publish Docker image (Multi-arch) / Create multi-arch manifests (push) Canceled after 0s
This commit is contained in:
commit
bb7968b612
2381 files changed
+551494
No files matched your search
@@ -0,0 +1,115 @@
|
||||
package dto
|
||||
|
||||
type ChannelPinSource string
|
||||
|
||||
const (
|
||||
PinSourceToken ChannelPinSource = "token" // Rank 0, highest
|
||||
PinSourceOriginTask ChannelPinSource = "origin_task" // Rank 10
|
||||
)
|
||||
|
||||
const (
|
||||
PinRankToken = 0
|
||||
PinRankOriginTask = 10
|
||||
)
|
||||
|
||||
type PinRetryMode int
|
||||
|
||||
const (
|
||||
PinRetrySameChannel PinRetryMode = iota
|
||||
PinRetrySingleAttempt
|
||||
)
|
||||
|
||||
func (m PinRetryMode) Stricter(other PinRetryMode) PinRetryMode {
|
||||
if m == PinRetrySingleAttempt || other == PinRetrySingleAttempt {
|
||||
return PinRetrySingleAttempt
|
||||
}
|
||||
return PinRetrySameChannel
|
||||
}
|
||||
|
||||
type ChannelPin struct {
|
||||
ChannelId int
|
||||
Source ChannelPinSource
|
||||
Rank int
|
||||
RetryMode PinRetryMode
|
||||
}
|
||||
|
||||
type ChannelFilterKind string
|
||||
|
||||
const (
|
||||
FilterRequestPath ChannelFilterKind = "request_path"
|
||||
FilterTaskPluginIdentity ChannelFilterKind = "task_plugin_identity"
|
||||
)
|
||||
|
||||
type ChannelFilter struct {
|
||||
Kind ChannelFilterKind
|
||||
RequestPath string
|
||||
TaskPluginKey string
|
||||
TaskPluginChannelTypes []int
|
||||
}
|
||||
|
||||
type ChannelConstraints struct {
|
||||
Pins []ChannelPin
|
||||
Filters []ChannelFilter
|
||||
}
|
||||
|
||||
func (cc *ChannelConstraints) AddPin(p ChannelPin) {
|
||||
if cc == nil {
|
||||
return
|
||||
}
|
||||
cc.Pins = append(cc.Pins, p)
|
||||
}
|
||||
|
||||
func (cc *ChannelConstraints) AddFilter(f ChannelFilter) {
|
||||
if cc == nil {
|
||||
return
|
||||
}
|
||||
cc.Filters = append(cc.Filters, f)
|
||||
}
|
||||
|
||||
// ResolvedPin returns the winning pin after priority resolution.
|
||||
// Lowest Rank wins. Pins that name the same channel are merged (stricter RetryMode).
|
||||
// overridden lists pins that lost to a different channel (for warn logging).
|
||||
func (cc *ChannelConstraints) ResolvedPin() (ChannelPin, bool, []ChannelPin) {
|
||||
if cc == nil || len(cc.Pins) == 0 {
|
||||
return ChannelPin{}, false, nil
|
||||
}
|
||||
|
||||
merged := make(map[int]ChannelPin, len(cc.Pins))
|
||||
order := make([]int, 0, len(cc.Pins))
|
||||
for _, pin := range cc.Pins {
|
||||
existing, seen := merged[pin.ChannelId]
|
||||
if !seen {
|
||||
merged[pin.ChannelId] = pin
|
||||
order = append(order, pin.ChannelId)
|
||||
continue
|
||||
}
|
||||
existing.RetryMode = existing.RetryMode.Stricter(pin.RetryMode)
|
||||
if pin.Rank < existing.Rank {
|
||||
existing.Rank = pin.Rank
|
||||
existing.Source = pin.Source
|
||||
}
|
||||
merged[pin.ChannelId] = existing
|
||||
}
|
||||
|
||||
winner := merged[order[0]]
|
||||
for _, channelID := range order[1:] {
|
||||
candidate := merged[channelID]
|
||||
if candidate.Rank < winner.Rank {
|
||||
winner = candidate
|
||||
}
|
||||
}
|
||||
|
||||
var overridden []ChannelPin
|
||||
for _, channelID := range order {
|
||||
candidate := merged[channelID]
|
||||
if candidate.ChannelId != winner.ChannelId {
|
||||
overridden = append(overridden, candidate)
|
||||
}
|
||||
}
|
||||
return winner, true, overridden
|
||||
}
|
||||
|
||||
func (cc *ChannelConstraints) SuppressesRetry() bool {
|
||||
pin, found, _ := cc.ResolvedPin()
|
||||
return found && pin.RetryMode == PinRetrySingleAttempt
|
||||
}
|
||||
Reference in new issue
Block a user