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"
12 type RanReconnectionManager struct {
14 config *configuration.Configuration
15 rnibReaderProvider func() reader.RNibReader
16 rnibWriterProvider func() rNibWriter.RNibWriter
17 ranSetupManager *RanSetupManager
20 func NewRanReconnectionManager(logger *logger.Logger, config *configuration.Configuration, rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranSetupManager *RanSetupManager) *RanReconnectionManager {
21 return &RanReconnectionManager{
24 rnibReaderProvider: rnibReaderProvider,
25 rnibWriterProvider: rnibWriterProvider,
26 ranSetupManager: ranSetupManager,
30 func (m *RanReconnectionManager) ReconnectRan(inventoryName string) error {
31 nodebInfo, rnibErr := m.rnibReaderProvider().GetNodeb(inventoryName)
34 m.logger.Errorf("#ReconnectRan - RAN name: %s - Failed fetching RAN from rNib. Error: %v", inventoryName, rnibErr)
38 if !m.canReconnectRan(nodebInfo) {
39 m.logger.Warnf("#ReconnectRan - RAN name: %s - Cannot reconnect RAN", inventoryName)
40 return m.setConnectionStatusOfUnconnectableRan(nodebInfo)
43 err := m.ranSetupManager.ExecuteSetup(nodebInfo)
46 m.logger.Errorf("#ReconnectRan - RAN name: %s - Failed executing setup. Error: %v", inventoryName, err)
50 m.logger.Infof("#ReconnectRan - RAN name: %s - Successfully done executing setup", inventoryName)
54 func (m *RanReconnectionManager) canReconnectRan(nodebInfo *entities.NodebInfo) bool {
55 connectionStatus := nodebInfo.GetConnectionStatus()
56 return connectionStatus != entities.ConnectionStatus_SHUT_DOWN && connectionStatus != entities.ConnectionStatus_SHUTTING_DOWN &&
57 int(nodebInfo.GetConnectionAttempts()) < m.config.MaxConnectionAttempts
60 func (m *RanReconnectionManager) updateNodebInfoStatus(nodebInfo *entities.NodebInfo, connectionStatus entities.ConnectionStatus) common.IRNibError {
61 nodebInfo.ConnectionStatus = connectionStatus;
62 err := m.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
65 m.logger.Errorf("#updateNodebInfoStatus - RAN name: %s - Failed updating RAN's connection status to %s in rNib. Error: %v", nodebInfo.RanName, connectionStatus, err)
69 m.logger.Infof("#updateNodebInfoStatus - RAN name: %s - Successfully updated RAN's connection status to %s in rNib", nodebInfo.RanName, connectionStatus)
73 func (m *RanReconnectionManager) setConnectionStatusOfUnconnectableRan(nodebInfo *entities.NodebInfo) common.IRNibError {
74 connectionStatus := nodebInfo.GetConnectionStatus()
75 m.logger.Warnf("#setConnectionStatusOfUnconnectableRan - RAN name: %s, RAN's connection status: %s, RAN's connection attempts: %d", nodebInfo.RanName, nodebInfo.ConnectionStatus, nodebInfo.ConnectionAttempts)
77 if connectionStatus == entities.ConnectionStatus_SHUTTING_DOWN {
78 return m.updateNodebInfoStatus(nodebInfo, entities.ConnectionStatus_SHUT_DOWN)
81 if int(nodebInfo.GetConnectionAttempts()) >= m.config.MaxConnectionAttempts {
82 m.logger.Warnf("#setConnectionStatusOfUnconnectableRan - RAN name: %s - RAN's connection attempts are greater than %d", nodebInfo.RanName, m.config.MaxConnectionAttempts)
83 return m.updateNodebInfoStatus(nodebInfo, entities.ConnectionStatus_DISCONNECTED)