X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Frnib%2FrNibWriter.go;h=135b9a2cc3e48492653c0484541209113774c70d;hb=81cc5607c39fdb11bd34a2fe8251ca21c1346082;hp=cc8e49ff32bdaee15d95dd169519977a3ad07909;hpb=3e611c621fa048f5f7da7cab3d4c211b4686fcce;p=ric-plt%2Fxapp-frame.git diff --git a/pkg/rnib/rNibWriter.go b/pkg/rnib/rNibWriter.go index cc8e49f..135b9a2 100755 --- a/pkg/rnib/rNibWriter.go +++ b/pkg/rnib/rNibWriter.go @@ -18,67 +18,55 @@ package writer import ( - "errors" "fmt" rnibcommon "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common" rnibentities "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" - "gerrit.o-ran-sc.org/r/ric-plt/sdlgo" "github.com/golang/protobuf/proto" ) -var writerPool *rnibcommon.Pool - type rNibWriterInstance struct { - sdl *ISdlInstance - namespace string + sdl rnibcommon.ISdlInstance //Deprecated: Will be removed in a future release and replaced by sdlStorage + sdlStorage rnibcommon.ISdlSyncStorage + ns string } /* RNibWriter interface allows saving data to the redis BD */ type RNibWriter interface { - SaveNodeb(nbIdentity *rnibentities.NbIdentity, nb *rnibentities.NodebInfo) rnibcommon.IRNibError -} - -/* -Init initializes the infrastructure required for the RNibWriter instance -*/ -func InitWriter(namespace string, poolSize int) { - initWriterPool(poolSize, - func() interface{} { - var sdlI ISdlInstance = sdlgo.NewSdlInstance(namespace, sdlgo.NewDatabase()) - return &rNibWriterInstance{sdl: &sdlI, namespace: namespace} - }, - func(obj interface{}) { - (*obj.(*rNibWriterInstance).sdl).Close() - }) + SaveNodeb(nbIdentity *rnibentities.NbIdentity, nb *rnibentities.NodebInfo) error } /* -InitPool initializes the writer's instances pool +GetNewRNibWriter returns reference to RNibWriter */ -func initWriterPool(poolSize int, newObj func() interface{}, destroyObj func(interface{})) { - writerPool = rnibcommon.NewPool(poolSize, newObj, destroyObj) +func GetNewRNibWriter(sdlStorage rnibcommon.ISdlSyncStorage) RNibWriter { + return &rNibWriterInstance{ + sdl: nil, + sdlStorage: sdlStorage, + ns: rnibcommon.GetRNibNamespace(), + } } -/* -GetRNibWriter returns RNibWriter instance from the pool -*/ -func GetRNibWriter() RNibWriter { - return writerPool.Get().(RNibWriter) +//GetRNibWriter returns reference to RNibWriter +//Deprecated: Will be removed in a future release, please use GetNewRNibWriter instead. +func GetRNibWriter(sdl rnibcommon.ISdlInstance) RNibWriter { + return &rNibWriterInstance{ + sdl: sdl, + sdlStorage: nil, + ns: "", + } } /* SaveNodeb saves nodeB entity data in the redis DB according to the specified data model */ -func (w *rNibWriterInstance) SaveNodeb(nbIdentity *rnibentities.NbIdentity, entity *rnibentities.NodebInfo) rnibcommon.IRNibError { - +func (w *rNibWriterInstance) SaveNodeb(nbIdentity *rnibentities.NbIdentity, entity *rnibentities.NodebInfo) error { isNotEmptyIdentity := isNotEmpty(nbIdentity) if isNotEmptyIdentity && entity.GetNodeType() == rnibentities.Node_UNKNOWN { - return rnibcommon.NewValidationError(errors.New(fmt.Sprintf("#rNibWriter.saveNodeB - Unknown responding node type, entity: %v", entity))) + return rnibcommon.NewValidationError(fmt.Sprintf("#rNibWriter.saveNodeB - Unknown responding node type, entity: %v", entity)) } - defer writerPool.Put(w) data, err := proto.Marshal(entity) if err != nil { return rnibcommon.NewInternalError(err) @@ -99,30 +87,56 @@ func (w *rNibWriterInstance) SaveNodeb(nbIdentity *rnibentities.NbIdentity, enti } if entity.GetEnb() != nil { - pairs, rNibErr = appendEnbCells(nbIdentity, entity.GetEnb().GetServedCells(), pairs) + pairs, rNibErr = appendEnbCells(nbIdentity.InventoryName, entity.GetEnb().GetServedCells(), pairs) if rNibErr != nil { return rNibErr } } if entity.GetGnb() != nil { - pairs, rNibErr = appendGnbCells(nbIdentity, entity.GetGnb().GetServedNrCells(), pairs) + pairs, rNibErr = appendGnbCells(nbIdentity.InventoryName, entity.GetGnb().GetServedNrCells(), pairs) if rNibErr != nil { return rNibErr } } - err = (*w.sdl).Set(pairs) + if w.sdlStorage != nil { + err = w.sdlStorage.Set(w.ns, pairs) + } else { + err = w.sdl.Set(pairs) + } if err != nil { return rnibcommon.NewInternalError(err) } + + ranNameIdentity := &rnibentities.NbIdentity{InventoryName: nbIdentity.InventoryName} + if isNotEmptyIdentity { - nbIdData, err := proto.Marshal(nbIdentity) + nbIdData, err := proto.Marshal(ranNameIdentity) if err != nil { return rnibcommon.NewInternalError(err) } - err = (*w.sdl).AddMember(entity.GetNodeType().String(), nbIdData) + if w.sdlStorage != nil { + err = w.sdlStorage.RemoveMember(w.ns, rnibentities.Node_UNKNOWN.String(), nbIdData) + } else { + err = w.sdl.RemoveMember(rnibentities.Node_UNKNOWN.String(), nbIdData) + } if err != nil { return rnibcommon.NewInternalError(err) } + } else { + nbIdentity = ranNameIdentity + } + + nbIdData, err := proto.Marshal(nbIdentity) + if err != nil { + return rnibcommon.NewInternalError(err) + } + if w.sdlStorage != nil { + err = w.sdlStorage.AddMember(w.ns, entity.GetNodeType().String(), nbIdData) + } else { + err = w.sdl.AddMember(entity.GetNodeType().String(), nbIdData) + } + if err != nil { + return rnibcommon.NewInternalError(err) } return nil } @@ -131,10 +145,9 @@ func (w *rNibWriterInstance) SaveNodeb(nbIdentity *rnibentities.NbIdentity, enti Close closes writer's pool */ func CloseWriter() { - writerPool.Close() } -func appendEnbCells(nbIdentity *rnibentities.NbIdentity, cells []*rnibentities.ServedCellInfo, pairs []interface{}) ([]interface{}, rnibcommon.IRNibError) { +func appendEnbCells(inventoryName string, cells []*rnibentities.ServedCellInfo, pairs []interface{}) ([]interface{}, error) { for _, cell := range cells { cellEntity := rnibentities.Cell{Type: rnibentities.Cell_LTE_CELL, Cell: &rnibentities.Cell_ServedCellInfo{ServedCellInfo: cell}} cellData, err := proto.Marshal(&cellEntity) @@ -146,7 +159,7 @@ func appendEnbCells(nbIdentity *rnibentities.NbIdentity, cells []*rnibentities.S return pairs, rNibErr } pairs = append(pairs, key, cellData) - key, rNibErr = rnibcommon.ValidateAndBuildCellNamePciKey(nbIdentity.InventoryName, cell.GetPci()) + key, rNibErr = rnibcommon.ValidateAndBuildCellNamePciKey(inventoryName, cell.GetPci()) if rNibErr != nil { return pairs, rNibErr } @@ -155,7 +168,7 @@ func appendEnbCells(nbIdentity *rnibentities.NbIdentity, cells []*rnibentities.S return pairs, nil } -func appendGnbCells(nbIdentity *rnibentities.NbIdentity, cells []*rnibentities.ServedNRCell, pairs []interface{}) ([]interface{}, rnibcommon.IRNibError) { +func appendGnbCells(inventoryName string, cells []*rnibentities.ServedNRCell, pairs []interface{}) ([]interface{}, error) { for _, cell := range cells { cellEntity := rnibentities.Cell{Type: rnibentities.Cell_NR_CELL, Cell: &rnibentities.Cell_ServedNrCell{ServedNrCell: cell}} cellData, err := proto.Marshal(&cellEntity) @@ -167,7 +180,7 @@ func appendGnbCells(nbIdentity *rnibentities.NbIdentity, cells []*rnibentities.S return pairs, rNibErr } pairs = append(pairs, key, cellData) - key, rNibErr = rnibcommon.ValidateAndBuildCellNamePciKey(nbIdentity.InventoryName, cell.GetServedNrCellInformation().GetNrPci()) + key, rNibErr = rnibcommon.ValidateAndBuildCellNamePciKey(inventoryName, cell.GetServedNrCellInformation().GetNrPci()) if rNibErr != nil { return pairs, rNibErr }