7 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
8 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
9 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
14 type RNibDataService interface {
15 SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error
16 UpdateNodebInfo(nodebInfo *entities.NodebInfo) error
17 SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error
18 GetNodeb(ranName string) (*entities.NodebInfo, error)
19 GetListNodebIds() ([]*entities.NbIdentity, error)
22 type rNibDataService struct {
24 rnibReaderProvider func() reader.RNibReader
25 rnibWriterProvider func() rNibWriter.RNibWriter
27 retryInterval time.Duration
30 func NewRnibDataService(logger *logger.Logger, config *configuration.Configuration, rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *rNibDataService {
31 return &rNibDataService{
33 rnibReaderProvider: rnibReaderProvider,
34 rnibWriterProvider: rnibWriterProvider,
35 maxAttempts: config.MaxRnibConnectionAttempts,
36 retryInterval: time.Duration(config.RnibRetryIntervalMs) * time.Millisecond,
40 func (w *rNibDataService) UpdateNodebInfo(nodebInfo *entities.NodebInfo) error {
41 w.logger.Infof("#RnibDataService.UpdateNodebInfo - nodebInfo: %s", nodebInfo)
43 err := w.retry("UpdateNodebInfo", func() (err error) {
44 err = w.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
51 func (w *rNibDataService) SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error {
52 w.logger.Infof("#RnibDataService.SaveNodeb - nbIdentity: %s, nodebInfo: %s", nbIdentity, nb)
54 err := w.retry("SaveNodeb", func() (err error) {
55 err = w.rnibWriterProvider().SaveNodeb(nbIdentity, nb)
62 func (w *rNibDataService) SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error {
63 w.logger.Infof("#RnibDataService.SaveRanLoadInformation - inventoryName: %s, ranLoadInformation: %s", inventoryName, ranLoadInformation)
65 err := w.retry("SaveRanLoadInformation", func() (err error) {
66 err = w.rnibWriterProvider().SaveRanLoadInformation(inventoryName, ranLoadInformation)
73 func (w *rNibDataService) GetNodeb(ranName string) (*entities.NodebInfo, error) {
74 w.logger.Infof("#RnibDataService.GetNodeb - ranName: %s", ranName)
76 var nodeb *entities.NodebInfo = nil
78 err := w.retry("GetNodeb", func() (err error) {
79 nodeb, err = w.rnibReaderProvider().GetNodeb(ranName)
86 func (w *rNibDataService) GetListNodebIds() ([]*entities.NbIdentity, error) {
87 w.logger.Infof("#RnibDataService.GetListNodebIds")
89 var nodeIds []*entities.NbIdentity = nil
91 err := w.retry("GetListNodebIds", func() (err error) {
92 nodeIds, err = w.rnibReaderProvider().GetListNodebIds()
99 func (w *rNibDataService) retry(rnibFunc string, f func() error) (err error) {
100 attempts := w.maxAttempts
107 if !w.isConnError(err) {
111 w.logger.Errorf("#RnibDataService.retry - after %d attempts of %s, last error: %s", attempts, rnibFunc, err)
114 time.Sleep(w.retryInterval)
116 w.logger.Infof("#RnibDataService.retry - retrying %d %s after error: %s", i, rnibFunc, err)
120 func (w *rNibDataService) isConnError(err error) bool {
121 internalErr, ok := err.(common.InternalError)
125 _, ok = internalErr.Err.(*net.OpError)