mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-09-27 14:26:11 -04:00
2c5a714903
* generate .pb.go * health checker conf * check logic * implement ping * fix check interval * improve check results * health check on add outbounds * fix tests * fix ping handler * fix min rtt < 0 * random alive * fix check all on add outbounds * least load strategy * conf codes optimize * improve least load strategy * improve health check on AddOutboundHandler * cleanup results with scheduler code optimize * health ping timeout default 5s * remove config of health ping round round 1 seems to be good enough * fix TestSimpleBalancer * add TestLeastLoadBalancer * add todos * lint and test fix * balancer fallback * api health stats command * add hc cmd to perform health checks * rename 'health stats' cmd to hci * many code optimizations * fix typo * select none if no match for baselines only config > prev 'select 1' behavior can achieved by baselines+expected=1 * add LeastLoadStrategy tests * don't select alive on no match, go to fallback * api hci refactor * more detailed info * ready for future new strategies * apply lint style * refactor: strategies don't need ref of balancer * change check interval unit to seconds > to reduce influence caused by what is described by new added FIXME * fix test * RouterService->RoutingService * Revert "generate .pb.go" This reverts commit 0e6fa1be889470d0ad9692f7279da45c030e1919. * make checks distributed > but `api hc` is the exception * BalancingStrategy interface optimize * fix random selects unchecked * upgrade cmd hci to bi & rename hc to bc * bi shows all balancers, while hci shows only heath-check-enabled ones * shows more info * fix test * api bi sort output * update according to review * remove checks on add outbound * refactor: move health checker inside to strategy * enables rounds setting for health ping * restore the random behavior, no ping, no pick alive > if future strategy based on HealthPing, just embed it like what LeastLoad does * apply lint style * code optimize * fix typo * update desc of bc bi * ping with head code optimize * force rouds to 1 if checks not distributed * leatload: select by standard deviations * health ping refactor * continuously applying results * config is easier to understand * checker interfaces simplifying * add maxRTT config to filter away high delay nodes * apply lint * cost for leastload * api bo to override balancer selecting * fix health ping statistics & fix test * check connectivity if ping fail * add tolerance setting & more detailed bi output * fix connectivity check * optimize bi output * should not put results when network is down * fixes @_@ * mux optimize * remove pause option of selecting overriding > it causes data racing * update bo desc * fix potential racing * simplify locking * switch sync.Mutex to avoid potential racing * add more tests * code optimize * code optimize * fix connectivity check when url not set
23 lines
836 B
Go
23 lines
836 B
Go
package routing
|
|
|
|
import "time"
|
|
|
|
// BalancingStrategy is the interface for balancing strategies
|
|
type BalancingStrategy interface {
|
|
// Pick pick one outbound from candidates. Unlike the SelectAndPick(),
|
|
// it skips the select procedure (select all & pick one).
|
|
Pick(candidates []string) string
|
|
// SelectAndPick selects qualified nodes from candidates then pick one.
|
|
SelectAndPick(candidates []string) string
|
|
// GetInformation gets information of the strategy
|
|
GetInformation(tags []string) *StrategyInfo
|
|
}
|
|
|
|
// BalancingOverrider is the interface of those who can override
|
|
// the selecting of its balancers
|
|
type BalancingOverrider interface {
|
|
// OverrideSelecting overrides the selects of specified balancer, for 'validity'
|
|
// duration of time.
|
|
OverrideSelecting(balancer string, selects []string, validity time.Duration) error
|
|
}
|