//
// Copyright 2019 AT&T Intellectual Property
// Copyright 2019 Nokia
+// Copyright 2023 Capgemini
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
)
type rNibWriterInstance struct {
- sdl common.ISdlInstance
+ sdl common.ISdlSyncStorage
rnibWriterConfig configuration.RnibWriterConfig
+ ns string
}
/*
type RNibWriter interface {
SaveNodeb(nodebInfo *entities.NodebInfo) error
UpdateNodebInfo(nodebInfo *entities.NodebInfo) error
+ UpdateNodebInfoAndPublish(nodebInfo *entities.NodebInfo) error
SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error
SaveE2TInstance(e2tInstance *entities.E2TInstance) error
SaveE2TAddresses(addresses []string) error
AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
RemoveNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
AddEnb(nodebInfo *entities.NodebInfo) error
+ UpdateNbIdentities(nodeType entities.Node_Type, oldNbIdentities []*entities.NbIdentity, newNbIdentities []*entities.NbIdentity) error
}
/*
GetRNibWriter returns reference to RNibWriter
*/
-func GetRNibWriter(sdl common.ISdlInstance, rnibWriterConfig configuration.RnibWriterConfig) RNibWriter {
- return &rNibWriterInstance{sdl: sdl, rnibWriterConfig: rnibWriterConfig}
+func GetRNibWriter(sdl common.ISdlSyncStorage, rnibWriterConfig configuration.RnibWriterConfig) RNibWriter {
+ return &rNibWriterInstance{
+ sdl: sdl,
+ rnibWriterConfig: rnibWriterConfig,
+ ns: common.GetRNibNamespace(),
+ }
}
func getChannelsAndEventsPair(channel string, ranName string, event string) []string {
return common.NewInternalError(err)
}
- err = w.sdl.AddMember(nodeType.String(), nbIdData)
+ err = w.sdl.AddMember(w.ns, nodeType.String(), nbIdData)
if err != nil {
return common.NewInternalError(err)
func (w *rNibWriterInstance) RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error {
cellKeysToRemove := buildServedNRCellKeysToRemove(inventoryName, servedNrCells)
- err := w.sdl.Remove(cellKeysToRemove)
+ err := w.sdl.Remove(w.ns, cellKeysToRemove)
if err != nil {
return common.NewInternalError(err)
func (w *rNibWriterInstance) RemoveServedCells(inventoryName string, servedCells []*entities.ServedCellInfo) error {
cellKeysToRemove := buildServedCellInfoKeysToRemove(inventoryName, servedCells)
- err := w.sdl.Remove(cellKeysToRemove)
+ err := w.sdl.Remove(w.ns, cellKeysToRemove)
if err != nil {
return common.NewInternalError(err)
if nodebInfo.GlobalNbId != nil {
- key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
+ key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId(),nodebInfo.GetCuUpId(),nodebInfo.GetDuId())
if rNibErr != nil {
return rNibErr
}
}
}
- err = w.sdl.Set(pairs)
+ err = w.sdl.Set(w.ns, pairs)
if err != nil {
return common.NewInternalError(err)
if nodebInfo.GlobalNbId != nil {
- key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
+ key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId(),nodebInfo.GetCuUpId(),nodebInfo.GetDuId())
if rNibErr != nil {
return rNibErr
}
}
channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanAddedEvent)
- err = w.sdl.SetAndPublish(channelsAndEvents, pairs)
+ err = w.sdl.SetAndPublish(w.ns, channelsAndEvents, pairs)
if err != nil {
return common.NewInternalError(err)
}
return nil
}
+func (w *rNibWriterInstance) UpdateNbIdentities(nodeType entities.Node_Type, oldNbIdentities []*entities.NbIdentity, newNbIdentities []*entities.NbIdentity) error {
+
+ nbIdIdentitiesToRemove, err := w.buildNbIdentitiesMembers(oldNbIdentities)
+ if err != nil {
+ return err
+ }
+
+ err = w.sdl.RemoveMember(w.ns, nodeType.String(), nbIdIdentitiesToRemove[:]...)
+ if err != nil {
+ return err
+ }
+
+ nbIdIdentitiesToAdd, err := w.buildNbIdentitiesMembers(newNbIdentities)
+ if err != nil {
+ return err
+ }
+
+ err = w.sdl.AddMember(w.ns, nodeType.String(), nbIdIdentitiesToAdd[:]...)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
func (w *rNibWriterInstance) UpdateGnbCells(nodebInfo *entities.NodebInfo, servedNrCells []*entities.ServedNRCell) error {
pairs, err := buildUpdateNodebInfoPairs(nodebInfo)
}
channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanUpdatedEvent)
- err = w.sdl.SetAndPublish(channelsAndEvents, pairs)
+ err = w.sdl.SetAndPublish(w.ns, channelsAndEvents, pairs)
if err != nil {
return common.NewInternalError(err)
return []interface{}{}, rNibErr
}
- nodebIdKey, buildNodebIdKeyError := common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
+ nodebIdKey, buildNodebIdKeyError := common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId(),nodebInfo.GetCuUpId(),nodebInfo.GetDuId())
data, err := proto.Marshal(nodebInfo)
keys = append(keys, nodebNameKey)
- nodebIdKey, buildNodebIdKeyError := common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
+ nodebIdKey, buildNodebIdKeyError := common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId(),nodebInfo.GetCuUpId(),nodebInfo.GetDuId())
if buildNodebIdKeyError == nil {
keys = append(keys, nodebIdKey)
if err != nil {
return common.NewInternalError(err)
}
- err = w.sdl.RemoveMember(nodeType.String(), nbIdData)
+ err = w.sdl.RemoveMember(w.ns, nodeType.String(), nbIdData)
if err != nil {
return common.NewInternalError(err)
}
return nil
}
-/*
-UpdateNodebInfo...
-*/
-func (w *rNibWriterInstance) UpdateNodebInfo(nodebInfo *entities.NodebInfo) error {
+func (w *rNibWriterInstance) updateNodebInfo(nodebInfo *entities.NodebInfo, publish bool) error {
pairs, err := buildUpdateNodebInfoPairs(nodebInfo)
return err
}
- err = w.sdl.Set(pairs)
+ if publish {
+ channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanUpdatedEvent)
+ err = w.sdl.SetAndPublish(w.ns, channelsAndEvents, pairs)
+ } else {
+ err = w.sdl.Set(w.ns, pairs)
+ }
if err != nil {
return common.NewInternalError(err)
return nil
}
+/*
+UpdateNodebInfo...
+*/
+func (w *rNibWriterInstance) UpdateNodebInfo(nodebInfo *entities.NodebInfo) error {
+ return w.updateNodebInfo(nodebInfo, false)
+}
+
+/*
+UpdateNodebInfoAndPublish...
+*/
+func (w *rNibWriterInstance) UpdateNodebInfoAndPublish(nodebInfo *entities.NodebInfo) error {
+ return w.updateNodebInfo(nodebInfo, true)
+}
+
/*
SaveRanLoadInformation stores ran load information for the provided ran
*/
var pairs []interface{}
pairs = append(pairs, key, data)
- err = w.sdl.Set(pairs)
+ err = w.sdl.Set(w.ns, pairs)
if err != nil {
return common.NewInternalError(err)
var pairs []interface{}
pairs = append(pairs, key, data)
- err = w.sdl.Set(pairs)
+ err = w.sdl.Set(w.ns, pairs)
if err != nil {
return common.NewInternalError(err)
var pairs []interface{}
pairs = append(pairs, E2TAddressesKey, data)
- err = w.sdl.Set(pairs)
+ err = w.sdl.Set(w.ns, pairs)
if err != nil {
return common.NewInternalError(err)
if rNibErr != nil {
return rNibErr
}
- err := w.sdl.Remove([]string{key})
+ err := w.sdl.Remove(w.ns, []string{key})
if err != nil {
return common.NewInternalError(err)
var pairs []interface{}
pairs = append(pairs, key, data)
- err = w.sdl.Set(pairs)
+ err = w.sdl.Set(w.ns, pairs)
if err != nil {
return common.NewInternalError(err)
return err
}
- err = w.sdl.SetAndPublish([]string{w.rnibWriterConfig.StateChangeMessageChannel, event}, pairs)
+ err = w.sdl.SetAndPublish(w.ns, []string{w.rnibWriterConfig.StateChangeMessageChannel, event}, pairs)
if err != nil {
return common.NewInternalError(err)
}
channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanDeletedEvent)
- err = w.sdl.RemoveAndPublish(channelsAndEvents, keysToRemove)
+ err = w.sdl.RemoveAndPublish(w.ns, channelsAndEvents, keysToRemove)
if err != nil {
return common.NewInternalError(err)
}
channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanUpdatedEvent)
- err = w.sdl.SetAndPublish(channelsAndEvents, pairs)
+ err = w.sdl.SetAndPublish(w.ns, channelsAndEvents, pairs)
if err != nil {
return common.NewInternalError(err)
return nil
}
+func (w *rNibWriterInstance) buildNbIdentitiesMembers(nbIdentities []*entities.NbIdentity) ([]interface{}, error) {
+
+ var nbIdIdentitiesMembers []interface{}
+ for _, nbIdentity := range nbIdentities {
+
+ nbIdData, err := proto.Marshal(nbIdentity)
+ if err != nil {
+ return nil, common.NewInternalError(err)
+ }
+ nbIdIdentitiesMembers = append(nbIdIdentitiesMembers, nbIdData)
+ }
+
+ return nbIdIdentitiesMembers, nil
+}
+
/*
Close the writer
*/