Log part-merged nodes dropped to tracing

So we have more idea what happened, in case of issue.
This commit is contained in:
Bryan Boreham
2021-04-23 10:51:24 +00:00
parent 4dbf908cde
commit 33acfa1e59
5 changed files with 19 additions and 7 deletions
+2 -2
View File
@@ -479,7 +479,7 @@ func (r *Registry) makeTopologyList(rep Reporter) CtxHandlerFunc {
respondWith(ctx, w, http.StatusInternalServerError, err)
return
}
report.UnsafeRemovePartMergedNodes()
report.UnsafeRemovePartMergedNodes(ctx)
respondWith(ctx, w, http.StatusOK, r.renderTopologies(ctx, report, req))
}
}
@@ -580,7 +580,7 @@ func (r *Registry) captureRenderer(rep Reporter, f rendererHandler) CtxHandlerFu
respondWith(ctx, w, http.StatusInternalServerError, err)
return
}
rpt.UnsafeRemovePartMergedNodes()
rpt.UnsafeRemovePartMergedNodes(ctx)
req.ParseForm()
renderer, filter, err := r.RendererForTopology(topologyID, req.Form, rpt)
if err != nil {
+1 -1
View File
@@ -182,7 +182,7 @@ func (wc *websocketState) update(ctx context.Context) error {
if err != nil {
return errors.Wrap(err, "Error generating report")
}
re.UnsafeRemovePartMergedNodes()
re.UnsafeRemovePartMergedNodes(ctx)
renderer, filter, err := topologyRegistry.RendererForTopology(wc.topologyID, wc.values, re)
if err != nil {
return errors.Wrap(err, "Error generating report")
+1 -1
View File
@@ -87,7 +87,7 @@ func getReport(b *testing.B) report.Report {
func benchmarkRender(b *testing.B, f func(report.Report)) {
r := getReport(b)
r.UnsafeRemovePartMergedNodes()
r.UnsafeRemovePartMergedNodes(context.Background())
b.ResetTimer()
for i := 0; i < b.N; i++ {
b.StopTimer()
+1 -1
View File
@@ -52,7 +52,7 @@ func TestCollector(t *testing.T) {
merged := report.MakeReport()
merged.UnsafeMerge(r1)
merged.UnsafeMerge(r2)
merged.UnsafeRemovePartMergedNodes()
merged.UnsafeRemovePartMergedNodes(context.Background())
have, err = c.Report(ctx, mtime.Now())
if err != nil {
t.Error(err)
+14 -2
View File
@@ -1,11 +1,14 @@
package report
import (
"context"
"fmt"
"math/rand"
"strings"
"time"
opentracing "github.com/opentracing/opentracing-go"
"github.com/weaveworks/scope/common/xfer"
)
@@ -367,14 +370,23 @@ func (r *Report) UnsafeUnMerge(other Report) {
// E.g. if a node is removed from source between two full reports, then we
// might only have a delta of its last state. Remove that from the set.
// The original is modified.
func (r *Report) UnsafeRemovePartMergedNodes() {
r.WalkTopologies(func(t *Topology) {
func (r *Report) UnsafeRemovePartMergedNodes(ctx context.Context) {
dropped := map[string]int{}
r.WalkNamedTopologies(func(name string, t *Topology) {
for k, v := range t.Nodes {
if v.isPartMerged() {
delete(t.Nodes, k)
dropped[name]++
}
}
})
if span := opentracing.SpanFromContext(ctx); span != nil && len(dropped) > 0 {
msg := ""
for name, count := range dropped {
msg += fmt.Sprintf("%s: %d, ", name, count)
}
span.LogKV("dropped-part-merged", msg)
}
}
// WalkTopologies iterates through the Topologies of the report,