mirror of https://github.com/hashicorp/consul
perf: Remove expensive reflection from raft/mesh hot path (#16552)
* perf: Remove expensive reflection from raft/mesh hot path Replaces a reflection-based copy of a struct in the mesh topology with a deep-copy generated implementation. This is in the hot-path of raft FSM updates, and the reflection overhead was a substantial part of mesh registration times (~90%). This could manifest as raft thread saturation, and resulting instability. Co-authored-by: Joel Brandhorst <joel.brandhorst@gmail.com> * add changelog --------- Co-authored-by: Joel Brandhorst <joel.brandhorst@gmail.com> Co-authored-by: John Murret <john.murret@hashicorp.com>pull/17494/head
parent
7177aadbf2
commit
3605fde865
@ -0,0 +1,3 @@
|
||||
```release-note:improvement
|
||||
raft: Remove expensive reflection from raft/mesh hot path
|
||||
```
|
@ -0,0 +1,15 @@
|
||||
// generated by deep-copy -pointer-receiver -o ./catalog_schema.deepcopy.go -type upstreamDownstream ./; DO NOT EDIT.
|
||||
|
||||
package state
|
||||
|
||||
// DeepCopy generates a deep copy of *upstreamDownstream
|
||||
func (o *upstreamDownstream) DeepCopy() *upstreamDownstream {
|
||||
var cp upstreamDownstream = *o
|
||||
if o.Refs != nil {
|
||||
cp.Refs = make(map[string]struct{}, len(o.Refs))
|
||||
for k2, v2 := range o.Refs {
|
||||
cp.Refs[k2] = v2
|
||||
}
|
||||
}
|
||||
return &cp
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
readonly PACKAGE_DIR="$(dirname "${BASH_SOURCE[0]}")"
|
||||
cd $PACKAGE_DIR
|
||||
|
||||
# Uses: https://github.com/globusdigital/deep-copy
|
||||
deep-copy \
|
||||
-pointer-receiver \
|
||||
-o ./catalog_schema.deepcopy.go \
|
||||
-type upstreamDownstream \
|
||||
./
|
Loading…
Reference in new issue