- Submgr crashed if it received REST Subscription Request while it was still starting
Change-Id: Ie434333ccf2b269c9f8dcf7a82fd60f12fa87ebc
Signed-off-by: Anssi Mannila <anssi.mannila@nokia.com>
var e2tMaxSubReqTryCount uint64 // Initial try + retry
var e2tMaxSubDelReqTryCount uint64 // Initial try + retry
var readSubsFromDb string
-var restDuplicateCtrl duplicateCtrl
var dbRetryForever string
var dbTryCount int
type Control struct {
*xapp.RMRClient
- e2ap *E2ap
- registry *Registry
- tracker *Tracker
- e2SubsDb Sdlnterface
- restSubsDb Sdlnterface
- CntRecvMsg uint64
- ResetTestFlag bool
- Counters map[string]xapp.Counter
- LoggerLevel uint32
- UTTesting bool
+ e2ap *E2ap
+ registry *Registry
+ tracker *Tracker
+ restDuplicateCtrl *DuplicateCtrl
+ e2SubsDb Sdlnterface
+ restSubsDb Sdlnterface
+ CntRecvMsg uint64
+ ResetTestFlag bool
+ Counters map[string]xapp.Counter
+ LoggerLevel uint32
+ UTTesting bool
}
type RMRMeid struct {
tracker := new(Tracker)
tracker.Init()
+ restDuplicateCtrl := new(DuplicateCtrl)
+ restDuplicateCtrl.Init()
+
c := &Control{e2ap: new(E2ap),
- registry: registry,
- tracker: tracker,
- e2SubsDb: CreateSdl(),
- restSubsDb: CreateRESTSdl(),
- Counters: xapp.Metric.RegisterCounterGroup(GetMetricsOpts(), "SUBMGR"),
- LoggerLevel: 3,
+ registry: registry,
+ tracker: tracker,
+ restDuplicateCtrl: restDuplicateCtrl,
+ e2SubsDb: CreateSdl(),
+ restSubsDb: CreateRESTSdl(),
+ Counters: xapp.Metric.RegisterCounterGroup(GetMetricsOpts(), "SUBMGR"),
+ LoggerLevel: 4,
}
c.ReadConfigParameters("")
xapp.Resource.InjectRoute("/ric/v1/restsubscriptions", c.GetAllRestSubscriptions, "GET")
xapp.Resource.InjectRoute("/ric/v1/symptomdata", c.SymptomDataHandler, "GET")
- go xapp.Subscription.Listen(c.SubscriptionHandler, c.QueryHandler, c.SubscriptionDeleteHandlerCB)
-
if readSubsFromDb == "false" {
return c
}
- restDuplicateCtrl.Init()
-
// Read subscriptions from db
c.ReadE2Subscriptions()
c.ReadRESTSubscriptions()
+
+ go xapp.Subscription.Listen(c.SubscriptionHandler, c.QueryHandler, c.SubscriptionDeleteHandlerCB)
+
return c
}
var restSubscription *RESTSubscription
var err error
- prevRestSubsId, exists := restDuplicateCtrl.GetLastKnownRestSubsIdBasedOnMd5sum(md5sum)
+ prevRestSubsId, exists := c.restDuplicateCtrl.GetLastKnownRestSubsIdBasedOnMd5sum(md5sum)
if p.SubscriptionID == "" {
if exists {
restSubscription, err = c.registry.GetRESTSubscription(prevRestSubsId, false)
}
} else {
xapp.Logger.Info("None existing restSubId %s referred by MD5sum %s for a request without subscription ID - deleting cached entry", prevRestSubsId, md5sum)
- restDuplicateCtrl.DeleteLastKnownRestSubsIdBasedOnMd5sum(md5sum)
+ c.restDuplicateCtrl.DeleteLastKnownRestSubsIdBasedOnMd5sum(md5sum)
}
}
err = c.e2ap.FillSubscriptionReqMsgs(params, &subReqList, restSubscription)
if err != nil {
xapp.Logger.Error("%s", err.Error())
- restDuplicateCtrl.DeleteLastKnownRestSubsIdBasedOnMd5sum(md5sum)
+ c.restDuplicateCtrl.DeleteLastKnownRestSubsIdBasedOnMd5sum(md5sum)
c.registry.DeleteRESTSubscription(&restSubId)
c.UpdateCounter(cRestSubFailToXapp)
return nil, err
}
- duplicate := restDuplicateCtrl.IsDuplicateToOngoingTransaction(restSubId, md5sum)
+ duplicate := c.restDuplicateCtrl.IsDuplicateToOngoingTransaction(restSubId, md5sum)
if duplicate {
xapp.Logger.Info("Retransmission blocker direct ACK for request of restSubsId %s restSubId MD5sum %s as retransmission", restSubId, md5sum)
c.UpdateCounter(cRestSubRespToXapp)
var xAppEventInstanceID int64
var e2EventInstanceID int64
- defer restDuplicateCtrl.SetMd5sumFromLastOkRequest(*restSubId, md5sum)
+ defer c.restDuplicateCtrl.SetMd5sumFromLastOkRequest(*restSubId, md5sum)
for index := 0; index < len(subReqList.E2APSubscriptionRequests); index++ {
subReqMsg := subReqList.E2APSubscriptionRequests[index]
restSubscription.DeleteXappIdToE2Id(xAppEventInstanceID)
restSubscription.DeleteE2InstanceId(instanceId)
}
- restDuplicateCtrl.DeleteLastKnownRestSubsIdBasedOnMd5sum(restSubscription.lastReqMd5sum)
+ c.restDuplicateCtrl.DeleteLastKnownRestSubsIdBasedOnMd5sum(restSubscription.lastReqMd5sum)
c.registry.DeleteRESTSubscription(&restSubId)
c.RemoveRESTSubscriptionFromDb(restSubId)
}()
"gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
)
-type retransEntry struct {
+type RetransEntry struct {
restSubsId string
startTime time.Time
}
-type duplicateCtrl struct {
+type DuplicateCtrl struct {
mutex sync.Mutex
- ongoingRequestMap map[string]retransEntry
+ ongoingRequestMap map[string]RetransEntry
previousRequestMap map[string]string
collCount int
}
-func (d *duplicateCtrl) Init() {
- d.ongoingRequestMap = make(map[string]retransEntry)
+func (d *DuplicateCtrl) Init() {
+ d.ongoingRequestMap = make(map[string]RetransEntry)
d.previousRequestMap = make(map[string]string)
}
-func (d *duplicateCtrl) SetMd5sumFromLastOkRequest(restSubsId string, md5sum string) {
+func (d *DuplicateCtrl) SetMd5sumFromLastOkRequest(restSubsId string, md5sum string) {
d.mutex.Lock()
defer d.mutex.Unlock()
d.previousRequestMap[md5sum] = restSubsId
}
-func (d *duplicateCtrl) GetLastKnownRestSubsIdBasedOnMd5sum(md5sum string) (string, bool) {
+func (d *DuplicateCtrl) GetLastKnownRestSubsIdBasedOnMd5sum(md5sum string) (string, bool) {
d.mutex.Lock()
defer d.mutex.Unlock()
return m, e
}
-func (d *duplicateCtrl) DeleteLastKnownRestSubsIdBasedOnMd5sum(md5sum string) {
+func (d *DuplicateCtrl) DeleteLastKnownRestSubsIdBasedOnMd5sum(md5sum string) {
d.mutex.Lock()
defer d.mutex.Unlock()
return hex.EncodeToString(hash[:]), nil
}
-func (d *duplicateCtrl) IsDuplicateToOngoingTransaction(restSubsId string, md5sum string) bool {
+func (d *DuplicateCtrl) IsDuplicateToOngoingTransaction(restSubsId string, md5sum string) bool {
if md5sum == "" {
return false
return true
}
- entry = retransEntry{restSubsId: restSubsId, startTime: time.Now()}
+ entry = RetransEntry{restSubsId: restSubsId, startTime: time.Now()}
xapp.Logger.Debug("No collision detected against ongoing transaction. Added md5sum %s for restSubsId %s at %s\n", md5sum, entry.restSubsId, entry.startTime)
return false
}
-func (d *duplicateCtrl) TransactionComplete(md5sum string) error {
+func (d *DuplicateCtrl) TransactionComplete(md5sum string) error {
if md5sum == "" {
return nil
return d.removeOngoingTransaction(md5sum)
}
-func (d *duplicateCtrl) removeOngoingTransaction(md5sum string) error {
+func (d *DuplicateCtrl) removeOngoingTransaction(md5sum string) error {
entry, present := d.ongoingRequestMap[md5sum]
fmt.Println("##################### TestRetransmissionChecker #####################")
- var retransCtrl duplicateCtrl
+ var retransCtrl DuplicateCtrl
restSubdId := "898dfkjashntgkjasgho4"
var name string = "yolo"
var someVal int64 = 98765
fmt.Println("##################### TestDuplicate #####################")
- var retransCtrl duplicateCtrl
+ var retransCtrl DuplicateCtrl
restSubdId := "898dfkjashntgkjasgho4"
var name string = "yolo"
var someVal int64 = 98765
fmt.Println("##################### TestNoneDuplicate #####################")
- var retransCtrl duplicateCtrl
+ var retransCtrl DuplicateCtrl
restSubdId := "898dfkjashntgkjasgho4"
var name string = "yolo"
var someVal int64 = 98765
fmt.Println("##################### TestEncodingError #####################")
- var retransCtrl duplicateCtrl
+ var retransCtrl DuplicateCtrl
var data interface{}
retransCtrl.Init()
fmt.Println("##################### TestRemovalError #####################")
- var retransCtrl duplicateCtrl
+ var retransCtrl DuplicateCtrl
restSubdId := "898dfkjashntgkjasgho4"
var data testData
fmt.Println("##################### TestXappRestReqDuplicate #####################")
- var retransCtrl duplicateCtrl
+ var retransCtrl DuplicateCtrl
msg1 := new(models.SubscriptionParams)
msg2 := new(models.SubscriptionParams)
restSubs = c.CreateRESTSubscription(restSubscriptionInfo, &jsonSubscriptionInfo)
- restDuplicateCtrl.SetMd5sumFromLastOkRequest(restSubId, restSubs.lastReqMd5sum)
+ c.restDuplicateCtrl.SetMd5sumFromLastOkRequest(restSubId, restSubs.lastReqMd5sum)
}
return restSubs, nil
}
mainCtrl.c.registry.subIds = nil
// Initialize subIds slice and subscription map
mainCtrl.c.registry.Initialize()
- restDuplicateCtrl.Init()
+ mainCtrl.c.restDuplicateCtrl.Init()
// Read subIds and subscriptions from database
subIds, register, err := mainCtrl.c.ReadAllSubscriptionsFromSdl()
if err != nil {
SetPackerIf(e2ap_wrapper.NewUtAsn1E2APPacker())
- restDuplicateCtrl.Init()
+ mainCtrl.c.restDuplicateCtrl.Init()
}