X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Fcontrol%2Fsubscription.go;h=45c13ec107f88fc3c67e86049e709d20efd3d2e7;hb=refs%2Fchanges%2F26%2F2326%2F1;hp=4514d007fc2a786248c72fef0e7d084a0540d52e;hpb=422d018f94aedd9f4c001176b5ff06c786de28eb;p=ric-plt%2Fsubmgr.git 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 @@ func (s *Subscription) GetMeid() *xapp.RMRMeid { 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 @@ func (s *Subscription) ReleaseTransactionTurn(trans *Transaction) { 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 -}