Make subscription unavailable when under reset 60/11060/3
authornaman.gupta <naman.gupta@samsung.com>
Tue, 9 May 2023 11:54:05 +0000 (17:24 +0530)
committernaman.gupta <naman.gupta@samsung.com>
Mon, 29 May 2023 07:52:59 +0000 (13:22 +0530)
Make subscription unavailable when under reset

Signed-off-by: naman.gupta <naman.gupta@samsung.com>
Change-Id: I98ace9baf042586c1f00bcfce66d5d912671c98c

pkg/control/control.go
pkg/control/e2if_state.go

index 3dacc59..227eb0c 100755 (executable)
@@ -450,8 +450,12 @@ func (c *Control) RESTSubscriptionHandler(params interface{}) (*models.Subscript
                c.PrintRESTSubscriptionRequest(p)
        }
 
-       if c.e2IfState.IsE2ConnectionUp(p.Meid) == false {
-               xapp.Logger.Error("No E2 connection for ranName %v", *p.Meid)
+       if c.e2IfState.IsE2ConnectionUp(p.Meid) == false || c.e2IfState.IsE2ConnectionUnderReset(p.Meid) == true {
+               if c.e2IfState.IsE2ConnectionUp(p.Meid) == false {
+                       xapp.Logger.Error("No E2 connection for ranName %v", *p.Meid)
+               } else if c.e2IfState.IsE2ConnectionUnderReset(p.Meid) == true {
+                       xapp.Logger.Error("E2 Node for ranName %v UNDER RESET", *p.Meid)
+               }
                c.UpdateCounter(cRestReqRejDueE2Down)
                return nil, common.SubscribeServiceUnavailableCode
        }
index 5f7eb35..e8ceef2 100644 (file)
@@ -49,14 +49,16 @@ func CreateXappRnibIfInstance() XappRnibInterface {
 }
 
 type E2IfState struct {
-       mutex   sync.Mutex
-       control *Control
-       NbIdMap map[string]string
+       mutex         sync.Mutex
+       control       *Control
+       NbIdMap       map[string]string
+       NbIdStatusMap map[string]string
 }
 
 func (e *E2IfState) Init(c *Control) {
        e.control = c
        e.NbIdMap = make(map[string]string, 0)
+       e.NbIdStatusMap = make(map[string]string, 0)
        e.ReadE2ConfigurationFromRnib()
        err := e.SubscribeChannels()
        if err != nil {
@@ -106,6 +108,7 @@ func (e *E2IfState) NotificationCb(ch string, events ...string) {
                }
                xapp.Logger.Debug("E2 CONNECTED. NbId=%s", nbId)
                e.NbIdMap[nbId] = nbId
+               e.NbIdStatusMap[nbId] = "CONNECTED"
        } else if strings.Contains(events[0], "_DISCONNECTED") {
                e.control.UpdateCounter(cE2StateChangedToDown)
                nbId, err := ExtractNbiIdFromString(events[0])
@@ -115,6 +118,7 @@ func (e *E2IfState) NotificationCb(ch string, events ...string) {
                }
                xapp.Logger.Debug("E2 DISCONNECTED. NbId=%s", nbId)
                if _, ok := e.NbIdMap[nbId]; ok {
+                       e.NbIdStatusMap[nbId] = "DISCONNECTED"
                        delete(e.NbIdMap, nbId)
                        e.control.registry.DeleteAllE2Subscriptions(nbId, e.control)
                }
@@ -126,6 +130,7 @@ func (e *E2IfState) NotificationCb(ch string, events ...string) {
                        xapp.Logger.Error("NotificationCb _UNDER_RESET %v ", err)
                        return
                }
+               e.NbIdStatusMap[nbId] = "UNDER_RESET"
                xapp.Logger.Debug("E2 Under Reset. NbId=%s", nbId)
                if _, ok := e.NbIdMap[nbId]; ok {
                        e.control.registry.DeleteAllE2Subscriptions(nbId, e.control)
@@ -195,6 +200,15 @@ func (e *E2IfState) IsE2ConnectionUp(nbId *string) bool {
        }
 }
 
+func (e *E2IfState) IsE2ConnectionUnderReset(nbId *string) bool {
+
+       if status := e.NbIdStatusMap[*nbId]; status == "UNDER_RESET" {
+               return true
+       } else {
+               return false
+       }
+}
+
 func ExtractNbiIdFromString(s string) (string, error) {
 
        // Expected string formats are below