Skip to content
Snippets Groups Projects

Remove app instances on base removal

1 file
+ 20
14
Compare changes
  • Side-by-side
  • Inline
@@ -10,12 +10,7 @@ import net.geant.nmaas.notifications.MailAttributes;
import net.geant.nmaas.notifications.NotificationEvent;
import net.geant.nmaas.notifications.templates.MailType;
import net.geant.nmaas.orchestration.AppLifecycleManager;
import net.geant.nmaas.portal.api.domain.AppRateView;
import net.geant.nmaas.portal.api.domain.ApplicationBaseView;
import net.geant.nmaas.portal.api.domain.ApplicationStateChangeRequest;
import net.geant.nmaas.portal.api.domain.ApplicationView;
import net.geant.nmaas.portal.api.domain.Id;
import net.geant.nmaas.portal.api.domain.UserView;
import net.geant.nmaas.portal.api.domain.*;
import net.geant.nmaas.portal.api.exception.MarketException;
import net.geant.nmaas.portal.api.exception.MissingElementException;
import net.geant.nmaas.portal.api.exception.ProcessingException;
@@ -73,6 +68,8 @@ public class ApplicationController extends AppBaseController {
private final AppLifecycleManager appLifecycleManager;
private final AppInstanceController appInstanceController;
/*
* Application Base Part
*/
@@ -151,14 +148,8 @@ public class ApplicationController extends AppBaseController {
ApplicationState state = ApplicationState.DELETED;
for (ApplicationVersion appVersion : base.getVersions()) {
Application app = getApp(appVersion.getAppVersionId());
applicationService.changeApplicationState(app, state);
List<AppInstance> instanceList = applicationInstanceService.findAllByApplication(app);
instanceList.forEach(instance -> {
appLifecycleManager.removeApplication(instance.getInternalId());
});
appVersion.setState(state);
if(app.getState() != ApplicationState.DELETED) throw new ProcessingException("Can not delete base, version " + app.getVersion() +" is not deleted");
}
appBaseService.deleteAppBase(base);
}
@@ -323,8 +314,23 @@ public class ApplicationController extends AppBaseController {
@PatchMapping(value = "/state/{id}")
@PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN')")
@Transactional
public void changeApplicationState(@PathVariable long id, @RequestBody ApplicationStateChangeRequest stateChangeRequest) {
public void changeApplicationState(@PathVariable long id, @RequestBody ApplicationStateChangeRequest stateChangeRequest, Principal principal) {
Application app = getApp(id);
if(stateChangeRequest.getState().equals(ApplicationState.DELETED)) {
applicationInstanceService.findAllByApplication(app).forEach(ai -> {
AppInstanceStatus instanceState = appInstanceController.getState(ai.getId(), principal);
int numberOfRunningInstances = 0;
if(!(instanceState.getState().equals(AppInstanceState.DONE)
|| instanceState.getState().equals(AppInstanceState.FAILURE)
|| instanceState.getState().equals(AppInstanceState.REMOVED) )) {
numberOfRunningInstances = +1;
}
if(numberOfRunningInstances > 0) {
throw new ProcessingException("Can not delete app version. You still have " + numberOfRunningInstances + " running instances of this version.");
}
}
);
}
applicationService.changeApplicationState(app, stateChangeRequest.getState());
appBaseService.updateApplicationVersionState(app.getName(), app.getVersion(), stateChangeRequest.getState());
this.sendMails(app, stateChangeRequest);
Loading