RNibWriter interface allows saving data to the redis DB
*/
type RNibWriter interface {
- SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error
+ SaveNodeb(nodebInfo *entities.NodebInfo) error
UpdateNodebInfo(nodebInfo *entities.NodebInfo) error
SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error
SaveE2TInstance(e2tInstance *entities.E2TInstance) error
UpdateNodebInfoOnConnectionStatusInversion(nodebInfo *entities.NodebInfo, ent string) error
SaveGeneralConfiguration(config *entities.GeneralConfiguration) error
RemoveEnb(nodebInfo *entities.NodebInfo) error
+ RemoveServedCells(inventoryName string, servedCells []*entities.ServedCellInfo) error
+ UpdateEnb(nodebInfo *entities.NodebInfo, servedCells []*entities.ServedCellInfo) error
+ AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
+ RemoveNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
+ AddEnb(nodebInfo *entities.NodebInfo) error
}
/*
return &rNibWriterInstance{sdl: sdl, rnibWriterConfig: rnibWriterConfig}
}
+func getChannelsAndEventsPair(channel string, ranName string, event string) []string {
+ return []string{channel, fmt.Sprintf("%s_%s", ranName, event)}
+}
+
+func (w *rNibWriterInstance) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+ nbIdData, err := proto.Marshal(nbIdentity)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+
+ err = w.sdl.AddMember(nodeType.String(), nbIdData)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+ return nil
+}
+
func (w *rNibWriterInstance) RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error {
cellKeysToRemove := buildServedNRCellKeysToRemove(inventoryName, servedNrCells)
+
+ err := w.sdl.Remove(cellKeysToRemove)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+
+ return nil
+}
+
+func (w *rNibWriterInstance) RemoveServedCells(inventoryName string, servedCells []*entities.ServedCellInfo) error {
+ cellKeysToRemove := buildServedCellInfoKeysToRemove(inventoryName, servedCells)
+
err := w.sdl.Remove(cellKeysToRemove)
if err != nil {
/*
SaveNodeb saves nodeB entity data in the redis DB according to the specified data model
*/
-func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *entities.NodebInfo) error {
- isNotEmptyIdentity := isNotEmpty(nbIdentity)
-
- nodeType := entity.GetNodeType()
+func (w *rNibWriterInstance) SaveNodeb(nodebInfo *entities.NodebInfo) error {
- if isNotEmptyIdentity && nodeType == entities.Node_UNKNOWN {
- return common.NewValidationError(fmt.Sprintf("#rNibWriter.saveNodeB - Unknown responding node type, entity: %v", entity))
- }
-
- data, err := proto.Marshal(entity)
+ data, err := proto.Marshal(nodebInfo)
if err != nil {
return common.NewInternalError(err)
}
var pairs []interface{}
- key, rNibErr := common.ValidateAndBuildNodeBNameKey(nbIdentity.InventoryName)
+ key, rNibErr := common.ValidateAndBuildNodeBNameKey(nodebInfo.RanName)
if rNibErr != nil {
return rNibErr
pairs = append(pairs, key, data)
- if isNotEmptyIdentity {
+ if nodebInfo.GlobalNbId != nil {
- key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodeType.String(), nbIdentity.GlobalNbId.GetPlmnId(), nbIdentity.GlobalNbId.GetNbId())
+ key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
if rNibErr != nil {
return rNibErr
}
pairs = append(pairs, key, data)
}
- if entity.GetEnb() != nil {
- pairs, rNibErr = appendEnbCells(nbIdentity.InventoryName, entity.GetEnb().GetServedCells(), pairs)
+ if nodebInfo.GetEnb() != nil {
+ pairs, rNibErr = appendEnbCells(nodebInfo.RanName, nodebInfo.GetEnb().GetServedCells(), pairs)
if rNibErr != nil {
return rNibErr
}
}
- if entity.GetGnb() != nil {
- pairs, rNibErr = appendGnbCells(nbIdentity.InventoryName, entity.GetGnb().GetServedNrCells(), pairs)
+ if nodebInfo.GetGnb() != nil {
+ pairs, rNibErr = appendGnbCells(nodebInfo.RanName, nodebInfo.GetGnb().GetServedNrCells(), pairs)
if rNibErr != nil {
return rNibErr
}
}
- if nodeType == entities.Node_ENB {
- err = w.sdl.SetAndPublish([]string{w.rnibWriterConfig.RanManipulationMessageChannel, fmt.Sprintf("%s_%s", entity.RanName, RanAddedEvent)}, pairs)
- } else {
- err = w.sdl.Set(pairs)
- }
+ err = w.sdl.Set(pairs)
if err != nil {
return common.NewInternalError(err)
}
- ranNameIdentity := &entities.NbIdentity{InventoryName: nbIdentity.InventoryName}
+ return nil
+}
- if isNotEmptyIdentity {
- err := w.removeNbIdentity(entities.Node_UNKNOWN, ranNameIdentity)
- if err != nil {
- return common.NewInternalError(err)
- }
- } else {
- nbIdentity = ranNameIdentity
- }
+func (w *rNibWriterInstance) AddEnb(nodebInfo *entities.NodebInfo) error {
- nbIdData, err := proto.Marshal(nbIdentity)
+ data, err := proto.Marshal(nodebInfo)
if err != nil {
return common.NewInternalError(err)
}
- err = w.sdl.AddMember(nodeType.String(), nbIdData)
+ var pairs []interface{}
+ key, rNibErr := common.ValidateAndBuildNodeBNameKey(nodebInfo.RanName)
+
+ if rNibErr != nil {
+ return rNibErr
+ }
+
+ pairs = append(pairs, key, data)
+
+ if nodebInfo.GlobalNbId != nil {
+
+ key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
+ if rNibErr != nil {
+ return rNibErr
+ }
+ pairs = append(pairs, key, data)
+ }
+
+ pairs, rNibErr = appendEnbCells(nodebInfo.RanName, nodebInfo.GetEnb().GetServedCells(), pairs)
+ if rNibErr != nil {
+ return rNibErr
+ }
+ channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanAddedEvent)
+ err = w.sdl.SetAndPublish(channelsAndEvents, pairs)
if err != nil {
return common.NewInternalError(err)
}
+
return nil
}
return err
}
- err = w.sdl.Set(pairs)
+ channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanUpdatedEvent)
+ err = w.sdl.SetAndPublish(channelsAndEvents, pairs)
if err != nil {
return common.NewInternalError(err)
func buildServedNRCellKeysToRemove(inventoryName string, servedNrCellsToRemove []*entities.ServedNRCell) []string {
- cellKeysToRemove := []string{}
+ var cellKeysToRemove []string
for _, cell := range servedNrCellsToRemove {
func buildServedCellInfoKeysToRemove(inventoryName string, servedCellsToRemove []*entities.ServedCellInfo) []string {
- cellKeysToRemove := []string{}
+ var cellKeysToRemove []string
for _, cell := range servedCellsToRemove {
return keys, nil
}
-func (w *rNibWriterInstance) removeNbIdentity(nodeType entities.Node_Type ,nbIdentity *entities.NbIdentity) error {
+func (w *rNibWriterInstance) RemoveNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
nbIdData, err := proto.Marshal(nbIdentity)
if err != nil {
return common.NewInternalError(err)
}
func (w *rNibWriterInstance) RemoveEnb(nodebInfo *entities.NodebInfo) error {
- ranNameIdentity := &entities.NbIdentity{InventoryName: nodebInfo.RanName, GlobalNbId: nodebInfo.GetGlobalNbId()}
- err := w.removeNbIdentity(entities.Node_ENB, ranNameIdentity)
+ keysToRemove, err := w.buildRemoveEnbKeys(nodebInfo)
if err != nil {
return err
}
- keysToRemove, err := w.buildRemoveEnbKeys(nodebInfo)
+ channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanDeletedEvent)
+ err = w.sdl.RemoveAndPublish(channelsAndEvents, keysToRemove)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+
+ return nil
+}
+
+func (w *rNibWriterInstance) UpdateEnb(nodebInfo *entities.NodebInfo, servedCells []*entities.ServedCellInfo) error {
+
+ pairs, err := buildUpdateNodebInfoPairs(nodebInfo)
+
+ if err != nil {
+ return err
+ }
+
+ pairs, err = appendEnbCells(nodebInfo.RanName, servedCells, pairs)
+
if err != nil {
return err
}
- err = w.sdl.RemoveAndPublish([]string{w.rnibWriterConfig.RanManipulationMessageChannel, fmt.Sprintf("%s_%s", nodebInfo.RanName, RanDeletedEvent)}, keysToRemove)
+ channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanUpdatedEvent)
+ err = w.sdl.SetAndPublish(channelsAndEvents, pairs)
if err != nil {
return common.NewInternalError(err)
}
return pairs, nil
}
-
-func isNotEmpty(nbIdentity *entities.NbIdentity) bool {
- return nbIdentity.GlobalNbId != nil && nbIdentity.GlobalNbId.PlmnId != "" && nbIdentity.GlobalNbId.NbId != ""
-}