summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOndrej Fabry <ofabry@cisco.com>2019-04-16 15:13:18 +0200
committerOndrej Fabry <ofabry@cisco.com>2019-04-16 15:13:18 +0200
commite24215b47ad5cd6599973c3a76a375b99ad75d44 (patch)
tree773af3a27691137635132b5a9953458d36306bc1
parentdf1b888a2bfadefadc7dbfce59d34f811ff002ec (diff)
Fix crash in stats for removed interfaces/nodes
Change-Id: I36b4cd2625c7f0c5846fe402be7b2aeece4707f8 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
-rw-r--r--adapter/vppapiclient/stat_client.go7
-rw-r--r--core/stats.go6
2 files changed, 10 insertions, 3 deletions
diff --git a/adapter/vppapiclient/stat_client.go b/adapter/vppapiclient/stat_client.go
index a2a9826..55705bd 100644
--- a/adapter/vppapiclient/stat_client.go
+++ b/adapter/vppapiclient/stat_client.go
@@ -285,10 +285,11 @@ func (c *statClient) DumpStats(patterns ...string) (stats []*adapter.StatEntry,
var vector []adapter.Name
for k := 0; k < length; k++ {
s := C.govpp_stat_segment_data_get_name_vector_index(&v, C.int(k))
- if s == nil {
- continue
+ var name adapter.Name
+ if s != nil {
+ name = adapter.Name(C.GoString(s))
}
- vector = append(vector, adapter.Name(C.GoString(s)))
+ vector = append(vector, name)
}
stat.Data = adapter.NameStat(vector)
diff --git a/core/stats.go b/core/stats.go
index 4cbd9f2..48b516c 100644
--- a/core/stats.go
+++ b/core/stats.go
@@ -196,6 +196,9 @@ func (c *StatsConnection) GetNodeStats() (*api.NodeStats, error) {
}
}
for i, v := range perNode {
+ if len(nodeStats.Nodes) <= i {
+ break
+ }
nodeCounters := nodeStats.Nodes[i]
fn(&nodeCounters, v)
nodeStats.Nodes[i] = nodeCounters
@@ -257,6 +260,9 @@ func (c *StatsConnection) GetInterfaceStats() (*api.InterfaceStats, error) {
}
}
for i, v := range perIf {
+ if len(ifStats.Interfaces) <= i {
+ break
+ }
ifCounters := ifStats.Interfaces[i]
fn(&ifCounters, v)
ifStats.Interfaces[i] = ifCounters