X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fmanagers%2Fe2t_instances_manager.go;h=18734733773d83e041f716d9394a3ae354f27bb0;hb=3815ac0efa8b297be3e163f72279e18cc09a3514;hp=d4bff658ce75eb42f738670f58c429cce298e944;hpb=622ede7fa6952e84a311654683d8eccc6f0eed25;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/managers/e2t_instances_manager.go b/E2Manager/managers/e2t_instances_manager.go index d4bff65..1873473 100644 --- a/E2Manager/managers/e2t_instances_manager.go +++ b/E2Manager/managers/e2t_instances_manager.go @@ -25,6 +25,7 @@ import ( "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" "math" "sync" + "time" ) type E2TInstancesManager struct { @@ -36,11 +37,14 @@ type E2TInstancesManager struct { type IE2TInstancesManager interface { GetE2TInstance(e2tAddress string) (*entities.E2TInstance, error) GetE2TInstances() ([]*entities.E2TInstance, error) + GetE2TInstancesNoLogs() ([]*entities.E2TInstance, error) AddE2TInstance(e2tAddress string) error RemoveE2TInstance(e2tInstance *entities.E2TInstance) error SelectE2TInstance() (string, error) AssociateRan(ranName string, e2tAddress string) error DissociateRan(ranName string, e2tAddress string) error + ActivateE2TInstance(e2tInstance *entities.E2TInstance) error + ResetKeepAliveTimestamp(e2tAddress string) error } func NewE2TInstancesManager(rnibDataService services.RNibDataService, logger *logger.Logger) *E2TInstancesManager { @@ -58,15 +62,45 @@ func (m *E2TInstancesManager) GetE2TInstance(e2tAddress string) (*entities.E2TIn _, ok := err.(*common.ResourceNotFoundError) if !ok { - m.logger.Errorf("#GetE2TInstance - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err) + m.logger.Errorf("#E2TInstancesManager.GetE2TInstance - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err) } else { - m.logger.Infof("#GetE2TInstance - E2T Instance address: %s not found on DB", e2tAddress) + m.logger.Infof("#E2TInstancesManager.GetE2TInstance - E2T Instance address: %s not found on DB", e2tAddress) } } return e2tInstance, err } +func (m *E2TInstancesManager) GetE2TInstancesNoLogs() ([]*entities.E2TInstance, error) { + e2tAddresses, err := m.rnibDataService.GetE2TAddressesNoLogs() + + if err != nil { + _, ok := err.(*common.ResourceNotFoundError) + + if !ok { + m.logger.Errorf("#E2TInstancesManager.GetE2TInstancesNoLogs - Failed retrieving E2T addresses. error: %s", err) + } + return nil, err + } + + if len(e2tAddresses) == 0 { + return []*entities.E2TInstance{}, nil + } + + e2tInstances, err := m.rnibDataService.GetE2TInstancesNoLogs(e2tAddresses) + + if err != nil { + _, ok := err.(*common.ResourceNotFoundError) + + if !ok { + m.logger.Errorf("#E2TInstancesManager.GetE2TInstancesNoLogs - Failed retrieving E2T instances list. error: %s", err) + } + return e2tInstances, err + } + + return e2tInstances, nil +} + func (m *E2TInstancesManager) GetE2TInstances() ([]*entities.E2TInstance, error) { e2tAddresses, err := m.rnibDataService.GetE2TAddresses() @@ -76,7 +110,7 @@ func (m *E2TInstancesManager) GetE2TInstances() ([]*entities.E2TInstance, error) } if len(e2tAddresses) == 0 { - m.logger.Warnf("#E2TInstancesManager.GetE2TInstances - Empty E2T addresses list") + m.logger.Infof("#E2TInstancesManager.GetE2TInstances - Empty E2T addresses list") return []*entities.E2TInstance{}, nil } @@ -95,6 +129,38 @@ func (m *E2TInstancesManager) GetE2TInstances() ([]*entities.E2TInstance, error) return e2tInstances, nil } +func (m *E2TInstancesManager) ResetKeepAliveTimestampsForAllE2TInstances() { + + e2tInstances, err := m.GetE2TInstances() + + if err != nil { + m.logger.Errorf("E2TInstancesManager.ResetKeepAliveTimestampForAllE2TInstances - Couldn't reset timestamps due to a DB error") + return + } + + if len(e2tInstances) == 0 { + m.logger.Infof("E2TInstancesManager.ResetKeepAliveTimestampForAllE2TInstances - No instances, ignoring reset") + return + } + + for _, v := range e2tInstances { + + if v.State != entities.Active { + continue + } + + v.KeepAliveTimestamp = time.Now().UnixNano() + + err := m.rnibDataService.SaveE2TInstance(v) + + if err != nil { + m.logger.Errorf("E2TInstancesManager.ResetKeepAliveTimestampForAllE2TInstances - E2T address: %s - failed resetting e2t instance keep alive timestamp. error: %s", v.Address, err) + } + } + + m.logger.Infof("E2TInstancesManager.ResetKeepAliveTimestampForAllE2TInstances - Done with reset") +} + func findActiveE2TInstanceWithMinimumAssociatedRans(e2tInstances []*entities.E2TInstance) *entities.E2TInstance { var minInstance *entities.E2TInstance minAssociatedRanCount := math.MaxInt32 @@ -111,17 +177,17 @@ func findActiveE2TInstanceWithMinimumAssociatedRans(e2tInstances []*entities.E2T func (m *E2TInstancesManager) AddE2TInstance(e2tAddress string) error { + m.mux.Lock() + defer m.mux.Unlock() + e2tInstance := entities.NewE2TInstance(e2tAddress) err := m.rnibDataService.SaveE2TInstance(e2tInstance) if err != nil { - m.logger.Errorf("#AddE2TInstance - E2T Instance address: %s - Failed saving E2T instance. error: %s", e2tInstance.Address, err) + m.logger.Errorf("#E2TInstancesManager.AddE2TInstance - E2T Instance address: %s - Failed saving E2T instance. error: %s", e2tInstance.Address, err) return err } - m.mux.Lock() - defer m.mux.Unlock() - e2tAddresses, err := m.rnibDataService.GetE2TAddresses() if err != nil { @@ -129,7 +195,7 @@ func (m *E2TInstancesManager) AddE2TInstance(e2tAddress string) error { _, ok := err.(*common.ResourceNotFoundError) if !ok { - m.logger.Errorf("#AddE2TInstance - E2T Instance address: %s - Failed retrieving E2T addresses list. error: %s", e2tInstance.Address, err) + m.logger.Errorf("#E2TInstancesManager.AddE2TInstance - E2T Instance address: %s - Failed retrieving E2T addresses list. error: %s", e2tInstance.Address, err) return err } } @@ -139,11 +205,11 @@ func (m *E2TInstancesManager) AddE2TInstance(e2tAddress string) error { err = m.rnibDataService.SaveE2TAddresses(e2tAddresses) if err != nil { - m.logger.Errorf("#AddE2TInstance - E2T Instance address: %s - Failed saving E2T addresses list. error: %s", e2tInstance.Address, err) + m.logger.Errorf("#E2TInstancesManager.AddE2TInstance - E2T Instance address: %s - Failed saving E2T addresses list. error: %s", e2tInstance.Address, err) return err } - m.logger.Infof("#AddE2TInstance - E2T Instance address: %s - successfully added E2T instance", e2tInstance.Address) + m.logger.Infof("#E2TInstancesManager.AddE2TInstance - E2T Instance address: %s - successfully added E2T instance", e2tInstance.Address) return nil } @@ -155,7 +221,7 @@ func (m *E2TInstancesManager) DissociateRan(ranName string, e2tAddress string) e e2tInstance, err := m.rnibDataService.GetE2TInstance(e2tAddress) if err != nil { - m.logger.Errorf("#DissociateRan - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err) + m.logger.Errorf("#E2TInstancesManager.DissociateRan - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err) return err } @@ -173,11 +239,11 @@ func (m *E2TInstancesManager) DissociateRan(ranName string, e2tAddress string) e err = m.rnibDataService.SaveE2TInstance(e2tInstance) if err != nil { - m.logger.Errorf("#DissociateRan - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err) + m.logger.Errorf("#E2TInstancesManager.DissociateRan - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err) return err } - m.logger.Infof("#DissociateRan - successfully dissociated RAN %s from E2T %s", ranName, e2tInstance.Address) + m.logger.Infof("#E2TInstancesManager.DissociateRan - successfully dissociated RAN %s from E2T %s", ranName, e2tInstance.Address) return nil } @@ -189,7 +255,6 @@ func (m *E2TInstancesManager) SelectE2TInstance() (string, error) { e2tInstances, err := m.GetE2TInstances() if err != nil { - m.logger.Errorf("#E2TInstancesManager.SelectE2TInstance - failed retrieving E2T instances. error: %s", err) return "", e2managererrors.NewRnibDbError() } @@ -201,11 +266,11 @@ func (m *E2TInstancesManager) SelectE2TInstance() (string, error) { min := findActiveE2TInstanceWithMinimumAssociatedRans(e2tInstances) if min == nil { - m.logger.Errorf("#SelectE2TInstance - No active E2T instance found") + m.logger.Errorf("#E2TInstancesManager.SelectE2TInstance - No active E2T instance found") return "", e2managererrors.NewE2TInstanceAbsenceError() } - m.logger.Infof("#SelectE2TInstance - successfully selected E2T instance. address: %s", min.Address) + m.logger.Infof("#E2TInstancesManager.SelectE2TInstance - successfully selected E2T instance. address: %s", min.Address) return min.Address, nil } @@ -217,7 +282,7 @@ func (m *E2TInstancesManager) AssociateRan(ranName string, e2tAddress string) er e2tInstance, err := m.rnibDataService.GetE2TInstance(e2tAddress) if err != nil { - m.logger.Errorf("#AssociateRan - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err) + m.logger.Errorf("#E2TInstancesManager.AssociateRan - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err) return e2managererrors.NewRnibDbError() } @@ -226,10 +291,59 @@ func (m *E2TInstancesManager) AssociateRan(ranName string, e2tAddress string) er err = m.rnibDataService.SaveE2TInstance(e2tInstance) if err != nil { - m.logger.Errorf("#AssociateRan - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err) + m.logger.Errorf("#E2TInstancesManager.AssociateRan - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err) return e2managererrors.NewRnibDbError() } - m.logger.Infof("#AssociateRan - successfully associated RAN %s with E2T %s", ranName, e2tInstance.Address) + m.logger.Infof("#E2TInstancesManager.AssociateRan - successfully associated RAN %s with E2T %s", ranName, e2tInstance.Address) + return nil +} + +func (h E2TInstancesManager) ActivateE2TInstance(e2tInstance *entities.E2TInstance) error{ + + if e2tInstance == nil { + h.logger.Errorf("#E2TInstancesManager.ActivateE2TInstance - e2tInstance empty") + return e2managererrors.NewInternalError() + } + + h.logger.Infof("#E2TInstancesManager.ActivateE2TInstance - E2T Address: %s - activate E2T instance", e2tInstance.Address) + + e2tInstance.State = entities.Active + e2tInstance.KeepAliveTimestamp = time.Now().UnixNano() + + err := h.rnibDataService.SaveE2TInstance(e2tInstance) + if err != nil { + h.logger.Errorf("#E2TInstancesManager.ActivateE2TInstance - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tInstance.Address, err) + return err + } + return nil +} + +func (m *E2TInstancesManager) ResetKeepAliveTimestamp(e2tAddress string) error { + + 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 + } + + if e2tInstance.State == entities.ToBeDeleted || e2tInstance.State == entities.RoutingManagerFailure { + m.logger.Warnf("#E2TInstancesManager.ResetKeepAliveTimestamp - Ignore. This Instance is about to deleted") + return nil + + } + + e2tInstance.KeepAliveTimestamp = time.Now().UnixNano() + err = m.rnibDataService.SaveE2TInstanceNoLogs(e2tInstance) + + if err != nil { + m.logger.Errorf("#E2TInstancesManager.ResetKeepAliveTimestamp - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err) + return err + } + return nil }