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"
}
func (key *TransactionXappKey) String() string {
- return key.RmrEndpoint.String() + "/" + key.Xid
+ return "transkey(" + key.RmrEndpoint.String() + "/" + key.Xid + ")"
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
type Transaction struct {
mutex sync.Mutex
- tracker *Tracker //tracker instance
- Subs *Subscription //related subscription
- RmrEndpoint RmrEndpoint //xapp endpoint
- Mtype int //type of initiating message
- 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
- Payload []byte //packed message to optimize retransmissions
- PayloadLen int //packed message len to optimize retransmissions
+ 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 {
}
func (t *Transaction) Release() {
- xapp.Logger.Info("Transaction: Releasing %s", t)
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)
+ }
}