[VOL-3891] Avoid runtime error due to null instruction, adding also logs for further debugging
Change-Id: Ibec27f73a7b4dc50422864761609ca4404e4ef9b
diff --git a/internal/pkg/openflow/stats.go b/internal/pkg/openflow/stats.go
index ccf7d7d..1cd656e 100644
--- a/internal/pkg/openflow/stats.go
+++ b/internal/pkg/openflow/stats.go
@@ -343,6 +343,7 @@
if err != nil {
return nil, err
}
+ logger.Debugw(ctx, "logicalDeviceFlows", log.Fields{"flows": resp})
var flows []*ofp.FlowStatsEntry
for _, item := range resp.GetItems() {
entry := ofp.NewFlowStatsEntry()
@@ -363,16 +364,24 @@
for _, oxmField := range pbMatch.GetOxmFields() {
field := oxmField.GetField()
ofbField := field.(*openflow_13.OfpOxmField_OfbField).OfbField
- iOxm := parseOxm(ctx, ofbField)
- fields = append(fields, iOxm)
+ iOxm, err := parseOxm(ctx, ofbField)
+ if err == nil {
+ fields = append(fields, iOxm)
+ } else {
+ logger.Errorw(ctx, "error-parsing-oxm", log.Fields{"err": err})
+ }
}
match.OxmList = fields
entry.SetMatch(*match)
var instructions []ofp.IInstruction
for _, ofpInstruction := range item.Instructions {
- instruction := parseInstructions(ctx, ofpInstruction)
- instructions = append(instructions, instruction)
+ instruction, err := parseInstructions(ctx, ofpInstruction)
+ if err == nil {
+ instructions = append(instructions, instruction)
+ } else {
+ logger.Errorw(ctx, "error-parsing-instruction", log.Fields{"err": err})
+ }
}
entry.Instructions = instructions
flows = append(flows, entry)
@@ -475,7 +484,10 @@
for _, item := range reply.GetItems() {
desc := item.GetDesc()
- buckets := volthaBucketsToOpenflow(ctx, desc.Buckets)
+ buckets, err := volthaBucketsToOpenflow(ctx, desc.Buckets)
+ if err != nil {
+ return nil, err
+ }
groupDesc := &ofp.GroupDescStatsEntry{
GroupType: volthaGroupTypeToOpenflow(ctx, desc.Type),