RICPLT-3014 Subs multiple rmr endpoints
[ric-plt/submgr.git] / pkg / control / transaction.go
index f686b44..9adaeca 100644 (file)
@@ -20,6 +20,8 @@
 package control
 
 import (
+       "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
+       "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/packer"
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
        "strconv"
        "sync"
@@ -34,7 +36,7 @@ type TransactionXappKey struct {
 }
 
 func (key *TransactionXappKey) String() string {
-       return key.RmrEndpoint.String() + "/" + key.Xid
+       return "transkey(" + key.RmrEndpoint.String() + "/" + key.Xid + ")"
 }
 
 //-----------------------------------------------------------------------------
@@ -42,23 +44,62 @@ func (key *TransactionXappKey) String() string {
 //-----------------------------------------------------------------------------
 type Transaction struct {
        mutex             sync.Mutex
-       tracker           *Tracker // tracker instance
-       Subs              *Subscription
-       RmrEndpoint       RmrEndpoint
-       Xid               string          // xapp xid in req
-       OrigParams        *xapp.RMRParams // request orginal params
+       tracker           *Tracker                             //tracker instance
+       Subs              *Subscription                        //related subscription
+       RmrEndpoint       RmrEndpoint                          //xapp endpoint
+       Xid               string                               //xapp xid in req
+       Meid              *xapp.RMRMeid                        //meid transaction related
+       SubReqMsg         *e2ap.E2APSubscriptionRequest        //SubReq TODO: maybe own transactions per type
+       SubRespMsg        *e2ap.E2APSubscriptionResponse       //SubResp TODO: maybe own transactions per type
+       SubFailMsg        *e2ap.E2APSubscriptionFailure        //SubFail TODO: maybe own transactions per type
+       SubDelReqMsg      *e2ap.E2APSubscriptionDeleteRequest  //SubDelReq TODO: maybe own transactions per type
+       SubDelRespMsg     *e2ap.E2APSubscriptionDeleteResponse //SubDelResp TODO: maybe own transactions per type
+       SubDelFailMsg     *e2ap.E2APSubscriptionDeleteFailure  //SubDelFail TODO: maybe own transactions per type
+       Mtype             int                                  //Encoded message type to be send
+       Payload           *packer.PackedData                   //Encoded message to be send
        RespReceived      bool
        ForwardRespToXapp bool
 }
 
-func (t *Transaction) String() string {
-       t.mutex.Lock()
-       defer t.mutex.Unlock()
+func (t *Transaction) StringImpl() string {
        var subId string = "?"
        if t.Subs != nil {
                subId = strconv.FormatUint(uint64(t.Subs.Seq), 10)
        }
-       return subId + "/" + t.RmrEndpoint.String() + "/" + t.Xid
+       return "trans(" + t.RmrEndpoint.String() + "/" + t.Xid + "/" + t.Meid.RanName + "/" + subId + ")"
+}
+
+func (t *Transaction) String() string {
+       t.mutex.Lock()
+       defer t.mutex.Unlock()
+       return t.StringImpl()
+}
+
+func (t *Transaction) GetXid() string {
+       t.mutex.Lock()
+       defer t.mutex.Unlock()
+       return t.Xid
+}
+
+func (t *Transaction) GetMtype() int {
+       t.mutex.Lock()
+       defer t.mutex.Unlock()
+       return t.Mtype
+}
+
+func (t *Transaction) GetMeid() *xapp.RMRMeid {
+       t.mutex.Lock()
+       defer t.mutex.Unlock()
+       if t.Meid != nil {
+               return t.Meid
+       }
+       return nil
+}
+
+func (t *Transaction) GetSrc() string {
+       t.mutex.Lock()
+       defer t.mutex.Unlock()
+       return t.RmrEndpoint.String()
 }
 
 func (t *Transaction) CheckResponseReceived() bool {
@@ -79,14 +120,17 @@ func (t *Transaction) RetryTransaction() {
 
 func (t *Transaction) Release() {
        t.mutex.Lock()
-       defer t.mutex.Unlock()
-       if t.Subs != nil {
-               t.Subs.UnSetTransaction(t)
-       }
-       if t.tracker != nil {
-               xappkey := TransactionXappKey{t.RmrEndpoint, t.Xid}
-               t.tracker.UnTrackTransaction(xappkey)
-       }
+       subs := t.Subs
+       tracker := t.tracker
+       xappkey := TransactionXappKey{t.RmrEndpoint, t.Xid}
        t.Subs = nil
        t.tracker = nil
+       t.mutex.Unlock()
+
+       if subs != nil {
+               subs.UnSetTransaction(t)
+       }
+       if tracker != nil {
+               tracker.UnTrackTransaction(xappkey)
+       }
 }