From b3c466d8ab4254f6b34a1f0af926c79a92ea372b Mon Sep 17 00:00:00 2001 From: wahidw Date: Fri, 28 May 2021 17:11:50 +0000 Subject: [PATCH] Fixed bug: MEID table not getting built during rtmgr restart; MEID table optimization Signed-off-by: wahidw Change-Id: I530b94c684848b1bd887e0c286e6b782a33474bb --- pkg/nbi/httprestful.go | 11 ++++++----- pkg/rpe/rmr.go | 35 +++++++++++++++++++++++------------ pkg/rpe/types.go | 5 +++++ 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/pkg/nbi/httprestful.go b/pkg/nbi/httprestful.go index 9222e0b..5223162 100644 --- a/pkg/nbi/httprestful.go +++ b/pkg/nbi/httprestful.go @@ -451,14 +451,14 @@ func httpGetE2TList(e2murl string) (*[]rtmgr.E2tIdentity, error) { xapp.Logger.Warn("Json decode failed: " + err.Error()) } xapp.Logger.Info("HTTP GET: OK") - xapp.Logger.Debug("httprestful.httpGetXApps returns: %v", E2Tlist) + xapp.Logger.Debug("httprestful.httpGetE2TList returns: %v", E2Tlist) return &E2Tlist, err } xapp.Logger.Warn("httprestful got an unexpected http status code: %v", r.StatusCode) return nil, nil } -func PopulateE2TMap(e2tDataList *[]rtmgr.E2tIdentity, e2ts map[string]rtmgr.E2TInstance, meids []string) { +func PopulateE2TMap(e2tDataList *[]rtmgr.E2tIdentity, e2ts map[string]rtmgr.E2TInstance, meids *[]string) { xapp.Logger.Info("Invoked httprestful.PopulateE2TMap ") for _, e2tData := range *e2tDataList { @@ -477,12 +477,13 @@ func PopulateE2TMap(e2tDataList *[]rtmgr.E2tIdentity, e2ts map[string]rtmgr.E2TI for _, meid := range e2tData.Rannames { meidar += meid + " " } - str += "mme_ar|" + e2tData.E2taddress + "|" + strings.TrimSuffix(meidar, " ") + str = "mme_ar|" + e2tData.E2taddress + "|" + strings.TrimSuffix(meidar, " ") + *meids = append(*meids, str) } e2ts[e2tinst.Fqdn] = e2tinst - meids = append(meids, str) } + xapp.Logger.Info("MEID's retrieved are %v", *meids) } func retrieveStartupData(xmurl string, nbiif string, fileName string, configfile string, e2murl string, sdlEngine sdl.Engine) error { @@ -520,7 +521,7 @@ func retrieveStartupData(xmurl string, nbiif string, fileName string, configfile readErr = nil e2tDataList, err := httpGetE2TList(e2murl) if e2tDataList != nil && err == nil { - PopulateE2TMap(e2tDataList, e2ts, meids[:]) + PopulateE2TMap(e2tDataList, e2ts, &meids) break } else if err == nil { readErr = errors.New("unexpected HTTP status code") diff --git a/pkg/rpe/rmr.go b/pkg/rpe/rmr.go index 17c977b..56d2ff7 100644 --- a/pkg/rpe/rmr.go +++ b/pkg/rpe/rmr.go @@ -35,7 +35,7 @@ import ( "routing-manager/pkg/models" "routing-manager/pkg/rtmgr" "strconv" - //"strings" + "strings" ) type Rmr struct { @@ -94,22 +94,33 @@ func (r *Rmr) generateRMRPolicies(eps rtmgr.Endpoints, rcs *rtmgr.RicComponents, rawrt = append(rawrt, key+"newrt|end\n") count := 0 - //meidrt := key + "meid_map|start\n" - //meidrt := []string{key + "meid_map|start\n"} rawrt = append(rawrt, key+"meid_map|start\n") + keys := make(map[string]RouteIndex) for _, value := range rcs.MeidMap { - //meidrt += key + value + "\n" - rawrt = append(rawrt, key+value+"\n") - count++ + if _, v := keys[key+value+"\n"]; !v { + rawrt = append(rawrt, key+value+"\n") + appendedindex := uint16(len(rawrt)-1) + keys[key+value+"\n"] = RouteIndex{true,appendedindex} + count++ + } + if strings.Contains(value,"mme_ar") { + tmpstr := strings.Split(value,"|") + + MEID := strings.TrimSuffix(tmpstr[2],"\n") + + mapindex := "mme_del|"+MEID+"\n" + i := keys[mapindex].index + if keys[mapindex].flag { + copy(rawrt[i:], rawrt[i+1:]) + rawrt[len(rawrt)-1] = "" + rawrt = rawrt[:len(rawrt)-1] + delete(keys,mapindex) + count-- + } + } } rawrt = append(rawrt, key+"meid_map|end|"+strconv.Itoa(count)+"\n") - //meidrt += key+"meid_map|end|" + strconv.Itoa(count) +"\n" - - /*for _, value := range meidrt { - rawrt = append(meidrt, value) - }*/ - //rawrt = append(rawrt, meidrt) xapp.Logger.Debug("rmr.GeneratePolicies returns: %v", rawrt) xapp.Logger.Debug("rmr.GeneratePolicies returns: %v", rcs) return &rawrt diff --git a/pkg/rpe/types.go b/pkg/rpe/types.go index 2d466d3..95cdf01 100644 --- a/pkg/rpe/types.go +++ b/pkg/rpe/types.go @@ -50,3 +50,8 @@ type Engine interface { GenerateRouteTable(rtmgr.Endpoints) *rtmgr.RouteTable GeneratePartialPolicies(eps rtmgr.Endpoints, xappSubData *models.XappSubscriptionData, updatetype rtmgr.RMRUpdateType) *[]string } + +type RouteIndex struct { + flag bool + index uint16 +} -- 2.16.6