GetE2TInstance(e2tAddress string) (*entities.E2TInstance, error)
GetE2TInstances() ([]*entities.E2TInstance, error)
GetE2TInstancesNoLogs() ([]*entities.E2TInstance, error)
- AddE2TInstance(e2tAddress string) error
- RemoveE2TInstance(e2tInstance *entities.E2TInstance) error
+ AddE2TInstance(e2tAddress string, podName string) error
+ RemoveE2TInstance(e2tAddress string) error
SelectE2TInstance() (string, error)
- AddRanToInstance(ranName string, e2tAddress string) error
+ AddRansToInstance(e2tAddress string, ranNames []string) error
RemoveRanFromInstance(ranName string, e2tAddress string) error
- ActivateE2TInstance(e2tInstance *entities.E2TInstance) error
ResetKeepAliveTimestamp(e2tAddress string) error
ClearRansOfAllE2TInstances() error
+ SetE2tInstanceState(e2tAddress string, currentState entities.E2TInstanceState, newState entities.E2TInstanceState) error
}
func NewE2TInstancesManager(rnibDataService services.RNibDataService, logger *logger.Logger) *E2TInstancesManager {
return minInstance
}
-func (m *E2TInstancesManager) AddE2TInstance(e2tAddress string) error {
+func (m *E2TInstancesManager) AddE2TInstance(e2tAddress string, podName string) error {
m.mux.Lock()
defer m.mux.Unlock()
- e2tInstance := entities.NewE2TInstance(e2tAddress)
+ e2tInstance := entities.NewE2TInstance(e2tAddress, podName)
err := m.rnibDataService.SaveE2TInstance(e2tInstance)
if err != nil {
return err
}
- m.logger.Infof("#E2TInstancesManager.AddE2TInstance - E2T Instance address: %s - successfully added E2T instance", e2tInstance.Address)
+ m.logger.Infof("#E2TInstancesManager.AddE2TInstance - E2T Instance address: %s, pod name: %s - successfully added E2T instance", e2tInstance.Address, e2tInstance.PodName)
return nil
}
return nil
}
-func (m *E2TInstancesManager) RemoveE2TInstance(e2tInstance *entities.E2TInstance) error {
+func (m *E2TInstancesManager) RemoveE2TInstance(e2tAddress string) error {
+ m.mux.Lock()
+ defer m.mux.Unlock()
+
+ err := m.rnibDataService.RemoveE2TInstance(e2tAddress)
+ if err != nil {
+ m.logger.Errorf("#E2TInstancesManager.RemoveE2TInstance - E2T Instance address: %s - Failed removing E2TInstance. error: %s", e2tAddress, err)
+ return e2managererrors.NewRnibDbError()
+ }
+
+ e2tAddresses, err := m.rnibDataService.GetE2TAddresses()
+
+ if err != nil {
+ m.logger.Errorf("#E2TInstancesManager.RemoveE2TInstance - E2T Instance address: %s - Failed retrieving E2T addresses list. error: %s", e2tAddress, err)
+ return e2managererrors.NewRnibDbError()
+ }
+
+ e2tAddresses = m.removeAddressFromList(e2tAddresses, e2tAddress)
+
+ err = m.rnibDataService.SaveE2TAddresses(e2tAddresses)
+ if err != nil {
+ m.logger.Errorf("#E2TInstancesManager.RemoveE2TInstance - E2T Instance address: %s - Failed saving E2T addresses list. error: %s", e2tAddress, err)
+ return e2managererrors.NewRnibDbError()
+ }
+
return nil
}
+
+func (m *E2TInstancesManager) removeAddressFromList(e2tAddresses []string, addressToRemove string) []string {
+ newAddressList := []string{}
+
+ for _, address := range e2tAddresses {
+ if address != addressToRemove {
+ newAddressList = append(newAddressList, address)
+ }
+ }
+
+ return newAddressList
+}
+
func (m *E2TInstancesManager) SelectE2TInstance() (string, error) {
e2tInstances, err := m.GetE2TInstances()
return min.Address, nil
}
-func (m *E2TInstancesManager) AddRanToInstance(ranName string, e2tAddress string) error {
+func (m *E2TInstancesManager) AddRansToInstance(e2tAddress string, ranNames []string) error {
m.mux.Lock()
defer m.mux.Unlock()
e2tInstance, err := m.rnibDataService.GetE2TInstance(e2tAddress)
if err != nil {
- m.logger.Errorf("#E2TInstancesManager.AddRanToInstance - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err)
+ m.logger.Errorf("#E2TInstancesManager.AddRansToInstance - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err)
return e2managererrors.NewRnibDbError()
}
- e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, ranName)
+ e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, ranNames...)
err = m.rnibDataService.SaveE2TInstance(e2tInstance)
if err != nil {
- m.logger.Errorf("#E2TInstancesManager.AddRanToInstance - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err)
+ m.logger.Errorf("#E2TInstancesManager.AddRansToInstance - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err)
return e2managererrors.NewRnibDbError()
}
- m.logger.Infof("#E2TInstancesManager.AddRanToInstance - RAN %s was added successfully to E2T %s", ranName, e2tInstance.Address)
+ m.logger.Infof("#E2TInstancesManager.AddRansToInstance - RAN %s were added successfully to E2T %s", ranNames, e2tInstance.Address)
return nil
}
-func (m E2TInstancesManager) ActivateE2TInstance(e2tInstance *entities.E2TInstance) error {
+func (m *E2TInstancesManager) ResetKeepAliveTimestamp(e2tAddress string) error {
- if e2tInstance == nil {
- m.logger.Errorf("#E2TInstancesManager.ActivateE2TInstance - e2tInstance empty")
- return e2managererrors.NewInternalError()
+ m.mux.Lock()
+ defer m.mux.Unlock()
+
+ e2tInstance, err := m.rnibDataService.GetE2TInstanceNoLogs(e2tAddress)
+
+ if err != nil {
+ m.logger.Errorf("#E2TInstancesManager.ResetKeepAliveTimestamp - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err)
+ return err
}
- m.logger.Infof("#E2TInstancesManager.ActivateE2TInstance - E2T Address: %s - activate E2T instance", e2tInstance.Address)
+ if e2tInstance.State == entities.ToBeDeleted {
+ m.logger.Warnf("#E2TInstancesManager.ResetKeepAliveTimestamp - Ignore. This Instance is about to be deleted")
+ return nil
+
+ }
- e2tInstance.State = entities.Active
e2tInstance.KeepAliveTimestamp = time.Now().UnixNano()
+ err = m.rnibDataService.SaveE2TInstanceNoLogs(e2tInstance)
- err := m.rnibDataService.SaveE2TInstance(e2tInstance)
if err != nil {
- m.logger.Errorf("#E2TInstancesManager.ActivateE2TInstance - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tInstance.Address, err)
+ m.logger.Errorf("#E2TInstancesManager.ResetKeepAliveTimestamp - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err)
return err
}
+
return nil
}
-func (m *E2TInstancesManager) ResetKeepAliveTimestamp(e2tAddress string) error {
-
+func (m *E2TInstancesManager) SetE2tInstanceState(e2tAddress string, currentState entities.E2TInstanceState, newState entities.E2TInstanceState) error {
m.mux.Lock()
defer m.mux.Unlock()
- e2tInstance, err := m.rnibDataService.GetE2TInstanceNoLogs(e2tAddress)
+ e2tInstance, err := m.rnibDataService.GetE2TInstance(e2tAddress)
if err != nil {
- m.logger.Errorf("#E2TInstancesManager.ResetKeepAliveTimestamp - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err)
- return err
+ m.logger.Errorf("#E2TInstancesManager.SetE2tInstanceState - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err)
+ return e2managererrors.NewRnibDbError()
}
- if e2tInstance.State == entities.ToBeDeleted || e2tInstance.State == entities.RoutingManagerFailure {
- m.logger.Warnf("#E2TInstancesManager.ResetKeepAliveTimestamp - Ignore. This Instance is about to deleted")
- return nil
-
+ if (currentState != e2tInstance.State) {
+ m.logger.Warnf("#E2TInstancesManager.SetE2tInstanceState - E2T Instance address: %s - Current state is not: %s", e2tAddress, currentState)
+ return e2managererrors.NewInternalError()
}
- e2tInstance.KeepAliveTimestamp = time.Now().UnixNano()
- err = m.rnibDataService.SaveE2TInstanceNoLogs(e2tInstance)
+ e2tInstance.State = newState
+ if (newState == entities.Active) {
+ e2tInstance.KeepAliveTimestamp = time.Now().UnixNano()
+ }
+ err = m.rnibDataService.SaveE2TInstance(e2tInstance)
if err != nil {
- m.logger.Errorf("#E2TInstancesManager.ResetKeepAliveTimestamp - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err)
+ m.logger.Errorf("#E2TInstancesManager.SetE2tInstanceState - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tInstance.Address, err)
return err
}
+ m.logger.Infof("#E2TInstancesManager.SetE2tInstanceState - E2T Instance address: %s - State change: %s --> %s", e2tAddress, currentState, newState)
+
return nil
}