[VOL-3628] ATT scenario subscriber add/remove: synchronized flow and tech profile handling + correction clear persistent data
Signed-off-by: mpagenko <michael.pagenkopf@adtran.com>
Change-Id: Id77ba0e8b537b49663439f86b0d84734dba6cf23
diff --git a/internal/pkg/onuadaptercore/device_handler.go b/internal/pkg/onuadaptercore/device_handler.go
index 4dce9b5..49bdaaa 100644
--- a/internal/pkg/onuadaptercore/device_handler.go
+++ b/internal/pkg/onuadaptercore/device_handler.go
@@ -652,7 +652,7 @@
logger.Errorw("error-updating-device-state", log.Fields{"device-id": dh.deviceID, "error": err})
}
- logger.Debugw("DeviceReasonUpdate upon re-enable", log.Fields{
+ logger.Debugw("DeviceReasonUpdate upon disable", log.Fields{
"reason": "omci-admin-lock", "device-id": dh.deviceID})
// DeviceReason to update acc.to modified py code as per beginning of Sept 2020
if err := dh.coreProxy.DeviceReasonUpdate(context.TODO(), dh.deviceID, "omci-admin-lock"); err != nil {
@@ -697,7 +697,11 @@
return
}
if err := pDevEntry.restoreDataFromOnuKvStore(context.TODO()); err != nil {
- logger.Errorw("reconciling - restoring OnuTp-data failed - abort", log.Fields{"err": err, "device-id": dh.deviceID})
+ if err == fmt.Errorf("no-ONU-data-found") {
+ logger.Debugw("no persistent data found - abort reconciling", log.Fields{"device-id": dh.deviceID})
+ } else {
+ logger.Errorw("reconciling - restoring OnuTp-data failed - abort", log.Fields{"err": err, "device-id": dh.deviceID})
+ }
dh.reconciling = false
return
}
@@ -783,13 +787,14 @@
dh.reconciling = false
}
-func (dh *deviceHandler) deleteDevice(device *voltha.Device) error {
- logger.Debugw("delete-device", log.Fields{"device-id": device.Id, "SerialNumber": device.SerialNumber})
+func (dh *deviceHandler) deleteDevicePersistencyData() error {
+ logger.Debugw("delete device persistency data", log.Fields{"device-id": dh.deviceID})
- pDevEntry := dh.getOnuDeviceEntry(true)
+ pDevEntry := dh.getOnuDeviceEntry(false)
if pDevEntry == nil {
- logger.Errorw("No valid OnuDevice - aborting", log.Fields{"device-id": dh.deviceID})
- return fmt.Errorf("no valid OnuDevice: %s", dh.deviceID)
+ //IfDevEntry does not exist here, no problem - no persistent data should have been stored
+ logger.Debugw("OnuDevice does not exist - nothing to delete", log.Fields{"device-id": dh.deviceID})
+ return nil
}
pDevEntry.lockOnuKVStoreMutex()
defer pDevEntry.unlockOnuKVStoreMutex()
@@ -1339,6 +1344,7 @@
// (but note that the deviceReason may also have changed to e.g. TechProf*Delete_Success in between)
if dh.deviceReason != "stopping-openomci" {
logger.Debugw("updateInterface-started - stopping-device", log.Fields{"device-id": dh.deviceID})
+
//stop all running FSM processing - make use of the DH-state as mirrored in the deviceReason
//here no conflict with aborted FSM's should arise as a complete OMCI initialization is assumed on ONU-Up
//but that might change with some simple MDS check on ONU-Up treatment -> attention!!!
@@ -1348,6 +1354,8 @@
// abort: system behavior is just unstable ...
return err
}
+ //all stored persitent data are not valid anymore (loosing knowledge abouit the connected ONU)
+ _ = dh.deleteDevicePersistencyData() //ignore possible errors here and continue, hope is that data is synchronized with new ONU-Up
//deviceEntry stop without omciCC reset here, regarding the OMCI_CC still valid for this ONU
// - in contrary to disableDevice - compare with processUniDisableStateDoneEvent
@@ -1441,6 +1449,10 @@
//VlanFilterFsm exists and was already started
pVlanFilterStatemachine := pVlanFilterFsm.pAdaptFsm.pFsm
if pVlanFilterStatemachine != nil {
+ //reset of all Fsm is always accompagnied by global persistency data removal
+ // no need to remove specific data
+ pVlanFilterFsm.RequestClearPersistency(false)
+ //and reset the UniVlanConfig FSM
_ = pVlanFilterStatemachine.Event(vlanEvReset)
}
}
@@ -2313,7 +2325,7 @@
logger.Debugw("reconciling - don't store persistent UniFlowConfig", log.Fields{"device-id": dh.deviceID})
return nil
}
- logger.Debugw("Store persistent UniFlowConfig", log.Fields{"device-id": dh.deviceID})
+ logger.Debugw("Store or clear persistent UniFlowConfig", log.Fields{"device-id": dh.deviceID})
pDevEntry := dh.getOnuDeviceEntry(true)
if pDevEntry == nil {