mirror of https://github.com/hashicorp/consul
Backport of Decouple xds capacity controller and raft-autopilot into release/1.15.x (#20548)
* backport of commitpull/20590/head1668a314c6
* backport of commitd33eda97be
* Backport DeliverLatest func. --------- Co-authored-by: Derek Menteer <derek.menteer@hashicorp.com>
parent
ce4d60998c
commit
7e39aa3760
@ -0,0 +1,3 @@
|
||||
```release-note:bug
|
||||
connect: Remove code coupling where the xDS capacity controller could negatively affect raft autopilot performance.
|
||||
```
|
@ -0,0 +1,35 @@
|
||||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
package channels
|
||||
|
||||
import "fmt"
|
||||
|
||||
// DeliverLatest will drain the channel discarding any messages if there are any and sends the current message.
|
||||
func DeliverLatest[T any](val T, ch chan T) error {
|
||||
// Send if chan is empty
|
||||
select {
|
||||
case ch <- val:
|
||||
return nil
|
||||
default:
|
||||
}
|
||||
|
||||
// If it falls through to here, the channel is not empty.
|
||||
// Drain the channel.
|
||||
done := false
|
||||
for !done {
|
||||
select {
|
||||
case <-ch:
|
||||
continue
|
||||
default:
|
||||
done = true
|
||||
}
|
||||
}
|
||||
|
||||
// Attempt to send again. If it is not empty, throw an error
|
||||
select {
|
||||
case ch <- val:
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("failed to deliver latest event: chan full again after draining")
|
||||
}
|
||||
}
|
Loading…
Reference in new issue