Publish Route only once to the endpoint that requests it. Periodic/Event based distri...
[ric-plt/rtmgr.git] / pkg / nbi / control.go
index 0ab3f06..db6c405 100644 (file)
@@ -136,26 +136,34 @@ func (c *Control) handleUpdateToRoutingManagerRequest(params *xapp.RMRParams) {
        xapp.Logger.Info("Update Route Table Request, msg.String() : %s", msg.String())
        xapp.Logger.Info("Update Route Table Request, params.Payload : %s", string(params.Payload))
 
-       /*m.Lock()
+       m.Lock()
        data, err := sdlEngine.ReadAll(xapp.Config.GetString("rtfile"))
        m.Unlock()
        if err != nil || data == nil {
                xapp.Logger.Error("Cannot get data from sdl interface due to: " + err.Error())
                return
-       }*/
+       }
 
-       sbiEngine.CreateEndpoint(string(params.Payload),msg.String())
-       /*if ep == nil {
+       ep := sbiEngine.CheckEndpoint(string(params.Payload))
+       if ep == nil {
                xapp.Logger.Error("Update Routing Table Request can't handle due to end point %s is not avail in complete ep list: ", string(params.Payload))
                return
        }
+       epstr,whid := sbiEngine.CreateEndpoint(msg.String())
+       if epstr == nil || whid < 0 {
+               xapp.Logger.Error("Wormhole Id creation failed %d for %s",whid,msg.String() )
+               return
+       }
 
+       /*This is to ensure the latest routes are sent.
+       Assumption is that in this time interval the routes are built for this endpoint */
+        time.Sleep(100 * time.Millisecond)
        policies := rpeEngine.GeneratePolicies(rtmgr.Eps, data)
-       err = sbiEngine.DistributeToEp(policies, ep)
+       err = sbiEngine.DistributeToEp(policies, *epstr, whid)
        if err != nil {
                xapp.Logger.Error("Routing table cannot be published due to: " + err.Error())
                return
-       }*/
+       }
 }
 
 func sendRoutesToAll() (err error) {