xt

package
v0.21.22 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 29, 2022 License: Apache-2.0 Imports: 7 Imported by: 6

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Precedences = struct {
	// Required terminators should always be used in preference to non-required terminators
	// Example: The current active node in an active/passive setup. If the strategy determintes
	//          that the current active has failed, it will drop the precedence and mark some other
	//          terminator as Required
	Required Precedence

	// Default precedence is where terminators start
	Default Precedence

	// Failed means this terminator should only be used if all other terminators are also in a failed state
	// Example: A strategy might move a terminator to Failed if three dials in a row fail
	Failed Precedence

	// Unknown means this terminator was likely recently removed and should not be used
	unknown Precedence
}{
	Required: &precedence{
		name:    "required",
		minCost: requireMinCost,
		maxCost: defaultMinCost - 1,
	},
	Default: &precedence{
		name:    "default",
		minCost: defaultMinCost,
		maxCost: failedMinCost - 1,
	},
	Failed: &precedence{
		name:    "failed",
		minCost: failedMinCost,
		maxCost: unknownMinCost - 1,
	},
	// contains filtered or unexported fields
}

Precedences define the precedence levels

Functions

This section is empty.

Types

type CostedTerminator

type CostedTerminator interface {
	Terminator
	GetRouteCost() uint32
}

func GetRelatedTerminators

func GetRelatedTerminators(list []CostedTerminator) []CostedTerminator

In a list which is sorted by precedence, returns the terminators which have the same precedence as that of the first entry in the list

type Costs

type Costs interface {
	SetPrecedenceChangeHandler(f func(terminatorId string, precedence Precedence))
	ClearCost(terminatorId string)
	SetPrecedence(terminatorId string, precedence Precedence)
	SetDynamicCost(terminatorId string, weight uint16)
	UpdateDynamicCost(terminatorId string, updateF func(uint16) uint16)
	GetDynamicCost(terminatorId string) uint16
}

func GlobalCosts

func GlobalCosts() Costs

type DefaultEventVisitor

type DefaultEventVisitor struct{}

func (DefaultEventVisitor) VisitCircuitRemoved added in v0.16.92

func (visitor DefaultEventVisitor) VisitCircuitRemoved(TerminatorEvent)

func (DefaultEventVisitor) VisitDialFailed

func (visitor DefaultEventVisitor) VisitDialFailed(TerminatorEvent)

func (DefaultEventVisitor) VisitDialSucceeded

func (visitor DefaultEventVisitor) VisitDialSucceeded(TerminatorEvent)

type EventVisitor

type EventVisitor interface {
	VisitDialFailed(event TerminatorEvent)
	VisitDialSucceeded(event TerminatorEvent)
	VisitCircuitRemoved(event TerminatorEvent)
}

type Factory

type Factory interface {
	GetStrategyName() string
	NewStrategy() Strategy
}

type FailureCosts

type FailureCosts interface {
	Failure(terminatorId string) uint16
	Success(terminatorId string) uint16
	Clear(terminatorId string)
	CreditOverTime(credit uint8, period time.Duration) *time.Ticker
}

func NewFailureCosts

func NewFailureCosts(maxFailureCost uint16, failureCost uint8, successCredit uint8) FailureCosts

type PeerData added in v0.11.58

type PeerData map[uint32][]byte

type Precedence

type Precedence interface {
	fmt.Stringer

	IsFailed() bool
	IsDefault() bool
	IsRequired() bool
	Unbias(cost uint32) uint32
	GetBiasedCost(cost uint32) uint32
	// contains filtered or unexported methods
}

func GetPrecedenceForName added in v0.13.0

func GetPrecedenceForName(name string) Precedence

type Registry

type Registry interface {
	RegisterFactory(factory Factory)
	GetStrategy(name string) (Strategy, error)
}

func GlobalRegistry

func GlobalRegistry() Registry

type Stats

type Stats interface {
	GetCost() uint32
	GetPrecedence() Precedence
}

type Strategy

type Strategy interface {
	Select(terminators []CostedTerminator) (CostedTerminator, error)
	HandleTerminatorChange(event StrategyChangeEvent) error
	NotifyEvent(event TerminatorEvent)
}

type StrategyChangeEvent

type StrategyChangeEvent interface {
	GetServiceId() string
	GetCurrent() []Terminator
	GetAdded() []Terminator
	GetChanged() []Terminator
	GetRemoved() []Terminator
}

func NewStrategyChangeEvent

func NewStrategyChangeEvent(serviceId string, current, added, changed, removed []Terminator) StrategyChangeEvent

type Terminator

type Terminator interface {
	GetId() string
	GetPrecedence() Precedence
	GetCost() uint16
	GetServiceId() string
	GetInstanceId() string
	GetRouterId() string
	GetBinding() string
	GetAddress() string
	GetPeerData() PeerData
	GetCreatedAt() time.Time
	GetHostId() string
}

func TList

func TList(terminators ...Terminator) []Terminator

type TerminatorEvent

type TerminatorEvent interface {
	GetTerminator() Terminator
	Accept(visitor EventVisitor)
}

func NewCircuitRemoved added in v0.16.92

func NewCircuitRemoved(terminator Terminator) TerminatorEvent

func NewDialFailedEvent

func NewDialFailedEvent(terminator Terminator) TerminatorEvent

func NewDialSucceeded

func NewDialSucceeded(terminator Terminator) TerminatorEvent

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL