[VOL-5104] - BBSIM crashed when adding flows
Change-Id: I57aa8a3b9007ec77c94612b0c0537f1827b78902
diff --git a/internal/bbsim/devices/olt.go b/internal/bbsim/devices/olt.go
index 46b57b9..bbe49bc 100644
--- a/internal/bbsim/devices/olt.go
+++ b/internal/bbsim/devices/olt.go
@@ -1180,7 +1180,9 @@
return nil, err
}
- o.storeGemPortIdByFlow(flow)
+ if err := o.storeGemPortIdByFlow(flow); err != nil {
+ return nil, err
+ }
o.storeAllocId(flow)
msg := types.Message{
@@ -1744,7 +1746,7 @@
}
}
-func (o *OltDevice) storeGemPortId(ponId uint32, onuId uint32, portNo uint32, gemId int32, flowId uint64) {
+func (o *OltDevice) storeGemPortId(ponId uint32, onuId uint32, portNo uint32, gemId int32, flowId uint64) error {
o.GemPortIDsLock.Lock()
defer o.GemPortIDsLock.Unlock()
@@ -1756,6 +1758,7 @@
"GemportId": gemId,
"FlowId": flowId,
}).Error("trying-to-store-gemport-for-unknown-onu")
+ return fmt.Errorf("failed-trying-to-store-gemport-%d-for-unknown-onu-%d-and-IntfId-%d", gemId, onuId, ponId)
}
oltLogger.WithFields(log.Fields{
@@ -1773,9 +1776,11 @@
o.GemPortIDs[ponId][onuId][portNo][gemId] = make(map[uint64]bool)
}
o.GemPortIDs[ponId][onuId][portNo][gemId][flowId] = true
+
+ return nil
}
-func (o *OltDevice) storeGemPortIdByFlow(flow *openolt.Flow) {
+func (o *OltDevice) storeGemPortIdByFlow(flow *openolt.Flow) error {
oltLogger.WithFields(log.Fields{
"IntfId": flow.AccessIntfId,
"OnuId": flow.OnuId,
@@ -1788,11 +1793,19 @@
if flow.ReplicateFlow {
for _, gem := range flow.PbitToGemport {
- o.storeGemPortId(uint32(flow.AccessIntfId), uint32(flow.OnuId), flow.PortNo, int32(gem), flow.FlowId)
+ err := o.storeGemPortId(uint32(flow.AccessIntfId), uint32(flow.OnuId), flow.PortNo, int32(gem), flow.FlowId)
+ if err != nil {
+ return err
+ }
}
} else {
- o.storeGemPortId(uint32(flow.AccessIntfId), uint32(flow.OnuId), flow.PortNo, flow.GemportId, flow.FlowId)
+ err := o.storeGemPortId(uint32(flow.AccessIntfId), uint32(flow.OnuId), flow.PortNo, flow.GemportId, flow.FlowId)
+ if err != nil {
+ return err
+ }
}
+
+ return nil
}
func (o *OltDevice) freeGemPortId(flow *openolt.Flow) {