X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Fcontrol%2Ftransaction.go;fp=pkg%2Fcontrol%2Ftransaction.go;h=f686b44630a4cdae29622cbf2c3915c5d63c399a;hb=0388dd945789dae802aaa93c5062e3ae4c45ddf1;hp=0000000000000000000000000000000000000000;hpb=0d064ecdb5239a875857b5910f7f6e83f827d7a6;p=ric-plt%2Fsubmgr.git diff --git a/pkg/control/transaction.go b/pkg/control/transaction.go new file mode 100644 index 0000000..f686b44 --- /dev/null +++ b/pkg/control/transaction.go @@ -0,0 +1,92 @@ +/* +================================================================================== + Copyright (c) 2019 AT&T Intellectual Property. + Copyright (c) 2019 Nokia + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +================================================================================== +*/ + +package control + +import ( + "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" + "strconv" + "sync" +) + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +type TransactionXappKey struct { + RmrEndpoint + Xid string // xapp xid in req +} + +func (key *TransactionXappKey) String() string { + return key.RmrEndpoint.String() + "/" + key.Xid +} + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +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 + RespReceived bool + ForwardRespToXapp bool +} + +func (t *Transaction) String() string { + t.mutex.Lock() + defer t.mutex.Unlock() + var subId string = "?" + if t.Subs != nil { + subId = strconv.FormatUint(uint64(t.Subs.Seq), 10) + } + return subId + "/" + t.RmrEndpoint.String() + "/" + t.Xid +} + +func (t *Transaction) CheckResponseReceived() bool { + t.mutex.Lock() + defer t.mutex.Unlock() + if t.RespReceived == false { + t.RespReceived = true + return false + } + return true +} + +func (t *Transaction) RetryTransaction() { + t.mutex.Lock() + defer t.mutex.Unlock() + t.RespReceived = false +} + +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) + } + t.Subs = nil + t.tracker = nil +}