Merge pull request #2965 from weaveworks/2959-lowcost-noop-upgrade

make report upgrading fast when it's a no-op
This commit is contained in:
Matthias Radestock
2017-12-08 10:48:41 +00:00
committed by GitHub
2 changed files with 26 additions and 0 deletions

View File

@@ -67,6 +67,20 @@ func BenchmarkReportMerge(b *testing.B) {
}
}
func BenchmarkReportUpgrade(b *testing.B) {
reports, err := readReportFiles(*benchReportPath)
if err != nil {
b.Fatal(err)
}
r := NewSmartMerger().Merge(reports)
b.ResetTimer()
for i := 0; i < b.N; i++ {
r.Upgrade()
}
}
func BenchmarkTopologyList(b *testing.B) {
benchmarkRender(b, func(report report.Report) {
request := &http.Request{

View File

@@ -341,6 +341,18 @@ func (r Report) Validate() error {
//
// This for now creates node's LatestControls from Controls.
func (r Report) Upgrade() Report {
needUpgrade := false
r.WalkTopologies(func(topology *Topology) {
for _, node := range topology.Nodes {
if node.LatestControls.Size() == 0 && len(node.Controls.Controls) > 0 {
needUpgrade = true
}
}
})
if !needUpgrade {
return r
}
cp := r.Copy()
ncd := NodeControlData{
Dead: false,