VOL-4077: Improve storage usage on etcd
- the onu adapter will now receive the tp instance on the
inter-container kafka message and need not reach the etcd store
to fetch it.
- on reconcile, the onu adapter need to go to the kv store to
fetch the tp instance, but request the tp instance via a new
API towards openolt adapter which in-turn will fetch from the
cache.
- re-org the code in onu-metrics-manager to restore pm-data
on reconcile to avoid panics by accessing uninitialzed data
if ani-fsm were to try adding gem port for monitoring
before pm-data is initialized properly.
Change-Id: I82a6de2772155f6e08390b671fe26d692dd02c99
diff --git a/internal/pkg/onuadaptercore/adapter_download_manager.go b/internal/pkg/onuadaptercore/adapter_download_manager.go
index 0bf8857..6803aed 100644
--- a/internal/pkg/onuadaptercore/adapter_download_manager.go
+++ b/internal/pkg/onuadaptercore/adapter_download_manager.go
@@ -32,7 +32,7 @@
"github.com/opencord/voltha-protos/v4/go/voltha"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
)
// ### downloadToAdapter related definitions ####
diff --git a/internal/pkg/onuadaptercore/alarm_manager.go b/internal/pkg/onuadaptercore/alarm_manager.go
index 8fac689..0dbc5b8 100644
--- a/internal/pkg/onuadaptercore/alarm_manager.go
+++ b/internal/pkg/onuadaptercore/alarm_manager.go
@@ -28,8 +28,8 @@
"github.com/looplab/fsm"
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/events/eventif"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/events/eventif"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
"github.com/opencord/voltha-protos/v4/go/voltha"
)
diff --git a/internal/pkg/onuadaptercore/common.go b/internal/pkg/onuadaptercore/common.go
index e011f04..0a39a7e 100644
--- a/internal/pkg/onuadaptercore/common.go
+++ b/internal/pkg/onuadaptercore/common.go
@@ -18,7 +18,7 @@
package adaptercoreonu
import (
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
)
var logger log.CLogger
diff --git a/internal/pkg/onuadaptercore/device_handler.go b/internal/pkg/onuadaptercore/device_handler.go
index 00cc09b..e5444d4 100644
--- a/internal/pkg/onuadaptercore/device_handler.go
+++ b/internal/pkg/onuadaptercore/device_handler.go
@@ -21,6 +21,7 @@
"context"
"errors"
"fmt"
+ "github.com/opencord/voltha-protos/v4/go/tech_profile"
"strconv"
"sync"
"time"
@@ -29,11 +30,11 @@
"github.com/golang/protobuf/ptypes"
"github.com/looplab/fsm"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/adapters/adapterif"
- "github.com/opencord/voltha-lib-go/v4/pkg/db"
- "github.com/opencord/voltha-lib-go/v4/pkg/events/eventif"
- flow "github.com/opencord/voltha-lib-go/v4/pkg/flows"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/adapters/adapterif"
+ "github.com/opencord/voltha-lib-go/v5/pkg/db"
+ "github.com/opencord/voltha-lib-go/v5/pkg/events/eventif"
+ flow "github.com/opencord/voltha-lib-go/v5/pkg/flows"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
vc "github.com/opencord/voltha-protos/v4/go/common"
"github.com/opencord/voltha-protos/v4/go/extension"
ic "github.com/opencord/voltha-protos/v4/go/inter_container"
@@ -138,6 +139,7 @@
drReconcileFailed = 13
drReconcileMaxTimeout = 14
drReconcileCanceled = 15
+ drTechProfileConfigDownloadFailed = 16
)
var deviceReasonMap = map[uint8]string{
@@ -147,6 +149,7 @@
drDiscoveryMibsyncComplete: "discovery-mibsync-complete",
drInitialMibDownloaded: "initial-mib-downloaded",
drTechProfileConfigDownloadSuccess: "tech-profile-config-download-success",
+ drTechProfileConfigDownloadFailed: "tech-profile-config-download-failed",
drOmciFlowsPushed: "omci-flows-pushed",
drOmciAdminLock: "omci-admin-lock",
drOnuReenabled: "onu-reenabled",
@@ -409,52 +412,59 @@
techProfMsg.UniId, dh.deviceID))
}
uniID := uint8(techProfMsg.UniId)
- tpID, err := GetTpIDFromTpPath(techProfMsg.Path)
+ tpID, err := GetTpIDFromTpPath(techProfMsg.TpInstancePath)
if err != nil {
- logger.Errorw(ctx, "error-parsing-tpid-from-tppath", log.Fields{"err": err, "tp-path": techProfMsg.Path})
+ logger.Errorw(ctx, "error-parsing-tpid-from-tppath", log.Fields{"err": err, "tp-path": techProfMsg.TpInstancePath})
return err
}
- logger.Debugw(ctx, "unmarshal-techprof-msg-body", log.Fields{"uniID": uniID, "tp-path": techProfMsg.Path, "tpID": tpID})
+ logger.Debugw(ctx, "unmarshal-techprof-msg-body", log.Fields{"uniID": uniID, "tp-path": techProfMsg.TpInstancePath, "tpID": tpID})
- if bTpModify := pDevEntry.updateOnuUniTpPath(ctx, uniID, uint8(tpID), techProfMsg.Path); bTpModify {
- logger.Debugw(ctx, "onu-uni-tp-path-modified", log.Fields{"uniID": uniID, "tp-path": techProfMsg.Path, "tpID": tpID})
- // if there has been some change for some uni TechProfilePath
- //in order to allow concurrent calls to other dh instances we do not wait for execution here
- //but doing so we can not indicate problems to the caller (who does what with that then?)
- //by now we just assume straightforward successful execution
- //TODO!!! Generally: In this scheme it would be good to have some means to indicate
- // possible problems to the caller later autonomously
+ if bTpModify := pDevEntry.updateOnuUniTpPath(ctx, uniID, uint8(tpID), techProfMsg.TpInstancePath); bTpModify {
- // deadline context to ensure completion of background routines waited for
- //20200721: 10s proved to be less in 8*8 ONU test on local vbox machine with debug, might be further adapted
- deadline := time.Now().Add(dh.pOpenOnuAc.maxTimeoutInterAdapterComm) //allowed run time to finish before execution
- dctx, cancel := context.WithDeadline(context.Background(), deadline)
+ switch tpInst := techProfMsg.TechTpInstance.(type) {
+ case *ic.InterAdapterTechProfileDownloadMessage_TpInstance:
+ logger.Debugw(ctx, "onu-uni-tp-path-modified", log.Fields{"uniID": uniID, "tp-path": techProfMsg.TpInstancePath, "tpID": tpID})
+ // if there has been some change for some uni TechProfilePath
+ //in order to allow concurrent calls to other dh instances we do not wait for execution here
+ //but doing so we can not indicate problems to the caller (who does what with that then?)
+ //by now we just assume straightforward successful execution
+ //TODO!!! Generally: In this scheme it would be good to have some means to indicate
+ // possible problems to the caller later autonomously
- dh.pOnuTP.resetTpProcessingErrorIndication(uniID, tpID)
+ // deadline context to ensure completion of background routines waited for
+ //20200721: 10s proved to be less in 8*8 ONU test on local vbox machine with debug, might be further adapted
+ deadline := time.Now().Add(dh.pOpenOnuAc.maxTimeoutInterAdapterComm) //allowed run time to finish before execution
+ dctx, cancel := context.WithDeadline(context.Background(), deadline)
- var wg sync.WaitGroup
- wg.Add(1) // for the 1 go routine to finish
- // attention: deadline completion check and wg.Done is to be done in both routines
- go dh.pOnuTP.configureUniTp(log.WithSpanFromContext(dctx, ctx), uniID, techProfMsg.Path, &wg)
- dh.waitForCompletion(ctx, cancel, &wg, "TechProfDwld") //wait for background process to finish
- if tpErr := dh.pOnuTP.getTpProcessingErrorIndication(uniID, tpID); tpErr != nil {
- logger.Errorw(ctx, "error-processing-tp", log.Fields{"device-id": dh.deviceID, "err": tpErr, "tp-path": techProfMsg.Path})
- return tpErr
+ dh.pOnuTP.resetTpProcessingErrorIndication(uniID, tpID)
+
+ var wg sync.WaitGroup
+ wg.Add(1) // for the 1 go routine to finish
+ // attention: deadline completion check and wg.Done is to be done in both routines
+ go dh.pOnuTP.configureUniTp(log.WithSpanFromContext(dctx, ctx), uniID, techProfMsg.TpInstancePath, *tpInst.TpInstance, &wg)
+ dh.waitForCompletion(ctx, cancel, &wg, "TechProfDwld") //wait for background process to finish
+ if tpErr := dh.pOnuTP.getTpProcessingErrorIndication(uniID, tpID); tpErr != nil {
+ logger.Errorw(ctx, "error-processing-tp", log.Fields{"device-id": dh.deviceID, "err": tpErr, "tp-path": techProfMsg.TpInstancePath})
+ return tpErr
+ }
+ deadline = time.Now().Add(dh.pOpenOnuAc.maxTimeoutInterAdapterComm) //allowed run time to finish before execution
+ dctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
+ pDevEntry.resetKvProcessingErrorIndication()
+ wg.Add(1) // for the 1 go routine to finish
+ go pDevEntry.updateOnuKvStore(log.WithSpanFromContext(dctx2, ctx), &wg)
+ dh.waitForCompletion(ctx, cancel2, &wg, "TechProfDwld") //wait for background process to finish
+ if kvErr := pDevEntry.getKvProcessingErrorIndication(); kvErr != nil {
+ logger.Errorw(ctx, "error-updating-KV", log.Fields{"device-id": dh.deviceID, "err": kvErr, "tp-path": techProfMsg.TpInstancePath})
+ return kvErr
+ }
+ return nil
+ default:
+ logger.Errorw(ctx, "unsupported-tp-instance-type", log.Fields{"tp-path": techProfMsg.TpInstancePath})
+ return fmt.Errorf("unsupported-tp-instance-type--tp-id-%v", techProfMsg.TpInstancePath)
}
- deadline = time.Now().Add(dh.pOpenOnuAc.maxTimeoutInterAdapterComm) //allowed run time to finish before execution
- dctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
- pDevEntry.resetKvProcessingErrorIndication()
- wg.Add(1) // for the 1 go routine to finish
- go pDevEntry.updateOnuKvStore(log.WithSpanFromContext(dctx2, ctx), &wg)
- dh.waitForCompletion(ctx, cancel2, &wg, "TechProfDwld") //wait for background process to finish
- if kvErr := pDevEntry.getKvProcessingErrorIndication(); kvErr != nil {
- logger.Errorw(ctx, "error-updating-KV", log.Fields{"device-id": dh.deviceID, "err": kvErr, "tp-path": techProfMsg.Path})
- return kvErr
- }
- return nil
}
// no change, nothing really to do - return success
- logger.Debugw(ctx, "onu-uni-tp-path-not-modified", log.Fields{"uniID": uniID, "tp-path": techProfMsg.Path, "tpID": tpID})
+ logger.Debugw(ctx, "onu-uni-tp-path-not-modified", log.Fields{"uniID": uniID, "tp-path": techProfMsg.TpInstancePath, "tpID": tpID})
return nil
}
@@ -493,9 +503,9 @@
delGemPortMsg.UniId, dh.deviceID))
}
uniID := uint8(delGemPortMsg.UniId)
- tpID, err := GetTpIDFromTpPath(delGemPortMsg.TpPath)
+ tpID, err := GetTpIDFromTpPath(delGemPortMsg.TpInstancePath)
if err != nil {
- logger.Errorw(ctx, "error-extracting-tp-id-from-tp-path", log.Fields{"err": err, "tp-path": delGemPortMsg.TpPath})
+ logger.Errorw(ctx, "error-extracting-tp-id-from-tp-path", log.Fields{"err": err, "tp-path": delGemPortMsg.TpInstancePath})
return err
}
@@ -509,7 +519,7 @@
var wg sync.WaitGroup
wg.Add(1) // for the 1 go routine to finish
- go dh.pOnuTP.deleteTpResource(log.WithSpanFromContext(dctx, ctx), uniID, tpID, delGemPortMsg.TpPath,
+ go dh.pOnuTP.deleteTpResource(log.WithSpanFromContext(dctx, ctx), uniID, tpID, delGemPortMsg.TpInstancePath,
cResourceGemPort, delGemPortMsg.GemPortId, &wg)
dh.waitForCompletion(ctx, cancel, &wg, "GemDelete") //wait for background process to finish
@@ -551,7 +561,7 @@
delTcontMsg.UniId, dh.deviceID))
}
uniID := uint8(delTcontMsg.UniId)
- tpPath := delTcontMsg.TpPath
+ tpPath := delTcontMsg.TpInstancePath
tpID, err := GetTpIDFromTpPath(tpPath)
if err != nil {
logger.Errorw(ctx, "error-extracting-tp-id-from-tp-path", log.Fields{"err": err, "tp-path": tpPath})
@@ -569,7 +579,7 @@
var wg sync.WaitGroup
wg.Add(2) // for the 2 go routines to finish
- go dh.pOnuTP.deleteTpResource(log.WithSpanFromContext(dctx, ctx), uniID, tpID, delTcontMsg.TpPath,
+ go dh.pOnuTP.deleteTpResource(log.WithSpanFromContext(dctx, ctx), uniID, tpID, delTcontMsg.TpInstancePath,
cResourceTcont, delTcontMsg.AllocId, &wg)
// Removal of the tcont/alloc id mapping represents the removal of the tech profile
go pDevEntry.updateOnuKvStore(log.WithSpanFromContext(dctx, ctx), &wg)
@@ -822,7 +832,7 @@
} else {
logger.Errorw(ctx, "reconciling - restoring OnuTp-data failed - abort", log.Fields{"err": err, "device-id": dh.deviceID})
}
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, false)
return
}
var onuIndication oop.OnuIndication
@@ -842,7 +852,7 @@
if pDevEntry == nil {
logger.Errorw(ctx, "No valid OnuDevice - aborting", log.Fields{"device-id": dh.deviceID})
if !dh.isSkipOnuConfigReconciling() {
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, false)
}
return
}
@@ -855,12 +865,14 @@
logger.Debugw(ctx, "reconciling - no uni-configs have been stored before adapter restart - terminate reconcilement",
log.Fields{"device-id": dh.deviceID})
if !dh.isSkipOnuConfigReconciling() {
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, true)
}
return
}
- techProfsFound := false
flowsFound := false
+ techProfsFound := false
+ techProfInstLoadFailed := false
+outerLoop:
for _, uniData := range pDevEntry.sOnuPersistentData.PersUniConfig {
//TODO: check for uni-port specific reconcilement in case of multi-uni-port-per-onu-support
if len(uniData.PersTpPathMap) == 0 {
@@ -868,8 +880,31 @@
log.Fields{"uni-id": uniData.PersUniID, "device-id": dh.deviceID})
continue
}
- techProfsFound = true
+ techProfsFound = true // set to true if we found TP once for any UNI port
for tpID := range uniData.PersTpPathMap {
+ // Request the TpInstance again from the openolt adapter in case of reconcile
+ iaTechTpInst, err := dh.AdapterProxy.TechProfileInstanceRequest(ctx, uniData.PersTpPathMap[tpID],
+ dh.device.ParentPortNo, dh.device.ProxyAddress.OnuId, uint32(uniData.PersUniID),
+ dh.pOpenOnuAc.config.Topic, dh.ProxyAddressType,
+ dh.parentID, dh.ProxyAddressID)
+ if err != nil || iaTechTpInst == nil {
+ logger.Errorw(ctx, "error fetching tp instance",
+ log.Fields{"tp-id": tpID, "tpPath": uniData.PersTpPathMap[tpID], "uni-id": uniData.PersUniID, "device-id": dh.deviceID, "err": err})
+ techProfInstLoadFailed = true // stop loading tp instance as soon as we hit failure
+ break outerLoop
+ }
+ var tpInst tech_profile.TechProfileInstance
+ switch techTpInst := iaTechTpInst.TechTpInstance.(type) {
+ case *ic.InterAdapterTechProfileDownloadMessage_TpInstance: // supports only GPON, XGPON, XGS-PON
+ tpInst = *techTpInst.TpInstance
+ logger.Debugw(ctx, "received-tp-instance-successfully-after-reconcile", log.Fields{"tp-id": tpID, "tpPath": uniData.PersTpPathMap[tpID], "uni-id": uniData.PersUniID, "device-id": dh.deviceID})
+
+ default: // do not support epon or other tech
+ logger.Errorw(ctx, "unsupported-tech", log.Fields{"tp-id": tpID, "tpPath": uniData.PersTpPathMap[tpID], "uni-id": uniData.PersUniID, "device-id": dh.deviceID})
+ techProfInstLoadFailed = true // stop loading tp instance as soon as we hit failure
+ break outerLoop
+ }
+
// deadline context to ensure completion of background routines waited for
//20200721: 10s proved to be less in 8*8 ONU test on local vbox machine with debug, might be further adapted
deadline := time.Now().Add(dh.pOpenOnuAc.maxTimeoutInterAdapterComm) //allowed run time to finish before execution
@@ -878,10 +913,12 @@
dh.pOnuTP.resetTpProcessingErrorIndication(uniData.PersUniID, tpID)
var wg sync.WaitGroup
wg.Add(1) // for the 1 go routine to finish
- go dh.pOnuTP.configureUniTp(log.WithSpanFromContext(dctx, ctx), uniData.PersUniID, uniData.PersTpPathMap[tpID], &wg)
+ go dh.pOnuTP.configureUniTp(log.WithSpanFromContext(dctx, ctx), uniData.PersUniID, uniData.PersTpPathMap[tpID], tpInst, &wg)
dh.waitForCompletion(ctx, cancel, &wg, "TechProfReconcile") //wait for background process to finish
if err := dh.pOnuTP.getTpProcessingErrorIndication(uniData.PersUniID, tpID); err != nil {
logger.Errorw(ctx, err.Error(), log.Fields{"device-id": dh.deviceID})
+ techProfInstLoadFailed = true // stop loading tp instance as soon as we hit failure
+ break outerLoop
}
}
if len(uniData.PersFlowParams) != 0 {
@@ -892,18 +929,22 @@
logger.Debugw(ctx, "reconciling - no TPs have been stored before adapter restart - terminate reconcilement",
log.Fields{"device-id": dh.deviceID})
if !dh.isSkipOnuConfigReconciling() {
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, true)
}
return
}
- if dh.isSkipOnuConfigReconciling() {
+ if techProfInstLoadFailed {
+ dh.setDeviceReason(drTechProfileConfigDownloadFailed)
+ dh.stopReconciling(ctx, false)
+ return
+ } else if dh.isSkipOnuConfigReconciling() {
dh.setDeviceReason(drTechProfileConfigDownloadSuccess)
}
if !flowsFound {
logger.Debugw(ctx, "reconciling - no flows have been stored before adapter restart - terminate reconcilement",
log.Fields{"device-id": dh.deviceID})
if !dh.isSkipOnuConfigReconciling() {
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, true)
}
}
}
@@ -915,7 +956,7 @@
if pDevEntry == nil {
logger.Errorw(ctx, "No valid OnuDevice - aborting", log.Fields{"device-id": dh.deviceID})
if !dh.isSkipOnuConfigReconciling() {
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, false)
}
return
}
@@ -926,7 +967,7 @@
logger.Debugw(ctx, "reconciling - no uni-configs have been stored before adapter restart - terminate reconcilement",
log.Fields{"device-id": dh.deviceID})
if !dh.isSkipOnuConfigReconciling() {
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, true)
}
return
}
@@ -951,7 +992,7 @@
logger.Errorw(ctx, "reconciling - onuUniPort data not found - terminate reconcilement",
log.Fields{"uniNo": uniNo, "device-id": dh.deviceID})
if !dh.isSkipOnuConfigReconciling() {
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, false)
}
return
}
@@ -997,7 +1038,7 @@
logger.Debugw(ctx, "reconciling - no flows have been stored before adapter restart - terminate reconcilement",
log.Fields{"device-id": dh.deviceID})
if !dh.isSkipOnuConfigReconciling() {
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, true)
}
return
}
@@ -1008,7 +1049,7 @@
func (dh *deviceHandler) reconcileEnd(ctx context.Context) {
logger.Debugw(ctx, "reconciling - completed!", log.Fields{"device-id": dh.deviceID})
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, true)
}
func (dh *deviceHandler) deleteDevicePersistencyData(ctx context.Context) error {
@@ -1752,7 +1793,7 @@
pDevEntry.mutexPersOnuConfig.RUnlock()
logger.Debugw(ctx, "reconciling - uni-ports were not unlocked before adapter restart - resume with a normal start-up",
log.Fields{"device-id": dh.deviceID})
- dh.stopReconciling(ctx)
+ dh.stopReconciling(ctx, true)
} else {
pDevEntry.mutexPersOnuConfig.RUnlock()
}
@@ -2715,6 +2756,7 @@
logger.Debugw(ctx, "SetKVStoreBackend", log.Fields{"IpTarget": dh.pOpenOnuAc.KVStoreAddress,
"BasePathKvStore": aBasePathKvStore, "device-id": dh.deviceID})
+ // kvbackend := db.NewBackend(ctx, dh.pOpenOnuAc.KVStoreType, dh.pOpenOnuAc.KVStoreAddress, dh.pOpenOnuAc.KVStoreTimeout, aBasePathKvStore)
kvbackend := &db.Backend{
Client: dh.pOpenOnuAc.kvClient,
StoreType: dh.pOpenOnuAc.KVStoreType,
@@ -3614,10 +3656,10 @@
dh.mutexReconcilingFlag.Unlock()
}
-func (dh *deviceHandler) stopReconciling(ctx context.Context) {
- logger.Debugw(ctx, "stop reconciling", log.Fields{"device-id": dh.deviceID})
+func (dh *deviceHandler) stopReconciling(ctx context.Context, success bool) {
+ logger.Debugw(ctx, "stop reconciling", log.Fields{"device-id": dh.deviceID, "success": success})
if dh.isReconciling() {
- dh.chReconcilingFinished <- true
+ dh.chReconcilingFinished <- success
} else {
logger.Infow(ctx, "reconciling is not running", log.Fields{"device-id": dh.deviceID})
}
diff --git a/internal/pkg/onuadaptercore/file_download_manager.go b/internal/pkg/onuadaptercore/file_download_manager.go
index b75c319..d283606 100644
--- a/internal/pkg/onuadaptercore/file_download_manager.go
+++ b/internal/pkg/onuadaptercore/file_download_manager.go
@@ -29,7 +29,7 @@
"sync"
"time"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
"github.com/opencord/voltha-protos/v4/go/voltha"
)
diff --git a/internal/pkg/onuadaptercore/mib_download.go b/internal/pkg/onuadaptercore/mib_download.go
index 305a647..be63ead 100644
--- a/internal/pkg/onuadaptercore/mib_download.go
+++ b/internal/pkg/onuadaptercore/mib_download.go
@@ -26,7 +26,7 @@
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
//ic "github.com/opencord/voltha-protos/v4/go/inter_container"
//"github.com/opencord/voltha-protos/v4/go/openflow_13"
//"github.com/opencord/voltha-protos/v4/go/voltha"
diff --git a/internal/pkg/onuadaptercore/mib_sync.go b/internal/pkg/onuadaptercore/mib_sync.go
index 8104d51..567a3f4 100644
--- a/internal/pkg/onuadaptercore/mib_sync.go
+++ b/internal/pkg/onuadaptercore/mib_sync.go
@@ -31,11 +31,11 @@
//"sync"
"time"
- //"github.com/opencord/voltha-lib-go/v4/pkg/kafka"
+ //"github.com/opencord/voltha-lib-go/v5/pkg/kafka"
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/db/kvstore"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/db/kvstore"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
//ic "github.com/opencord/voltha-protos/v4/go/inter_container"
//"github.com/opencord/voltha-protos/v4/go/openflow_13"
//"github.com/opencord/voltha-protos/v4/go/voltha"
@@ -330,7 +330,7 @@
if success {
logger.Debugw(ctx, "reconciling flows has been finished in time",
log.Fields{"device-id": oo.deviceID})
- oo.baseDeviceHandler.stopReconciling(ctx)
+ oo.baseDeviceHandler.stopReconciling(ctx, true)
_ = oo.pMibUploadFsm.pFsm.Event(ulEvSuccess)
} else {
@@ -1093,7 +1093,7 @@
oo.baseDeviceHandler.chReconcilingFlowsFinished <- false
}
if oo.baseDeviceHandler.isReconciling() {
- oo.baseDeviceHandler.chReconcilingFinished <- false
+ oo.baseDeviceHandler.stopReconciling(ctx, false)
}
//the MibSync FSM might be active all the ONU-active time,
// hence it must be stopped unconditionally
diff --git a/internal/pkg/onuadaptercore/omci_ani_config.go b/internal/pkg/onuadaptercore/omci_ani_config.go
index b6ca5e4..94cf938 100644
--- a/internal/pkg/onuadaptercore/omci_ani_config.go
+++ b/internal/pkg/onuadaptercore/omci_ani_config.go
@@ -30,7 +30,7 @@
"github.com/looplab/fsm"
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
//ic "github.com/opencord/voltha-protos/v4/go/inter_container"
//"github.com/opencord/voltha-protos/v4/go/openflow_13"
//"github.com/opencord/voltha-protos/v4/go/voltha"
@@ -1374,7 +1374,7 @@
_ = oFsm.pAdaptFsm.pFsm.Event(aniEvReset)
return
}
- // Mark the gem port to be removed for Performance History monitoring
+ // Mark the gem port to be added for Performance History monitoring
if oFsm.pDeviceHandler.pOnuMetricsMgr != nil {
oFsm.pDeviceHandler.pOnuMetricsMgr.AddGemPortForPerfMonitoring(ctx, gemPortAttribs.gemPortID)
}
diff --git a/internal/pkg/onuadaptercore/omci_cc.go b/internal/pkg/onuadaptercore/omci_cc.go
index edeab97..713426c 100644
--- a/internal/pkg/onuadaptercore/omci_cc.go
+++ b/internal/pkg/onuadaptercore/omci_cc.go
@@ -33,11 +33,11 @@
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/adapters/adapterif"
+ "github.com/opencord/voltha-lib-go/v5/pkg/adapters/adapterif"
- //"github.com/opencord/voltha-lib-go/v4/pkg/kafka"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
"github.com/opencord/voltha-protos/v4/go/common"
+ //"github.com/opencord/voltha-lib-go/v5/pkg/kafka"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
ic "github.com/opencord/voltha-protos/v4/go/inter_container"
//"github.com/opencord/voltha-protos/v4/go/openflow_13"
//"github.com/opencord/voltha-protos/v4/go/voltha"
diff --git a/internal/pkg/onuadaptercore/omci_onu_upgrade.go b/internal/pkg/onuadaptercore/omci_onu_upgrade.go
index b21291f..4f0ac62 100644
--- a/internal/pkg/onuadaptercore/omci_onu_upgrade.go
+++ b/internal/pkg/onuadaptercore/omci_onu_upgrade.go
@@ -29,7 +29,7 @@
"github.com/looplab/fsm"
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
"github.com/opencord/voltha-protos/v4/go/voltha"
)
diff --git a/internal/pkg/onuadaptercore/omci_self_test_handler.go b/internal/pkg/onuadaptercore/omci_self_test_handler.go
index 55116b6..2e968fb 100644
--- a/internal/pkg/onuadaptercore/omci_self_test_handler.go
+++ b/internal/pkg/onuadaptercore/omci_self_test_handler.go
@@ -23,7 +23,7 @@
"github.com/looplab/fsm"
"github.com/opencord/omci-lib-go"
"github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
"github.com/opencord/voltha-protos/v4/go/extension"
"sync"
"time"
diff --git a/internal/pkg/onuadaptercore/omci_test_request.go b/internal/pkg/onuadaptercore/omci_test_request.go
index d11133e..f0b76dc 100644
--- a/internal/pkg/onuadaptercore/omci_test_request.go
+++ b/internal/pkg/onuadaptercore/omci_test_request.go
@@ -28,8 +28,8 @@
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- //"github.com/opencord/voltha-lib-go/v4/pkg/kafka"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ //"github.com/opencord/voltha-lib-go/v5/pkg/kafka"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
//ic "github.com/opencord/voltha-protos/v4/go/inter_container"
//"github.com/opencord/voltha-protos/v4/go/openflow_13"
//"github.com/opencord/voltha-protos/v4/go/voltha"
diff --git a/internal/pkg/onuadaptercore/omci_vlan_config.go b/internal/pkg/onuadaptercore/omci_vlan_config.go
index a18a216..d95a8a7 100644
--- a/internal/pkg/onuadaptercore/omci_vlan_config.go
+++ b/internal/pkg/onuadaptercore/omci_vlan_config.go
@@ -31,7 +31,7 @@
"github.com/looplab/fsm"
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
of "github.com/opencord/voltha-protos/v4/go/openflow_13"
)
diff --git a/internal/pkg/onuadaptercore/onu_device_db.go b/internal/pkg/onuadaptercore/onu_device_db.go
index 46638e1..83f419b 100644
--- a/internal/pkg/onuadaptercore/onu_device_db.go
+++ b/internal/pkg/onuadaptercore/onu_device_db.go
@@ -25,7 +25,7 @@
"sync"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
)
type meDbMap map[me.ClassID]map[uint16]me.AttributeValueMap
diff --git a/internal/pkg/onuadaptercore/onu_device_entry.go b/internal/pkg/onuadaptercore/onu_device_entry.go
index 6302bc7..a6a51e1 100644
--- a/internal/pkg/onuadaptercore/onu_device_entry.go
+++ b/internal/pkg/onuadaptercore/onu_device_entry.go
@@ -32,12 +32,12 @@
//"time"
"github.com/looplab/fsm"
- "github.com/opencord/voltha-lib-go/v4/pkg/adapters/adapterif"
- "github.com/opencord/voltha-lib-go/v4/pkg/db"
- "github.com/opencord/voltha-lib-go/v4/pkg/db/kvstore"
+ "github.com/opencord/voltha-lib-go/v5/pkg/adapters/adapterif"
+ "github.com/opencord/voltha-lib-go/v5/pkg/db"
+ "github.com/opencord/voltha-lib-go/v5/pkg/db/kvstore"
- //"github.com/opencord/voltha-lib-go/v4/pkg/kafka"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ //"github.com/opencord/voltha-lib-go/v5/pkg/kafka"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
//ic "github.com/opencord/voltha-protos/v4/go/inter_container"
//"github.com/opencord/voltha-protos/v4/go/openflow_13"
//"github.com/opencord/voltha-protos/v4/go/voltha"
diff --git a/internal/pkg/onuadaptercore/onu_image_status.go b/internal/pkg/onuadaptercore/onu_image_status.go
index 5e610ac..f36a44e 100755
--- a/internal/pkg/onuadaptercore/onu_image_status.go
+++ b/internal/pkg/onuadaptercore/onu_image_status.go
@@ -26,7 +26,7 @@
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
"github.com/opencord/voltha-protos/v4/go/voltha"
)
diff --git a/internal/pkg/onuadaptercore/onu_metrics_manager.go b/internal/pkg/onuadaptercore/onu_metrics_manager.go
index c9685de..3276882 100644
--- a/internal/pkg/onuadaptercore/onu_metrics_manager.go
+++ b/internal/pkg/onuadaptercore/onu_metrics_manager.go
@@ -28,9 +28,9 @@
"github.com/looplab/fsm"
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/db"
- "github.com/opencord/voltha-lib-go/v4/pkg/db/kvstore"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/db"
+ "github.com/opencord/voltha-lib-go/v5/pkg/db/kvstore"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
"github.com/opencord/voltha-protos/v4/go/voltha"
)
@@ -330,6 +330,13 @@
log.Fields{"device-id": dh.deviceID, "service": baseKvStorePath})
return nil
}
+ // restore data from KV store
+ if err := metricsManager.restorePmData(ctx); err != nil {
+ logger.Errorw(ctx, "error restoring pm data", log.Fields{"err": err})
+ // we continue given that it does not effect the actual services for the ONU,
+ // but there may be some negative effect on PM collection (there may be some mismatch in
+ // the actual PM config and what is present on the device).
+ }
logger.Info(ctx, "init-onuMetricsManager completed", log.Fields{"device-id": dh.deviceID})
return &metricsManager
@@ -1116,13 +1123,6 @@
// ** L2 PM FSM Handlers start **
func (mm *onuMetricsManager) l2PMFsmStarting(ctx context.Context, e *fsm.Event) {
- // restore data from KV store
- if err := mm.restorePmData(ctx); err != nil {
- logger.Errorw(ctx, "error restoring pm data", log.Fields{"err": err})
- // we continue given that it does not effect the actual services for the ONU,
- // but there may be some negative effect on PM collection (there may be some mismatch in
- // the actual PM config and what is present on the device).
- }
// Loop through all the group metrics
// If it is a L2 PM Interval metric and it is enabled, then if it is not in the
diff --git a/internal/pkg/onuadaptercore/onu_uni_port.go b/internal/pkg/onuadaptercore/onu_uni_port.go
index 660c043..bfd52f9 100644
--- a/internal/pkg/onuadaptercore/onu_uni_port.go
+++ b/internal/pkg/onuadaptercore/onu_uni_port.go
@@ -22,12 +22,13 @@
"fmt"
"strconv"
"strings"
+ "time"
//"sync"
//"time"
- //"github.com/opencord/voltha-lib-go/v4/pkg/kafka"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ //"github.com/opencord/voltha-lib-go/v5/pkg/kafka"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
vc "github.com/opencord/voltha-protos/v4/go/common"
of "github.com/opencord/voltha-protos/v4/go/openflow_13"
"github.com/opencord/voltha-protos/v4/go/voltha"
@@ -129,21 +130,29 @@
MaxSpeed: 1000,
},
}
- if pUniPort != nil {
- if err := apDeviceHandler.coreProxy.PortCreated(log.WithSpanFromContext(context.TODO(), ctx),
+ maxRetry := 3
+ retryCnt := 0
+ var err error
+ for retryCnt = 0; retryCnt < maxRetry; retryCnt++ {
+ if err = apDeviceHandler.coreProxy.PortCreated(log.WithSpanFromContext(context.TODO(), ctx),
apDeviceHandler.deviceID, pUniPort); err != nil {
- logger.Fatalf(ctx, "adding-uni-port: create-VOLTHA-Port-failed-%s", err)
- return err
+ logger.Errorf(ctx, "Device FSM: PortCreated-failed-%s, retrying after a delay", err)
+ // retry after a sleep
+ time.Sleep(2 * time.Second)
+ } else {
+ // success, break from retry loop
+ break
}
- logger.Infow(ctx, "Voltha onuUniPort-added", log.Fields{
- "device-id": apDeviceHandler.device.Id, "PortNo": oo.portNo})
- oo.pPort = pUniPort
- oo.operState = vc.OperStatus_DISCOVERED
- } else {
- logger.Warnw(ctx, "could not create Voltha UniPort", log.Fields{
- "device-id": apDeviceHandler.device.Id, "PortNo": oo.portNo})
- return fmt.Errorf("create Voltha UniPort %d failed on %s", oo.portNo, apDeviceHandler.device.Id)
}
+ if retryCnt == maxRetry { // maxed out..
+ logger.Errorf(ctx, "Device FSM: PortCreated-failed-%s", err)
+ return fmt.Errorf("device-fsm-port-create-failed-%s", err)
+ }
+ logger.Infow(ctx, "Voltha onuUniPort-added", log.Fields{
+ "device-id": apDeviceHandler.device.Id, "PortNo": oo.portNo})
+ oo.pPort = pUniPort
+ oo.operState = vc.OperStatus_DISCOVERED
+
return nil
}
diff --git a/internal/pkg/onuadaptercore/onu_uni_tp.go b/internal/pkg/onuadaptercore/onu_uni_tp.go
index dff13d4..246bd94 100644
--- a/internal/pkg/onuadaptercore/onu_uni_tp.go
+++ b/internal/pkg/onuadaptercore/onu_uni_tp.go
@@ -19,21 +19,15 @@
import (
"context"
- "encoding/json"
- "errors"
"fmt"
+ "github.com/opencord/voltha-protos/v4/go/tech_profile"
"strconv"
"strings"
"sync"
- "github.com/opencord/voltha-lib-go/v4/pkg/db"
- "github.com/opencord/voltha-lib-go/v4/pkg/db/kvstore"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
- tp "github.com/opencord/voltha-lib-go/v4/pkg/techprofile"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
)
-const cBasePathTechProfileKVStore = "%s/technology_profiles"
-
//definitions for TechProfileProcessing - copied from OltAdapter:openolt_flowmgr.go
// could perhaps be defined more globally
const (
@@ -98,7 +92,6 @@
baseDeviceHandler *deviceHandler
deviceID string
tpProcMutex sync.RWMutex
- techProfileKVStore *db.Backend
chTpConfigProcessingStep chan uint8
mapUniTpIndication map[uniTP]*tTechProfileIndication //use pointer values to ease assignments to the map
mapPonAniConfig map[uniTP]*tcontGemList //per UNI: use pointer values to ease assignments to the map
@@ -136,12 +129,6 @@
onuTP.tpProfileExists = make(map[uniTP]bool)
onuTP.tpProfileResetting = make(map[uniTP]bool)
onuTP.mapRemoveGemEntry = make(map[uniTP]*gemPortParamStruct)
- baseKvStorePath := fmt.Sprintf(cBasePathTechProfileKVStore, aDeviceHandler.pOpenOnuAc.cm.Backend.PathPrefix)
- onuTP.techProfileKVStore = aDeviceHandler.setBackend(ctx, baseKvStorePath)
- if onuTP.techProfileKVStore == nil {
- logger.Errorw(ctx, "Can't access techProfileKVStore - no backend connection to service",
- log.Fields{"device-id": aDeviceHandler.deviceID, "service": baseKvStorePath})
- }
return &onuTP
}
@@ -175,7 +162,7 @@
// but take care on sequential background processing when needed (logical dependencies)
// use waitForTimeoutOrCompletion(ctx, chTpConfigProcessingStep, processingStep) for internal synchronization
func (onuTP *onuUniTechProf) configureUniTp(ctx context.Context,
- aUniID uint8, aPathString string, wg *sync.WaitGroup) {
+ aUniID uint8, aPathString string, tpInst tech_profile.TechProfileInstance, wg *sync.WaitGroup) {
defer wg.Done() //always decrement the waitGroup on return
logger.Debugw(ctx, "configure the Uni according to TpPath", log.Fields{
"device-id": onuTP.deviceID, "uni-id": aUniID, "path": aPathString})
@@ -185,14 +172,6 @@
logger.Errorw(ctx, "error-extracting-tp-id-from-tp-path", log.Fields{"device-id": onuTP.deviceID, "uni-id": aUniID, "path": aPathString})
return
}
- if onuTP.techProfileKVStore == nil {
- logger.Errorw(ctx, "techProfileKVStore not set - abort",
- log.Fields{"device-id": onuTP.deviceID})
- onuTP.mutexTPState.Lock()
- defer onuTP.mutexTPState.Unlock()
- onuTP.procResult[uniTpKey] = errors.New("techProfile config aborted: techProfileKVStore not set")
- return
- }
//ensure that the given uniID is available (configured) in the UniPort class (used for OMCI entities)
var pCurrentUniPort *onuUniPort
@@ -243,7 +222,7 @@
processingStep++
*/
- go onuTP.readAniSideConfigFromTechProfile(ctx, aUniID, tpID, aPathString, processingStep)
+ go onuTP.readAniSideConfigFromTechProfile(ctx, aUniID, tpID, aPathString, tpInst, processingStep)
if !onuTP.waitForTimeoutOrCompletion(ctx, onuTP.chTpConfigProcessingStep, processingStep) {
//timeout or error detected
onuTP.mutexTPState.RLock()
@@ -330,9 +309,8 @@
/* internal methods *********************/
// nolint: gocyclo
func (onuTP *onuUniTechProf) readAniSideConfigFromTechProfile(
- ctx context.Context, aUniID uint8, aTpID uint8, aPathString string, aProcessingStep uint8) {
- var tpInst tp.TechProfile
-
+ ctx context.Context, aUniID uint8, aTpID uint8, aPathString string, tpInst tech_profile.TechProfileInstance, aProcessingStep uint8) {
+ var err error
//store profile type and identifier for later usage within the OMCI identifier and possibly ME setup
//pathstring is defined to be in the form of <ProfType>/<profID>/<Interface/../Identifier>
subStringSlice := strings.Split(aPathString, "/")
@@ -387,47 +365,16 @@
"profType": onuTP.mapUniTpIndication[uniTPKey].techProfileType,
"profID": onuTP.mapUniTpIndication[uniTPKey].techProfileID})
- Value, err := onuTP.techProfileKVStore.Get(ctx, aPathString)
- if err == nil {
- if Value != nil {
- logger.Debugw(ctx, "tech-profile read",
- log.Fields{"Key": Value.Key, "device-id": onuTP.deviceID})
- tpTmpBytes, _ := kvstore.ToByte(Value.Value)
-
- if err = json.Unmarshal(tpTmpBytes, &tpInst); err != nil {
- logger.Errorw(ctx, "TechProf - Failed to unmarshal tech-profile into tpInst",
- log.Fields{"error": err, "device-id": onuTP.deviceID})
- onuTP.chTpConfigProcessingStep <- 0 //error indication
- return
- }
- logger.Debugw(ctx, "TechProf - tpInst", log.Fields{"tpInst": tpInst})
- // access examples
- logger.Debugw(ctx, "TechProf content", log.Fields{"Name": tpInst.Name,
- "MaxGemPayloadSize": tpInst.InstanceCtrl.MaxGemPayloadSize,
- "DownstreamGemDiscardmaxThreshold": tpInst.DownstreamGemPortAttributeList[0].DiscardConfig.MaxThreshold})
- } else {
- logger.Errorw(ctx, "No tech-profile found",
- log.Fields{"path": aPathString, "device-id": onuTP.deviceID})
- onuTP.chTpConfigProcessingStep <- 0 //error indication
- return
- }
- } else {
- logger.Errorw(ctx, "kvstore-get failed for path",
- log.Fields{"path": aPathString, "device-id": onuTP.deviceID})
- onuTP.chTpConfigProcessingStep <- 0 //error indication
- return
- }
-
//default start with 1Tcont profile, later perhaps extend to MultiTcontMultiGem
localMapGemPortParams := make(map[uint16]*gemPortParamStruct)
onuTP.mapPonAniConfig[uniTPKey] = &tcontGemList{tcontParamStruct{}, localMapGemPortParams}
//note: the code is currently restricted to one TCcont per Onu (index [0])
//get the relevant values from the profile and store to mapPonAniConfig
- onuTP.mapPonAniConfig[uniTPKey].tcontParams.allocID = uint16(tpInst.UsScheduler.AllocID)
+ onuTP.mapPonAniConfig[uniTPKey].tcontParams.allocID = uint16(tpInst.UsScheduler.AllocId)
//maybe tCont scheduling not (yet) needed - just to basically have it for future
// (would only be relevant in case of ONU-2G QOS configuration flexibility)
- if tpInst.UsScheduler.QSchedPolicy == "StrictPrio" {
+ if tpInst.UsScheduler.QSchedPolicy == tech_profile.SchedulingPolicy_StrictPriority {
onuTP.mapPonAniConfig[uniTPKey].tcontParams.schedPolicy = 1 //for the moment fixed value acc. G.988 //TODO: defines!
} else {
//default profile defines "Hybrid" - which probably comes down to WRR with some weigthts for SP
@@ -446,37 +393,37 @@
loGemPortRead = true
}
//for all GemPorts we need to extend the mapGemPortParams
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportID)] = &gemPortParamStruct{}
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportId)] = &gemPortParamStruct{}
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportID)].gemPortID =
- uint16(content.GemportID)
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportId)].gemPortID =
+ uint16(content.GemportId)
//direction can be correlated later with Downstream list,
// for now just assume bidirectional (upstream never exists alone)
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportID)].direction = 3 //as defined in G.988
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportId)].direction = 3 //as defined in G.988
// expected Prio-Queue values 0..7 with 7 for highest PrioQueue, QueueIndex=Prio = 0..7
- if content.PriorityQueue > 7 {
+ if content.PriorityQ > 7 {
logger.Errorw(ctx, "PonAniConfig reject on GemPortList - PrioQueue value invalid",
- log.Fields{"device-id": onuTP.deviceID, "index": pos, "PrioQueue": content.PriorityQueue})
+ log.Fields{"device-id": onuTP.deviceID, "index": pos, "PrioQueue": content.PriorityQ})
//remove PonAniConfig as done so far, delete map should be safe, even if not existing
delete(onuTP.mapPonAniConfig, uniTPKey)
onuTP.chTpConfigProcessingStep <- 0 //error indication
return
}
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportID)].prioQueueIndex =
- uint8(content.PriorityQueue)
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportID)].pbitString =
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportId)].prioQueueIndex =
+ uint8(content.PriorityQ)
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportId)].pbitString =
strings.TrimPrefix(content.PbitMap, binaryStringPrefix)
if content.AesEncryption == "True" {
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportID)].gemPortEncState = 1
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportId)].gemPortEncState = 1
} else {
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportID)].gemPortEncState = 0
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportId)].gemPortEncState = 0
}
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportID)].discardPolicy =
- content.DiscardPolicy
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportID)].queueSchedPolicy =
- content.SchedulingPolicy
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportId)].discardPolicy =
+ content.DiscardPolicy.String()
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportId)].queueSchedPolicy =
+ content.SchedulingPolicy.String()
//'GemWeight' looks strange in default profile, for now we just copy the weight to first queue
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportID)].queueWeight =
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[uint16(content.GemportId)].queueWeight =
uint8(content.Weight)
}
@@ -500,7 +447,7 @@
}
logger.Infow(ctx, "Gem Port is multicast", log.Fields{"isMulticast": isMulticast})
if isMulticast {
- mcastGemID := uint16(downstreamContent.McastGemID)
+ mcastGemID := uint16(downstreamContent.MulticastGemId)
_, existing := onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID]
if existing {
//GEM port was previously configured, avoid setting multicast attributes
@@ -526,32 +473,32 @@
}
// expected Prio-Queue values 0..7 with 7 for highest PrioQueue, QueueIndex=Prio = 0..7
- if downstreamContent.PriorityQueue > 7 {
+ if downstreamContent.PriorityQ > 7 {
logger.Errorw(ctx, "PonAniConfig reject on GemPortList - PrioQueue value invalid",
- log.Fields{"device-id": onuTP.deviceID, "index": mcastGemID, "PrioQueue": downstreamContent.PriorityQueue})
+ log.Fields{"device-id": onuTP.deviceID, "index": mcastGemID, "PrioQueue": downstreamContent.PriorityQ})
//remove PonAniConfig as done so far, delete map should be safe, even if not existing
delete(onuTP.mapPonAniConfig, uniTPKey)
onuTP.chTpConfigProcessingStep <- 0 //error indication
return
}
onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].prioQueueIndex =
- uint8(downstreamContent.PriorityQueue)
+ uint8(downstreamContent.PriorityQ)
onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].pbitString =
strings.TrimPrefix(downstreamContent.PbitMap, binaryStringPrefix)
onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].discardPolicy =
- downstreamContent.DiscardPolicy
+ downstreamContent.DiscardPolicy.String()
onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].queueSchedPolicy =
- downstreamContent.SchedulingPolicy
+ downstreamContent.SchedulingPolicy.String()
//'GemWeight' looks strange in default profile, for now we just copy the weight to first queue
onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].queueWeight =
uint8(downstreamContent.Weight)
onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].isMulticast = isMulticast
onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].multicastGemPortID =
- uint16(downstreamContent.McastGemID)
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].staticACL = downstreamContent.SControlList
- onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].dynamicACL = downstreamContent.DControlList
+ uint16(downstreamContent.MulticastGemId)
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].staticACL = downstreamContent.StaticAccessControlList
+ onuTP.mapPonAniConfig[uniTPKey].mapGemPortParams[mcastGemID].dynamicACL = downstreamContent.DynamicAccessControlList
}
}
}
diff --git a/internal/pkg/onuadaptercore/openonu.go b/internal/pkg/onuadaptercore/openonu.go
index b291b65..2c77aa2 100644
--- a/internal/pkg/onuadaptercore/openonu.go
+++ b/internal/pkg/onuadaptercore/openonu.go
@@ -24,14 +24,14 @@
"sync"
"time"
- conf "github.com/opencord/voltha-lib-go/v4/pkg/config"
+ conf "github.com/opencord/voltha-lib-go/v5/pkg/config"
"github.com/golang/protobuf/ptypes"
- "github.com/opencord/voltha-lib-go/v4/pkg/adapters/adapterif"
- "github.com/opencord/voltha-lib-go/v4/pkg/db/kvstore"
- "github.com/opencord/voltha-lib-go/v4/pkg/events/eventif"
- "github.com/opencord/voltha-lib-go/v4/pkg/kafka"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/adapters/adapterif"
+ "github.com/opencord/voltha-lib-go/v5/pkg/db/kvstore"
+ "github.com/opencord/voltha-lib-go/v5/pkg/events/eventif"
+ "github.com/opencord/voltha-lib-go/v5/pkg/kafka"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
"github.com/opencord/voltha-protos/v4/go/extension"
ic "github.com/opencord/voltha-protos/v4/go/inter_container"
"github.com/opencord/voltha-protos/v4/go/openflow_13"
@@ -305,6 +305,12 @@
return fmt.Errorf(fmt.Sprintf("handler-not-found-%s", targetDevice))
}
+//Process_tech_profile_instance_request not implemented
+func (oo *OpenONUAC) Process_tech_profile_instance_request(ctx context.Context, msg *ic.InterAdapterTechProfileInstanceRequestMessage) *ic.InterAdapterTechProfileDownloadMessage {
+ logger.Error(ctx, "unImplemented")
+ return nil
+}
+
//Adapter_descriptor not implemented
func (oo *OpenONUAC) Adapter_descriptor(ctx context.Context) error {
return errors.New("unImplemented")
diff --git a/internal/pkg/onuadaptercore/openonuimpl.go b/internal/pkg/onuadaptercore/openonuimpl.go
index 1230a01..8e6e187 100644
--- a/internal/pkg/onuadaptercore/openonuimpl.go
+++ b/internal/pkg/onuadaptercore/openonuimpl.go
@@ -20,7 +20,7 @@
import (
"context"
"errors"
- //"github.com/opencord/voltha-lib-go/v4/pkg/log"
+ //"github.com/opencord/voltha-lib-go/v5/pkg/log"
)
/*
diff --git a/internal/pkg/onuadaptercore/uniportadmin.go b/internal/pkg/onuadaptercore/uniportadmin.go
index fea1838..0c22500 100644
--- a/internal/pkg/onuadaptercore/uniportadmin.go
+++ b/internal/pkg/onuadaptercore/uniportadmin.go
@@ -27,7 +27,7 @@
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
//ic "github.com/opencord/voltha-protos/v4/go/inter_container"
//"github.com/opencord/voltha-protos/v4/go/openflow_13"
)
diff --git a/internal/pkg/onuadaptercore/uniportstatus.go b/internal/pkg/onuadaptercore/uniportstatus.go
index 1674b52..fe9af4c 100644
--- a/internal/pkg/onuadaptercore/uniportstatus.go
+++ b/internal/pkg/onuadaptercore/uniportstatus.go
@@ -21,7 +21,7 @@
"context"
"github.com/opencord/omci-lib-go"
me "github.com/opencord/omci-lib-go/generated"
- "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "github.com/opencord/voltha-lib-go/v5/pkg/log"
"github.com/opencord/voltha-protos/v4/go/extension"
"time"
)