var SubDelReqTime time.Duration = 5 * time.Second
type Control struct {
- e2ap *E2ap
- registry *Registry
- rtmgrClient *RtmgrClient
- tracker *Tracker
- timerMap *TimerMap
- rmrSendMutex sync.Mutex
- skipRouteUpdate bool // temp solution to skip routeupdate in unittests
+ e2ap *E2ap
+ registry *Registry
+ rtmgrClient *RtmgrClient
+ tracker *Tracker
+ timerMap *TimerMap
+ rmrSendMutex sync.Mutex
}
type RMRMeid struct {
rtmgrClient := RtmgrClient{client, handle, deleteHandle}
return &Control{e2ap: new(E2ap),
- registry: registry,
- rtmgrClient: &rtmgrClient,
- tracker: tracker,
- timerMap: timerMap,
- skipRouteUpdate: false,
+ registry: registry,
+ rtmgrClient: &rtmgrClient,
+ tracker: tracker,
+ timerMap: timerMap,
}
}
err := c.e2ap.SetSubscriptionRequestSequenceNumber(params.Payload, newSubId)
if err != nil {
xapp.Logger.Error("SubReq: Unable to set Sequence Number in Payload. Dropping this msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ c.registry.releaseSequenceNumber(newSubId)
return
}
srcAddr, srcPort, err := c.rtmgrClient.SplitSource(params.Src)
if err != nil {
xapp.Logger.Error("SubReq: Failed to update routing-manager. Dropping this msg. Err: %s, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ c.registry.releaseSequenceNumber(newSubId)
return
}
/* Create transatcion records for every subscription request */
- xactKey := TransactionKey{newSubId, CREATE}
- xactValue := Transaction{*srcAddr, *srcPort, params}
- err = c.tracker.TrackTransaction(xactKey, xactValue)
+ transaction, err := c.tracker.TrackTransaction(newSubId, CREATE, *srcAddr, *srcPort, params)
if err != nil {
xapp.Logger.Error("SubReq: Failed to create transaction record. Dropping this msg. Err: %v SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ c.registry.releaseSequenceNumber(newSubId)
return
}
/* Update routing manager about the new subscription*/
- subRouteAction := SubRouteInfo{CREATE, *srcAddr, *srcPort, newSubId}
+ subRouteAction := transaction.SubRouteInfo()
xapp.Logger.Info("SubReq: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
- if c.skipRouteUpdate == false {
- err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
- if err != nil {
- xapp.Logger.Error("SubReq: Failed to update routing manager. Dropping this SubReq msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
- return
- }
+ err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+ if err != nil {
+ xapp.Logger.Error("SubReq: Failed to update routing manager. Dropping this SubReq msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ return
}
// Setting new subscription ID in the RMR header
c.timerMap.StopTimer("RIC_SUB_REQ", int(payloadSeqNum))
c.registry.setSubscriptionToConfirmed(payloadSeqNum)
- var transaction Transaction
- transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, CREATE)
+ transaction, err := c.tracker.RetriveTransaction(payloadSeqNum, CREATE)
if err != nil {
xapp.Logger.Error("SubResp: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
return
}
- xapp.Logger.Info("SubResp: SubId: %v, from address: %v:%v. Retrieved old subId", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
+ xapp.Logger.Info("SubResp: SubId: %v, from address: %v:%v. Retrieved old subId", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
params.SubId = int(payloadSeqNum)
params.Xid = transaction.OrigParams.Xid
xapp.Logger.Error("SubResp: Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
}
- xapp.Logger.Info("SubResp: SubId: %v, from address: %v:%v. Deleting transaction record", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
+ xapp.Logger.Info("SubResp: SubId: %v, from address: %v:%v. Deleting transaction record", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
transaction, err = c.tracker.completeTransaction(payloadSeqNum, CREATE)
if err != nil {
xapp.Logger.Error("SubResp: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
c.timerMap.StopTimer("RIC_SUB_REQ", int(payloadSeqNum))
- var transaction Transaction
- transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, CREATE)
+ transaction, err := c.tracker.RetriveTransaction(payloadSeqNum, CREATE)
if err != nil {
xapp.Logger.Error("SubFail: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
return
}
- xapp.Logger.Info("SubFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
+ xapp.Logger.Info("SubFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
params.SubId = int(payloadSeqNum)
params.Xid = transaction.OrigParams.Xid
time.Sleep(3 * time.Second)
- if c.skipRouteUpdate == false {
- xapp.Logger.Info("SubFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
- subRouteAction := SubRouteInfo{CREATE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
- err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
- if err != nil {
- xapp.Logger.Error("SubFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
- }
+ xapp.Logger.Info("SubFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
+ subRouteAction := transaction.SubRouteInfo()
+ err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+ if err != nil {
+ xapp.Logger.Error("SubFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
}
xapp.Logger.Info("SubFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
time.Sleep(3 * time.Second)
- xapp.Logger.Info("SendSubFail: SubId: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.XappInstanceAddress, transaction.XappPort)
+ xapp.Logger.Info("SendSubFail: SubId: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.Xappkey.Addr, transaction.Xappkey.Port)
xapp.Logger.Info("SubReqTimer: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
- subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, subId}
+ subRouteAction := SubRouteInfo{DELETE, transaction.Xappkey.Addr, transaction.Xappkey.Port, subId}
err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
if err != nil {
xapp.Logger.Error("SendSubFail: Failed to update routing manager %v. SubId: %v, Xid: %s", err, params.SubId, params.Xid)
if c.registry.IsValidSequenceNumber(payloadSeqNum) {
c.registry.deleteSubscription(payloadSeqNum)
- err = c.trackDeleteTransaction(params, payloadSeqNum)
+ _, err = c.trackDeleteTransaction(params, payloadSeqNum)
if err != nil {
xapp.Logger.Error("SubDelReq: Failed to create transaction record. Dropping this msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
return
return
}
-func (c *Control) trackDeleteTransaction(params *xapp.RMRParams, payloadSeqNum uint16) (err error) {
+func (c *Control) trackDeleteTransaction(params *xapp.RMRParams, payloadSeqNum uint16) (transaction *Transaction, err error) {
srcAddr, srcPort, err := c.rtmgrClient.SplitSource(params.Src)
if err != nil {
xapp.Logger.Error("SubDelReq: Failed to update routing-manager. Err: %s, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
}
- xactKey := TransactionKey{payloadSeqNum, DELETE}
- xactValue := Transaction{*srcAddr, *srcPort, params}
- err = c.tracker.TrackTransaction(xactKey, xactValue)
+ transaction, err = c.tracker.TrackTransaction(payloadSeqNum, DELETE, *srcAddr, *srcPort, params)
return
}
c.timerMap.StopTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum))
- var transaction Transaction
- transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
+ transaction, err := c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
if err != nil {
xapp.Logger.Error("SubDelResp: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
return
}
- xapp.Logger.Info("SubDelResp: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
+ xapp.Logger.Info("SubDelResp: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
params.SubId = int(payloadSeqNum)
params.Xid = transaction.OrigParams.Xid
time.Sleep(3 * time.Second)
- if c.skipRouteUpdate == false {
- xapp.Logger.Info("SubDelResp: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
- subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
- err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
- if err != nil {
- xapp.Logger.Error("SubDelResp: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
- return
- }
+ xapp.Logger.Info("SubDelResp: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
+ subRouteAction := SubRouteInfo{DELETE, transaction.Xappkey.Addr, transaction.Xappkey.Port, payloadSeqNum}
+ err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+ if err != nil {
+ xapp.Logger.Error("SubDelResp: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ return
}
xapp.Logger.Info("SubDelResp: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
c.timerMap.StopTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum))
- var transaction Transaction
- transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
+ transaction, err := c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
if err != nil {
xapp.Logger.Error("SubDelFail: Failed to retrive transaction record. Dropping msg. Err %v, SubId: %v", err, params.SubId)
return
}
- xapp.Logger.Info("SubDelFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
+ xapp.Logger.Info("SubDelFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
params.SubId = int(payloadSeqNum)
params.Xid = transaction.OrigParams.Xid
time.Sleep(3 * time.Second)
- if c.skipRouteUpdate == false {
- xapp.Logger.Info("SubDelFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
- subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
- c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
- if err != nil {
- xapp.Logger.Error("SubDelFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
- return
- }
+ xapp.Logger.Info("SubDelFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
+ subRouteAction := SubRouteInfo{DELETE, transaction.Xappkey.Addr, transaction.Xappkey.Port, payloadSeqNum}
+ c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+ if err != nil {
+ xapp.Logger.Error("SubDelFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ return
}
xapp.Logger.Info("SubDelFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
time.Sleep(3 * time.Second)
- xapp.Logger.Info("SendSubDelFail: SubId: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.XappInstanceAddress, transaction.XappPort)
+ xapp.Logger.Info("SendSubDelFail: SubId: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.Xappkey.Addr, transaction.Xappkey.Port)
xapp.Logger.Info("SendSubDelFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
- subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, subId}
+ subRouteAction := SubRouteInfo{DELETE, transaction.Xappkey.Addr, transaction.Xappkey.Port, subId}
err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
if err != nil {
xapp.Logger.Error("SendSubDelFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)