VOL-3065: Concurrent metrics context map access causing panic
Change-Id: I4c949a9df36c16e80a83cc4e19de382cd4648aec
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index d6cb1e6..ff3aac8 100644
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -764,7 +764,6 @@
func startCollector(dh *DeviceHandler) {
logger.Debugf("starting-collector")
- context := make(map[string]string)
freq := dh.metrics.ToPmConfigs().DefaultFreq
for {
select {
@@ -772,18 +771,16 @@
logger.Debugw("stopping-collector-for-olt", log.Fields{"deviceID:": dh.device.Id})
return
case <-time.After(time.Duration(freq) * time.Second):
- context["oltid"] = dh.device.Id
- context["devicetype"] = dh.device.Type
+
ports := make([]*voltha.Port, len(dh.device.Ports))
copy(ports, dh.device.Ports)
-
for _, port := range ports {
// NNI Stats
if port.Type == voltha.Port_ETHERNET_NNI {
intfID := PortNoToIntfID(port.PortNo, voltha.Port_ETHERNET_NNI)
cmnni := dh.portStats.collectNNIMetrics(intfID)
logger.Debugw("collect-nni-metrics", log.Fields{"metrics": cmnni})
- go dh.portStats.publishMetrics(cmnni, port, context, dh.device.Id)
+ go dh.portStats.publishMetrics(cmnni, port, dh.device.Id, dh.device.Type)
logger.Debugw("publish-nni-metrics", log.Fields{"nni-port": port.Label})
}
// PON Stats
@@ -792,7 +789,7 @@
if val, ok := dh.activePorts.Load(intfID); ok && val == true {
cmpon := dh.portStats.collectPONMetrics(intfID)
logger.Debugw("collect-pon-metrics", log.Fields{"metrics": cmpon})
- go dh.portStats.publishMetrics(cmpon, port, context, dh.device.Id)
+ go dh.portStats.publishMetrics(cmpon, port, dh.device.Id, dh.device.Type)
}
logger.Debugw("publish-pon-metrics", log.Fields{"pon-port": port.Label})
}