VOL-2632 Error propagation from HashFlowStats
Change-Id: If2872e97e2b6c3c751f64dadfef47bfde3a77551
diff --git a/rw_core/core/logical_device_agent.go b/rw_core/core/logical_device_agent.go
index cfd486a..fc9dd92 100644
--- a/rw_core/core/logical_device_agent.go
+++ b/rw_core/core/logical_device_agent.go
@@ -814,6 +814,7 @@
var flows []*ofp.OfpFlowStats
var meters []*ofp.OfpMeterEntry
var flow *ofp.OfpFlowStats
+ var err error
if lDevice.Flows != nil && lDevice.Flows.Items != nil {
flows = lDevice.Flows.Items
@@ -832,13 +833,19 @@
log.Warnw("overlapped-flows", log.Fields{"logicaldeviceId": agent.logicalDeviceID})
} else {
// Add flow
- flow = fu.FlowStatsEntryFromFlowModMessage(mod)
+ flow, err = fu.FlowStatsEntryFromFlowModMessage(mod)
+ if err != nil {
+ return err
+ }
flows = append(flows, flow)
updatedFlows = append(updatedFlows, flow)
changed = true
}
} else {
- flow = fu.FlowStatsEntryFromFlowModMessage(mod)
+ flow, err = fu.FlowStatsEntryFromFlowModMessage(mod)
+ if err != nil {
+ return err
+ }
idx := fu.FindFlows(flows, flow)
if idx >= 0 {
oldFlow := flows[idx]
@@ -964,7 +971,11 @@
toDelete := make([]*ofp.OfpFlowStats, 0)
for _, f := range flows {
// Check whether the flow and the flowmod matches
- if fu.FlowMatch(f, fu.FlowStatsEntryFromFlowModMessage(mod)) {
+ fs, err := fu.FlowStatsEntryFromFlowModMessage(mod)
+ if err != nil {
+ return err
+ }
+ if fu.FlowMatch(f, fs) {
toDelete = append(toDelete, f)
continue
}
@@ -1098,7 +1109,10 @@
changedFlow := false
changedMeter := false
- flow := fu.FlowStatsEntryFromFlowModMessage(mod)
+ flow, err := fu.FlowStatsEntryFromFlowModMessage(mod)
+ if err != nil {
+ return err
+ }
flowsToDelete := make([]*ofp.OfpFlowStats, 0)
idx := fu.FindFlows(flows, flow)
if idx >= 0 {