Commit 341d8d8e authored by Simon Pastor's avatar Simon Pastor
Browse files

combined with mep code

parent f4620e62
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -255,12 +255,14 @@ func applicationsConfirmTerminationPOST(w http.ResponseWriter, r *http.Request)
		}
	}
	if !found {
		log.Error("AppInstanceId not subscribed for graceful termination")
		http.Error(w, "AppInstanceId not subscribed for graceful termination", http.StatusBadRequest)
		return
	}

	// Check if Confirm Termination was expected
	if appTerminationGracefulTimeoutMap[appInstanceId] == nil {
		log.Error("Unexpected App Confirmation Termination Notification")
		http.Error(w, "Unexpected App Confirmation Termination Notification", http.StatusBadRequest)
		return
	}
@@ -525,7 +527,7 @@ func deregisterAppTermination(subIdStr string) {

func deleteAppSubscriptions(appInstanceId string) {
	for id, sub := range appTerminationNotificationSubscriptionMap {
		if sub.AppInstanceId == appInstanceId {
		if sub != nil && sub.AppInstanceId == appInstanceId {
			subIdStr := strconv.Itoa(id)
			key := baseKey + ":app:" + appInstanceId + ":" + mappsupportKey + ":sub:" + subIdStr
			_ = rc.JSONDelEntry(key, ".")
@@ -606,10 +608,7 @@ func processAppTerminate(appInstanceId string, mep string) {
		notif.OperationAction = &operationAction
		notif.MaxGracefulTimeout = DEFAULT_GRACEFUL_TIMEOUT

		sendAppTermNotification(sub.CallbackReference, notif)
		log.Info("App Termination Notification" + "(" + subIdStr + ") for " + appInstanceId)

		// Start graceful timeout
		// Start graceful timeout prior to sending the app termination notification, or the answer could be received before the timer is started
		gracefulTimeoutTicker := time.NewTicker(time.Duration(DEFAULT_GRACEFUL_TIMEOUT) * time.Second)
		appTerminationGracefulTimeoutMap[appInstanceId] = gracefulTimeoutTicker
		go func() {
@@ -622,6 +621,9 @@ func processAppTerminate(appInstanceId string, mep string) {
				deleteAppInstance(appInstanceId)
			}
		}()
		sendAppTermNotification(sub.CallbackReference, notif)
		log.Info("App Termination Notification" + "(" + subIdStr + ") for " + appInstanceId)

	}

	// Delete App instance immediately if no graceful termination subscription
+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ To see how to make this your own, look here:
[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)

- API version: 2.1.1
- Build date: 2021-07-30T10:28:27.117574-04:00[America/Toronto]
- Build date: 2021-07-30T12:04:39.486-04:00[America/New_York]


### Running the server
+1 −2
Original line number Diff line number Diff line
@@ -174,4 +174,3 @@ func ZonesGET(w http.ResponseWriter, r *http.Request) {
func ZonesGetById(w http.ResponseWriter, r *http.Request) {
	zonesByIdGet(w, r)
}
+22 −22
Original line number Diff line number Diff line
@@ -432,7 +432,7 @@ func startRegistrationTicker() {

			// Register service instance
			if !registrationSent {
				err := registerService(serviceAppInstanceId, serviceAppName, serviceAppVersion)
				err := registerService(serviceAppInstanceId)
				if err != nil {
					log.Error("Failed to register to appEnablement DB, keep trying. Error: ", err)
					continue
@@ -489,7 +489,7 @@ func getAppInstanceId() (id string, err error) {
}

func deregisterService(appInstanceId string, serviceId string) error {
	_, err := appEnablementSrvMgmtClient.AppServicesApi.AppServicesServiceIdDELETE(context.TODO(), appInstanceId, serviceId)
	_, err := svcMgmtClient.AppServicesApi.AppServicesServiceIdDELETE(context.TODO(), appInstanceId, serviceId)
	if err != nil {
		log.Error("Failed to unregister the service to app enablement registry: ", err)
		return err
@@ -497,7 +497,7 @@ func deregisterService(appInstanceId string, serviceId string) error {
	return nil
}

func registerService(appInstanceId string, appName string, appVersion string) error {
func registerService(appInstanceId string) error {
	var srvInfo smc.ServiceInfoPost
	//serName
	srvInfo.SerName = instanceName
@@ -574,11 +574,11 @@ func sendTerminationConfirmation(appInstanceId string) error {
}

func subscribeAppTermination(appInstanceId string) error {
	var subscription appSupportClient.AppTerminationNotificationSubscription
	var subscription asc.AppTerminationNotificationSubscription
	subscription.SubscriptionType = "AppTerminationNotificationSubscription"
	subscription.AppInstanceId = appInstanceId
	subscription.CallbackReference = hostUrl.String() + basePath + appTerminationPath
	_, _, err := appEnablementAppSupportClient.AppSubscriptionsApi.ApplicationsSubscriptionsPOST(context.TODO(), subscription, appInstanceId)
	_, _, err := appSupportClient.AppSubscriptionsApi.ApplicationsSubscriptionsPOST(context.TODO(), subscription, appInstanceId)
	if err != nil {
		log.Error("Failed to register to App Support subscription: ", err)
		return err
@@ -586,16 +586,17 @@ func subscribeAppTermination(appInstanceId string) error {
	return nil
}

/*
func unsubscribeAppTermination(appInstanceId string) error {
	//only subscribe to one subscription, so we force number to be one, couldn't be anything else
	_, err := appEnablementAppSupportClient.AppSubscriptionsApi.ApplicationsSubscriptionDELETE(context.TODO(), appInstanceId, "1")
	_, err := appSupportClient.AppSubscriptionsApi.ApplicationsSubscriptionDELETE(context.TODO(), appInstanceId, "1")
	if err != nil {
		log.Error("Failed to unregister to App Support subscription: ", err)
		return err
	}
	return nil
}

*/
func deregisterZoneStatus(subsIdStr string) {
	subsId, err := strconv.Atoi(subsIdStr)
	if err != nil {
@@ -3865,32 +3866,24 @@ func mec011AppTerminationPost(w http.ResponseWriter, r *http.Request) {
	stopRegistrationTicker()

	//delete any registration it made
	_ = unsubscribeAppTermination(serviceAppInstanceId)
	// cannot unsubscribe otherwise, the app-enablement server fails when receiving the confirm_terminate since it believes it never registered
	//_ = unsubscribeAppTermination(serviceAppInstanceId)
	_ = deregisterService(serviceAppInstanceId, appEnablementServiceId)

	if sendAppTerminationWhenDone {
		err = sendTerminationConfirmation(serviceAppInstanceId)
		if err != nil {
			http.Error(w, err.Error(), http.StatusInternalServerError)

			return
		}
	}

	//send scenario update with a deletion
	var event scc.Event
	var eventScenarioUpdate scc.EventScenarioUpdate
	var physicalLocation scc.PhysicalLocation
	var process scc.Process
	var nodeDataUnion scc.NodeDataUnion
	var node scc.ScenarioNode

	physicalLocation.Name = "elementName"
	physicalLocation.Type_ = "EDGE-APP"
	process.Name = instanceName
	process.Type_ = "EDGE-APP"

	nodeDataUnion.PhysicalLocation = &physicalLocation
	nodeDataUnion.Process = &process

	node.Type_ = "EDGE-APP"
	node.Parent = "parentName"
	node.Parent = mepName
	node.NodeDataUnion = &nodeDataUnion

	eventScenarioUpdate.Node = &node
@@ -3906,5 +3899,12 @@ func mec011AppTerminationPost(w http.ResponseWriter, r *http.Request) {
		}
	}()

	if sendAppTerminationWhenDone {
		go func() {
			//ignore any error and delete yourself anyway
			_ = sendTerminationConfirmation(serviceAppInstanceId)
		}()
	}

	w.WriteHeader(http.StatusNoContent)
}
+5 −5

File changed.

Contains only whitespace changes.

+1 −1

File changed.

Contains only whitespace changes.

Loading