From: kalnagy Date: Wed, 18 Sep 2019 13:09:32 +0000 (+0200) Subject: Routing manager v0.3.3 X-Git-Tag: 0.3.9~11 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=edd45717efffb32e407206a647f38579757f4908;p=ric-plt%2Frtmgr.git Routing manager v0.3.3 Introduced delete API over REST interface for subscriptions And Integration fixes Change-Id: Ib44037b3958f89ace832f4521edcb0d0e28f45f0 Signed-off-by: kalnagy --- diff --git a/.gitignore b/.gitignore index 66d38c8..13ea118 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ vendor bin pkg/sdl/ut.rt +.idea/* + diff --git a/RELNOTES b/RELNOTES index 92b98fa..39d7e16 100644 --- a/RELNOTES +++ b/RELNOTES @@ -1,3 +1,6 @@ +### v0.3.3 +* Introduced delete API over REST interface for subscriptions. + ### v0.3.2 * Minor code changes due to appmgr/rtmgr api differences * Doc update diff --git a/api/routing_manager.yaml b/api/routing_manager.yaml index 93c4fc9..7bfbfea 100644 --- a/api/routing_manager.yaml +++ b/api/routing_manager.yaml @@ -126,6 +126,26 @@ paths: description: "Invalid data" 201: description: "Xapp Subscription data received" + delete: + tags: + - "handle" + summary: "API for deleting an xapp subscription" + description: "By performing the delete operation on xapp-subscription-handle resource, the API caller will be able to update routing manager about the deletion of an xapp's subscription" + operationId: "delete_xapp_subscription_handle" + consumes: + - "application/json" + parameters: + - in: "body" + name: "xapp-subscription-data" + description: "xApp related subscription data" + required: true + schema: + $ref: "#/definitions/xapp-subscription-data" + responses: + 204: + description: "Content not found" + 200: + description: "Xapp Subscription deleted" /handles/xapp-subscription-handle/{subscription_id}: put: tags: diff --git a/container-tag.yaml b/container-tag.yaml index db88a6c..884ddaa 100644 --- a/container-tag.yaml +++ b/container-tag.yaml @@ -2,4 +2,4 @@ # By default this file is in the docker build directory, # but the location can configured in the JJB template. --- -tag: 0.3.2 +tag: 0.3.3 diff --git a/pkg/nbi/httprestful.go b/pkg/nbi/httprestful.go index 3d94cc9..336e615 100644 --- a/pkg/nbi/httprestful.go +++ b/pkg/nbi/httprestful.go @@ -106,7 +106,7 @@ func provideXappHandleHandlerImpl(datach chan<- *models.XappCallbackData, data * } err := validateXappCallbackData(data) if err != nil { - rtmgr.Logger.Debug("XApp callback data validation failed: "+err.Error()) + rtmgr.Logger.Warn("XApp callback data validation failed: "+err.Error()) return err } else { datach<-data @@ -139,7 +139,39 @@ func provideXappSubscriptionHandleImpl(subchan chan<- *models.XappSubscriptionDa return nil } -func launchRest(nbiif *string, datach chan<- *models.XappCallbackData, subchan chan<- *models.XappSubscriptionData) { +func subscriptionExists(data *models.XappSubscriptionData) bool { + present := false + sub := rtmgr.Subscription{SubID:*data.SubscriptionID, Fqdn:*data.Address, Port:*data.Port,} + for _, elem := range rtmgr.Subs { + if elem == sub { + present = true + break + } + } + return present +} + +func deleteXappSubscriptionHandleImpl(subdelchan chan<- *models.XappSubscriptionData, + data *models.XappSubscriptionData) error { + rtmgr.Logger.Debug("Invoked deleteXappSubscriptionHandleImpl") + err := validateXappSubscriptionData(data) + if err != nil { + rtmgr.Logger.Error(err.Error()) + return err + } + + if !subscriptionExists(data) { + rtmgr.Logger.Warn("Subscription not found: %d", *data.SubscriptionID) + err := fmt.Errorf("Subscription not found: %d", *data.SubscriptionID) + return err + } + + subdelchan <- data + return nil +} + +func launchRest(nbiif *string, datach chan<- *models.XappCallbackData, subchan chan<- *models.XappSubscriptionData, + subdelchan chan<- *models.XappSubscriptionData) { swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON) if err != nil { //log.Fatalln(err) @@ -182,6 +214,15 @@ func launchRest(nbiif *string, datach chan<- *models.XappCallbackData, subchan c return handle.NewGetHandlesOK() } }) + api.HandleDeleteXappSubscriptionHandleHandler = handle.DeleteXappSubscriptionHandleHandlerFunc( + func(params handle.DeleteXappSubscriptionHandleParams) middleware.Responder { + err := deleteXappSubscriptionHandleImpl(subdelchan, params.XappSubscriptionData) + if err != nil { + return handle.NewDeleteXappSubscriptionHandleNoContent() + } else { + return handle.NewGetHandlesOK() + } + }) // start to serve API rtmgr.Logger.Info("Starting the HTTP Rest service") if err := server.Serve(); err != nil { @@ -261,9 +302,10 @@ func (r *HttpRestful) Initialize(xmurl string, nbiif string, fileName string, co datach := make(chan *models.XappCallbackData, 10) subschan := make(chan *models.XappSubscriptionData, 10) + subdelchan := make(chan *models.XappSubscriptionData, 10) rtmgr.Logger.Info("Launching Rest Http service") go func() { - r.LaunchRest(&nbiif, datach, subschan) + r.LaunchRest(&nbiif, datach, subschan, subdelchan) }() go func() { @@ -277,6 +319,7 @@ func (r *HttpRestful) Initialize(xmurl string, nbiif string, fileName string, co } } }() + go func() { for { data := <-subschan @@ -286,6 +329,15 @@ func (r *HttpRestful) Initialize(xmurl string, nbiif string, fileName string, co } }() + go func() { + for { + data := <-subdelchan + rtmgr.Logger.Debug("received XApp subscription delete data") + delSubscription(&rtmgr.Subs, data) + triggerSBI <- true + } + }() + return nil } @@ -308,3 +360,22 @@ func addSubscription(subs *rtmgr.SubscriptionList, xappSubData *models.XappSubsc return b } +func delSubscription(subs *rtmgr.SubscriptionList, xappSubData *models.XappSubscriptionData) bool { + rtmgr.Logger.Debug("Deleteing the subscription from the subscriptions list") + var present bool = false + sub := rtmgr.Subscription{SubID:*xappSubData.SubscriptionID, Fqdn:*xappSubData.Address, Port:*xappSubData.Port,} + for i, elem := range *subs { + if elem == sub { + present = true + // Since the order of the list is not important, we are swapping the last element + // with the matching element and replacing the list with list(n-1) elements. + (*subs)[len(*subs)-1], (*subs)[i] = (*subs)[i], (*subs)[len(*subs)-1] + *subs = (*subs)[:len(*subs)-1] + break + } + } + if present == false { + rtmgr.Logger.Warn("rtmgr.delSubscription: Subscription = %v, not present in the existing subscriptions", xappSubData) + } + return present +} diff --git a/pkg/nbi/types.go b/pkg/nbi/types.go index 2b4bebb..813363e 100644 --- a/pkg/nbi/types.go +++ b/pkg/nbi/types.go @@ -33,7 +33,7 @@ import ( type FetchAllXappsHandler func(string) (*[]rtmgr.XApp, error) type RecvXappCallbackDataHandler func(<-chan *models.XappCallbackData) (*[]rtmgr.XApp, error) -type LaunchRestHandler func(*string, chan<- *models.XappCallbackData, chan<- *models.XappSubscriptionData) +type LaunchRestHandler func(*string, chan<- *models.XappCallbackData, chan<- *models.XappSubscriptionData, chan<- *models.XappSubscriptionData) type ProvideXappHandleHandlerImpl func(chan<- *models.XappCallbackData, *models.XappCallbackData) (error) type RetrieveStartupDataHandler func(string, string, string, string, sdl.SdlEngine) error