Skip to content

Commit

Permalink
xds/internal/balancer/outlierdetection: Switch Outlier Detection to u…
Browse files Browse the repository at this point in the history
…se new duration field (#6286)
  • Loading branch information
zasweq authored May 18, 2023
1 parent 417d4b6 commit 098b2d0
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 92 deletions.
6 changes: 3 additions & 3 deletions xds/internal/balancer/cdsbalancer/cdsbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,9 +308,9 @@ func outlierDetectionToConfig(od *xdsresource.OutlierDetection) outlierdetection
}

return outlierdetection.LBConfig{
Interval: od.Interval,
BaseEjectionTime: od.BaseEjectionTime,
MaxEjectionTime: od.MaxEjectionTime,
Interval: internalserviceconfig.Duration(od.Interval),
BaseEjectionTime: internalserviceconfig.Duration(od.BaseEjectionTime),
MaxEjectionTime: internalserviceconfig.Duration(od.MaxEjectionTime),
MaxEjectionPercent: od.MaxEjectionPercent,
SuccessRateEjection: sre,
FailurePercentageEjection: fpe,
Expand Down
24 changes: 12 additions & 12 deletions xds/internal/balancer/cdsbalancer/cdsbalancer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -444,9 +444,9 @@ func (s) TestHandleClusterUpdate(t *testing.T) {
LBPolicy: wrrLocalityLBConfigJSON,
},
wantCCS: edsCCS(serviceName, nil, false, wrrLocalityLBConfig, outlierdetection.LBConfig{
Interval: 10 * time.Second,
BaseEjectionTime: 30 * time.Second,
MaxEjectionTime: 300 * time.Second,
Interval: internalserviceconfig.Duration(10 * time.Second),
BaseEjectionTime: internalserviceconfig.Duration(30 * time.Second),
MaxEjectionTime: internalserviceconfig.Duration(300 * time.Second),
MaxEjectionPercent: 10,
SuccessRateEjection: &outlierdetection.SuccessRateEjection{
StdevFactor: 1900,
Expand Down Expand Up @@ -918,9 +918,9 @@ func (s) TestOutlierDetectionToConfig(t *testing.T) {
FailurePercentageRequestVolume: 50,
},
odLBCfgWant: outlierdetection.LBConfig{
Interval: 10 * time.Second,
BaseEjectionTime: 30 * time.Second,
MaxEjectionTime: 300 * time.Second,
Interval: internalserviceconfig.Duration(10 * time.Second),
BaseEjectionTime: internalserviceconfig.Duration(30 * time.Second),
MaxEjectionTime: internalserviceconfig.Duration(300 * time.Second),
MaxEjectionPercent: 10,
SuccessRateEjection: nil,
FailurePercentageEjection: &outlierdetection.FailurePercentageEjection{
Expand Down Expand Up @@ -951,9 +951,9 @@ func (s) TestOutlierDetectionToConfig(t *testing.T) {
FailurePercentageRequestVolume: 50,
},
odLBCfgWant: outlierdetection.LBConfig{
Interval: 10 * time.Second,
BaseEjectionTime: 30 * time.Second,
MaxEjectionTime: 300 * time.Second,
Interval: internalserviceconfig.Duration(10 * time.Second),
BaseEjectionTime: internalserviceconfig.Duration(30 * time.Second),
MaxEjectionTime: internalserviceconfig.Duration(300 * time.Second),
MaxEjectionPercent: 10,
SuccessRateEjection: &outlierdetection.SuccessRateEjection{
StdevFactor: 1900,
Expand Down Expand Up @@ -981,9 +981,9 @@ func (s) TestOutlierDetectionToConfig(t *testing.T) {
FailurePercentageRequestVolume: 50,
},
odLBCfgWant: outlierdetection.LBConfig{
Interval: 10 * time.Second,
BaseEjectionTime: 30 * time.Second,
MaxEjectionTime: 300 * time.Second,
Interval: internalserviceconfig.Duration(10 * time.Second),
BaseEjectionTime: internalserviceconfig.Duration(30 * time.Second),
MaxEjectionTime: internalserviceconfig.Duration(300 * time.Second),
MaxEjectionPercent: 10,
SuccessRateEjection: &outlierdetection.SuccessRateEjection{
StdevFactor: 1900,
Expand Down
18 changes: 9 additions & 9 deletions xds/internal/balancer/outlierdetection/balancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -225,9 +225,9 @@ func (b *outlierDetectionBalancer) onIntervalConfig() {
for _, addrInfo := range b.addrs {
addrInfo.callCounter.clear()
}
interval = b.cfg.Interval
interval = time.Duration(b.cfg.Interval)
} else {
interval = b.cfg.Interval - now().Sub(b.timerStartTime)
interval = time.Duration(b.cfg.Interval) - now().Sub(b.timerStartTime)
if interval < 0 {
interval = 0
}
Expand Down Expand Up @@ -589,14 +589,14 @@ func (b *outlierDetectionBalancer) Target() string {
return b.cc.Target()
}

func max(x, y int64) int64 {
func max(x, y time.Duration) time.Duration {
if x < y {
return y
}
return x
}

func min(x, y int64) int64 {
func min(x, y time.Duration) time.Duration {
if x < y {
return x
}
Expand Down Expand Up @@ -754,10 +754,10 @@ func (b *outlierDetectionBalancer) intervalTimerAlgorithm() {
// to uneject the address below.
continue
}
et := b.cfg.BaseEjectionTime.Nanoseconds() * addrInfo.ejectionTimeMultiplier
met := max(b.cfg.BaseEjectionTime.Nanoseconds(), b.cfg.MaxEjectionTime.Nanoseconds())
curTimeAfterEt := now().After(addrInfo.latestEjectionTimestamp.Add(time.Duration(min(et, met))))
if curTimeAfterEt {
et := time.Duration(b.cfg.BaseEjectionTime) * time.Duration(addrInfo.ejectionTimeMultiplier)
met := max(time.Duration(b.cfg.BaseEjectionTime), time.Duration(b.cfg.MaxEjectionTime))
uet := addrInfo.latestEjectionTimestamp.Add(min(et, met))
if now().After(uet) {
b.unejectAddress(addrInfo)
}
}
Expand All @@ -767,7 +767,7 @@ func (b *outlierDetectionBalancer) intervalTimerAlgorithm() {
if b.intervalTimer != nil {
b.intervalTimer.Stop()
}
b.intervalTimer = afterFunc(b.cfg.Interval, b.intervalTimerAlgorithm)
b.intervalTimer = afterFunc(time.Duration(b.cfg.Interval), b.intervalTimerAlgorithm)
}

// addrsWithAtLeastRequestVolume returns a slice of address information of all
Expand Down
Loading

0 comments on commit 098b2d0

Please sign in to comment.