X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fmanagers%2Fe2t_instances_manager.go;h=1887cd75db61133d7d0b0213cba88221054cf73a;hb=071419a702d7642a4d20b662c0219fdda0c80d1c;hp=0a95f5f1eccd0167054e075525509d240866d91c;hpb=0c747ac879f6b50089ca7317f4d85a4b69175237;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/managers/e2t_instances_manager.go b/E2Manager/managers/e2t_instances_manager.go index 0a95f5f..1887cd7 100644 --- a/E2Manager/managers/e2t_instances_manager.go +++ b/E2Manager/managers/e2t_instances_manager.go @@ -38,16 +38,18 @@ type E2TInstancesManager struct { } type IE2TInstancesManager interface { + GetE2TAddresses() ([]string, error) 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 { @@ -106,7 +108,7 @@ func (m *E2TInstancesManager) GetE2TInstancesNoLogs() ([]*entities.E2TInstance, return e2tInstances, nil } -func (m *E2TInstancesManager) GetE2TInstances() ([]*entities.E2TInstance, error) { +func (m *E2TInstancesManager) GetE2TAddresses() ([]string, error) { e2tAddresses, err := m.rnibDataService.GetE2TAddresses() if err != nil { @@ -114,12 +116,20 @@ func (m *E2TInstancesManager) GetE2TInstances() ([]*entities.E2TInstance, error) _, ok := err.(*common.ResourceNotFoundError) if !ok { - m.logger.Errorf("#E2TInstancesManager.GetE2TInstances - Failed retrieving E2T addresses. error: %s", err) + m.logger.Errorf("#E2TInstancesManager.GetE2TAddresses - Failed retrieving E2T addresses. error: %s", err) return nil, e2managererrors.NewRnibDbError() } - m.logger.Infof("#E2TInstancesManager.GetE2TInstances - Empty E2T addresses list") - return []*entities.E2TInstance{}, nil + } + + return e2tAddresses, nil +} + +func (m *E2TInstancesManager) GetE2TInstances() ([]*entities.E2TInstance, error) { + e2tAddresses, err := m.GetE2TAddresses() + + if err != nil { + return nil, e2managererrors.NewRnibDbError() } if len(e2tAddresses) == 0 { @@ -188,12 +198,12 @@ func findActiveE2TInstanceWithMinimumAssociatedRans(e2tInstances []*entities.E2T 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 { @@ -222,7 +232,7 @@ func (m *E2TInstancesManager) AddE2TInstance(e2tAddress string) error { 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 } @@ -260,9 +270,46 @@ func (m *E2TInstancesManager) RemoveRanFromInstance(ranName string, e2tAddress s 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() @@ -287,7 +334,7 @@ func (m *E2TInstancesManager) SelectE2TInstance() (string, error) { 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() @@ -295,68 +342,108 @@ func (m *E2TInstancesManager) AddRanToInstance(ranName string, e2tAddress string 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.State = newState + if newState == entities.Active { + e2tInstance.KeepAliveTimestamp = time.Now().UnixNano() } - e2tInstance.KeepAliveTimestamp = time.Now().UnixNano() - err = m.rnibDataService.SaveE2TInstanceNoLogs(e2tInstance) + err = m.rnibDataService.SaveE2TInstance(e2tInstance) + if err != nil { + 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 +} + +func (m *E2TInstancesManager) ClearRansOfAllE2TInstances() error { + m.logger.Infof("#E2TInstancesManager.ClearRansOfAllE2TInstances - Going to clear associated RANs from E2T instances") + m.mux.Lock() + defer m.mux.Unlock() + + e2tInstances, err := m.GetE2TInstances() if err != nil { - m.logger.Errorf("#E2TInstancesManager.ResetKeepAliveTimestamp - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err) return err } + if len(e2tInstances) == 0 { + m.logger.Errorf("#E2TInstancesManager.ClearRansOfAllE2TInstances - No E2T instances to clear associated RANs from") + return nil + } + + for _, v := range e2tInstances { + v.AssociatedRanList = []string{} + err := m.rnibDataService.SaveE2TInstance(v) + + if err != nil { + m.logger.Errorf("#E2TInstancesManager.ClearRansOfAllE2TInstances - e2t address: %s - failed saving e2t instance. error: %s", v.Address, err) + } + } + return nil }