RICPLT-2989 Submgr routing manager client code to support multiple endpoints
Change-Id: I0b4931090c06b4cf9a81b766a11162c8a6ebecf4
Signed-off-by: Juha Hyttinen <juha.hyttinen@nokia.com>
diff --git a/pkg/control/subscription.go b/pkg/control/subscription.go
index 4514d00..45c13ec 100644
--- a/pkg/control/subscription.go
+++ b/pkg/control/subscription.go
@@ -20,39 +20,29 @@
package control
import (
- "fmt"
"gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
"gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
"strconv"
"sync"
- "time"
)
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
type Subscription struct {
- mutex sync.Mutex // Lock
- registry *Registry // Registry
- Seq uint16 // SubsId
- Meid *xapp.RMRMeid // Meid/ RanName
- EpList RmrEndpointList // Endpoints
- DelEpList RmrEndpointList // Endpoints
- DelSeq uint64
+ mutex sync.Mutex // Lock
+ registry *Registry // Registry
+ Seq uint16 // SubsId
+ Meid *xapp.RMRMeid // Meid/ RanName
+ EpList RmrEndpointList // Endpoints
TransLock sync.Mutex // Lock transactions, only one executed per time for subs
TheTrans *Transaction // Ongoing transaction from xapp
SubReqMsg *e2ap.E2APSubscriptionRequest // Subscription information
SubRespMsg *e2ap.E2APSubscriptionResponse // Subscription information
}
-func (s *Subscription) stringImpl() string {
- return "subs(" + strconv.FormatUint(uint64(s.Seq), 10) + "/" + s.Meid.RanName + "/" + s.EpList.String() + ")"
-}
-
func (s *Subscription) String() string {
- s.mutex.Lock()
- defer s.mutex.Unlock()
- return s.stringImpl()
+ return "subs(" + strconv.FormatUint(uint64(s.Seq), 10) + "/" + s.Meid.RanName + "/" + s.EpList.String() + ")"
}
func (s *Subscription) GetSubId() uint16 {
@@ -70,68 +60,6 @@
return nil
}
-func (s *Subscription) AddEndpoint(ep *RmrEndpoint) error {
- s.mutex.Lock()
- defer s.mutex.Unlock()
- if ep == nil {
- return fmt.Errorf("AddEndpoint no endpoint given")
- }
- if s.EpList.AddEndpoint(ep) {
- s.DelEpList.DelEndpoint(ep)
- if s.EpList.Size() == 1 {
- return s.updateRouteImpl(CREATE)
- }
- return s.updateRouteImpl(MERGE)
- }
- return nil
-}
-
-func (s *Subscription) DelEndpoint(ep *RmrEndpoint) error {
- s.mutex.Lock()
- defer s.mutex.Unlock()
- var err error
- if ep == nil {
- return fmt.Errorf("DelEndpoint no endpoint given")
- }
- if s.EpList.HasEndpoint(ep) == false {
- return fmt.Errorf("DelEndpoint endpoint not found")
- }
- if s.DelEpList.HasEndpoint(ep) == true {
- return fmt.Errorf("DelEndpoint endpoint already under del")
- }
- s.DelEpList.AddEndpoint(ep)
- go s.CleanCheck()
- return err
-}
-
-func (s *Subscription) CleanCheck() {
- s.mutex.Lock()
- defer s.mutex.Unlock()
- s.DelSeq++
- // Only one clean ongoing
- if s.DelSeq > 1 {
- return
- }
- var currSeq uint64 = 0
- // Make sure that routes to be deleted
- // are not deleted too fast
- for currSeq < s.DelSeq {
- currSeq = s.DelSeq
- s.mutex.Unlock()
- time.Sleep(5 * time.Second)
- s.mutex.Lock()
- }
- xapp.Logger.Info("DelEndpoint: delete cleaning %s", s.stringImpl())
- if s.EpList.Size() <= s.DelEpList.Size() {
- s.updateRouteImpl(DELETE)
- go s.registry.DelSubscription(s.Seq)
- } else if s.EpList.DelEndpoints(&s.DelEpList) {
- s.updateRouteImpl(MERGE)
- }
- s.DelSeq = 0
-
-}
-
func (s *Subscription) IsTransactionReserved() bool {
s.mutex.Lock()
defer s.mutex.Unlock()
@@ -163,12 +91,3 @@
s.mutex.Unlock()
s.TransLock.Unlock()
}
-
-func (s *Subscription) updateRouteImpl(act Action) error {
- subRouteAction := SubRouteInfo{act, s.EpList, s.Seq}
- err := s.registry.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
- if err != nil {
- return fmt.Errorf("%s %s", s.stringImpl(), err.Error())
- }
- return nil
-}