SVC address support for rmr stubs.
[ric-plt/submgr.git] / pkg / control / registry.go
index c9abdb8..2570960 100644 (file)
@@ -22,6 +22,8 @@ package control
 import (
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
+       "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/xapptweaks"
+       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models"
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
        "sync"
        "time"
@@ -46,6 +48,19 @@ func (r *Registry) Initialize() {
        }
 }
 
+func (r *Registry) QueryHandler() (models.SubscriptionList, error) {
+       r.mutex.Lock()
+       defer r.mutex.Unlock()
+
+       resp := models.SubscriptionList{}
+       for _, subs := range r.register {
+               subs.mutex.Lock()
+               resp = append(resp, &models.SubscriptionData{SubscriptionID: int64(subs.ReqId.Seq), Meid: subs.Meid.RanName, Endpoint: subs.EpList.StringList()})
+               subs.mutex.Unlock()
+       }
+       return resp, nil
+}
+
 func (r *Registry) allocateSubs(trans *TransactionXapp, subReqMsg *e2ap.E2APSubscriptionRequest) (*Subscription, error) {
        if len(r.subIds) > 0 {
                sequenceNumber := r.subIds[0]
@@ -125,7 +140,7 @@ func (r *Registry) AssignToSubscription(trans *TransactionXapp, subReqMsg *e2ap.
        // Find possible existing Policy subscription
        //
        if actionType == e2ap.E2AP_ActionTypePolicy {
-               if subs, ok := r.register[subReqMsg.RequestId.Seq]; ok {
+               if subs, ok := r.register[trans.GetSubId()]; ok {
                        xapp.Logger.Debug("CREATE %s. Existing subscription for Policy found", subs.String())
                        subs.SetCachedResponse(nil, true)
                        return subs, nil
@@ -217,44 +232,46 @@ func (r *Registry) RemoveFromSubscription(subs *Subscription, trans *Transaction
                return nil
        }
 
-       r.mutex.Unlock()
+       go func() {
+               if waitRouteClean > 0 {
+                       time.Sleep(waitRouteClean)
+               }
 
-       //
-       // Wait some time before really do route updates
-       //
-       if waitRouteClean > 0 {
-               subs.mutex.Unlock()
-               time.Sleep(waitRouteClean)
                subs.mutex.Lock()
-       }
+               defer subs.mutex.Unlock()
+               xapp.Logger.Info("CLEAN %s", subs.String())
+
+               if epamount == 0 {
+                       //
+                       // Subscription route delete
+                       //
+                       tmpList := xapptweaks.RmrEndpointList{}
+                       tmpList.AddEndpoint(trans.GetEndpoint())
+                       subRouteAction := SubRouteInfo{tmpList, uint16(seqId)}
+                       r.rtmgrClient.SubscriptionRequestDelete(subRouteAction)
 
-       xapp.Logger.Info("CLEAN %s", subs.String())
+                       //
+                       // Subscription release
+                       //
+                       r.mutex.Lock()
+                       defer r.mutex.Unlock()
 
-       //
-       // Subscription route updates
-       //
-       if epamount == 0 {
-               tmpList := RmrEndpointList{}
-               tmpList.AddEndpoint(trans.GetEndpoint())
-               subRouteAction := SubRouteInfo{tmpList, uint16(seqId)}
-               r.rtmgrClient.SubscriptionRequestDelete(subRouteAction)
-       } else if subs.EpList.Size() > 0 {
-               subRouteAction := SubRouteInfo{subs.EpList, uint16(seqId)}
-               r.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
-       }
+                       if _, ok := r.register[seqId]; ok {
+                               xapp.Logger.Debug("RELEASE %s", subs.String())
+                               delete(r.register, seqId)
+                               xapp.Logger.Debug("Registry: substable=%v", r.register)
+                       }
+                       r.subIds = append(r.subIds, seqId)
 
-       r.mutex.Lock()
-       //
-       // If last endpoint, release and free seqid
-       //
-       if epamount == 0 {
-               if _, ok := r.register[seqId]; ok {
-                       xapp.Logger.Debug("RELEASE %s", subs.String())
-                       delete(r.register, seqId)
-                       xapp.Logger.Debug("Registry: substable=%v", r.register)
+               } else if subs.EpList.Size() > 0 {
+                       //
+                       // Subscription route updates
+                       //
+                       subRouteAction := SubRouteInfo{subs.EpList, uint16(seqId)}
+                       r.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
                }
-               r.subIds = append(r.subIds, seqId)
-       }
+
+       }()
 
        return nil
 }