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=9bbe3d47dd12675fad0c157683a82bd2d4c44abc;hpb=0388dd945789dae802aaa93c5062e3ae4c45ddf1;p=ric-plt%2Fsubmgr.git diff --git a/pkg/control/subscription.go b/pkg/control/subscription.go index 9bbe3d4..45c13ec 100644 --- a/pkg/control/subscription.go +++ b/pkg/control/subscription.go @@ -20,7 +20,7 @@ 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" @@ -30,80 +30,64 @@ import ( // //----------------------------------------------------------------------------- type Subscription struct { - mutex sync.Mutex - Seq uint16 - Active bool - // - Meid *xapp.RMRMeid - RmrEndpoint // xapp endpoint. Now only one xapp can have relation to single subscription. To be changed in merge - Trans *Transaction + 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) String() string { - s.mutex.Lock() - defer s.mutex.Unlock() - return strconv.FormatUint(uint64(s.Seq), 10) + "/" + s.RmrEndpoint.String() + "/" + s.Meid.RanName -} - -func (s *Subscription) Confirmed() { - s.mutex.Lock() - defer s.mutex.Unlock() - s.Active = true -} - -func (s *Subscription) UnConfirmed() { - s.mutex.Lock() - defer s.mutex.Unlock() - s.Active = false + return "subs(" + strconv.FormatUint(uint64(s.Seq), 10) + "/" + s.Meid.RanName + "/" + s.EpList.String() + ")" } -func (s *Subscription) IsConfirmed() bool { +func (s *Subscription) GetSubId() uint16 { s.mutex.Lock() defer s.mutex.Unlock() - return s.Active + return s.Seq } -func (s *Subscription) SetTransaction(trans *Transaction) error { +func (s *Subscription) GetMeid() *xapp.RMRMeid { s.mutex.Lock() defer s.mutex.Unlock() - - subString := strconv.FormatUint(uint64(s.Seq), 10) + "/" + s.RmrEndpoint.String() + "/" + s.Meid.RanName - - if (s.RmrEndpoint.Addr != trans.RmrEndpoint.Addr) || (s.RmrEndpoint.Port != trans.RmrEndpoint.Port) { - return fmt.Errorf("Subscription: %s endpoint mismatch with trans: %s", subString, trans) - } - if s.Trans != nil { - return fmt.Errorf("Subscription: %s trans %s exist, can not register %s", subString, s.Trans, trans) + if s.Meid != nil { + return s.Meid } - trans.Subs = s - s.Trans = trans return nil } -func (s *Subscription) UnSetTransaction(trans *Transaction) bool { +func (s *Subscription) IsTransactionReserved() bool { s.mutex.Lock() defer s.mutex.Unlock() - if trans == nil || trans == s.Trans { - s.Trans = nil + if s.TheTrans != nil { return true } return false + } func (s *Subscription) GetTransaction() *Transaction { s.mutex.Lock() defer s.mutex.Unlock() - return s.Trans + return s.TheTrans } -func (s *Subscription) UpdateRoute(act Action, rtmgrClient *RtmgrClient) error { +func (s *Subscription) WaitTransactionTurn(trans *Transaction) { + s.TransLock.Lock() s.mutex.Lock() - defer s.mutex.Unlock() - xapp.Logger.Info("Subscription: Starting routing manager route add. SubId: %d, RmrEndpoint: %s", s.Seq, s.RmrEndpoint) - subRouteAction := SubRouteInfo{act, s.RmrEndpoint.Addr, s.RmrEndpoint.Port, s.Seq} - err := rtmgrClient.SubscriptionRequestUpdate(subRouteAction) - if err != nil { - return fmt.Errorf("Subscription: Failed to add route. SubId: %d, RmrEndpoint: %s", s.Seq, s.RmrEndpoint) + s.TheTrans = trans + s.mutex.Unlock() +} + +func (s *Subscription) ReleaseTransactionTurn(trans *Transaction) { + s.mutex.Lock() + if trans != nil && trans == s.TheTrans { + s.TheTrans = nil } - return nil + s.mutex.Unlock() + s.TransLock.Unlock() }