VOL-4613: Sometimes the ONUs are stuck in ACTIVATING state after Disable and Enable of the OLT
Change-Id: Ie6f3ce5cd3c97c07f9bb22d5a4dc420efcfe67a8
diff --git a/internal/pkg/onuadaptercore/mib_sync.go b/internal/pkg/onuadaptercore/mib_sync.go
index 3439375..5ac2d15 100644
--- a/internal/pkg/onuadaptercore/mib_sync.go
+++ b/internal/pkg/onuadaptercore/mib_sync.go
@@ -403,6 +403,9 @@
func (oo *OnuDeviceEntry) processMibSyncMessages(ctx context.Context) {
logger.Debugw(ctx, "MibSync Msg", log.Fields{"Start routine to process OMCI-messages for device-id": oo.deviceID})
+ oo.mutexMibSyncMsgProcessorRunning.Lock()
+ oo.mibSyncMsgProcessorRunning = true
+ oo.mutexMibSyncMsgProcessorRunning.Unlock()
loop:
for {
// case <-ctx.Done():
@@ -411,6 +414,9 @@
message, ok := <-oo.pMibUploadFsm.commChan
if !ok {
logger.Info(ctx, "MibSync Msg", log.Fields{"Message couldn't be read from channel for device-id": oo.deviceID})
+ oo.mutexMibSyncMsgProcessorRunning.Lock()
+ oo.mibSyncMsgProcessorRunning = false
+ oo.mutexMibSyncMsgProcessorRunning.Unlock()
break loop
}
logger.Debugw(ctx, "MibSync Msg", log.Fields{"Received message on ONU MibSyncChan for device-id": oo.deviceID})
@@ -420,6 +426,9 @@
msg, _ := message.Data.(TestMessage)
if msg.TestMessageVal == AbortMessageProcessing {
logger.Debugw(ctx, "MibSync Msg abort ProcessMsg", log.Fields{"for device-id": oo.deviceID})
+ oo.mutexMibSyncMsgProcessorRunning.Lock()
+ oo.mibSyncMsgProcessorRunning = false
+ oo.mutexMibSyncMsgProcessorRunning.Unlock()
break loop
}
oo.handleTestMsg(ctx, msg)
@@ -1105,6 +1114,8 @@
if oo.baseDeviceHandler.isReconciling() {
oo.baseDeviceHandler.stopReconciling(ctx, false)
}
+ oo.mutexMibSyncMsgProcessorRunning.RLock()
+ defer oo.mutexMibSyncMsgProcessorRunning.RUnlock()
//the MibSync FSM might be active all the ONU-active time,
// hence it must be stopped unconditionally
pMibUlFsm := oo.pMibUploadFsm
diff --git a/internal/pkg/onuadaptercore/onu_device_entry.go b/internal/pkg/onuadaptercore/onu_device_entry.go
index 5de76bc..18bd1ef 100644
--- a/internal/pkg/onuadaptercore/onu_device_entry.go
+++ b/internal/pkg/onuadaptercore/onu_device_entry.go
@@ -300,9 +300,11 @@
//mibNextDbResync uint32
// for mibUpload
- pMibUploadFsm *AdapterFsm //could be handled dynamically and more general as pAdapterFsm - perhaps later
- mutexLastTxParamStruct sync.RWMutex
- lastTxParamStruct sLastTxMeParameter
+ pMibUploadFsm *AdapterFsm //could be handled dynamically and more general as pAdapterFsm - perhaps later
+ mutexLastTxParamStruct sync.RWMutex
+ lastTxParamStruct sLastTxMeParameter
+ mibSyncMsgProcessorRunning bool
+ mutexMibSyncMsgProcessorRunning sync.RWMutex
// for mibDownload
pMibDownloadFsm *AdapterFsm //could be handled dynamically and more general as pAdapterFsm - perhaps later
//remark: general usage of pAdapterFsm would require generalization of commChan usage and internal event setting