Skip to content

Commit d2f39d2

Browse files
committed
Better status tracking during tenant delete
1 parent 8b2da3b commit d2f39d2

File tree

1 file changed

+68
-2
lines changed

1 file changed

+68
-2
lines changed

services/onboarding-service/src/main/java/com/amazon/aws/partners/saasfactory/saasboost/OnboardingService.java

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -646,8 +646,16 @@ protected void handleOnboardingStackStatusChanged(Map<String, Object> event, Con
646646
stack.setStatus(stackStatus);
647647
}
648648
if (status != onboarding.getStatus()) {
649-
onboarding.setStatus(status);
650-
LOGGER.info("Onboarding status changing from {} to {}", onboarding.getStatus(), status);
649+
if (OnboardingStatus.deleted == status && !stack.isBaseStack()) {
650+
// If we're receiving a DELETE_COMPLETE status for one of the app stacks,
651+
// the onboarding record is still in a deleting state because we have to
652+
// delete the base stack after all the app stacks are complete
653+
LOGGER.info("Skipping onboarding status deleted for app stack {}", stack.getName());
654+
onboarding.setStatus(OnboardingStatus.deleting);
655+
} else {
656+
onboarding.setStatus(status);
657+
LOGGER.info("Onboarding status changing from {} to {}", onboarding.getStatus(), status);
658+
}
651659
}
652660
dal.updateOnboarding(onboarding);
653661
if (stack.isComplete()) {
@@ -672,6 +680,17 @@ protected void handleOnboardingStackStatusChanged(Map<String, Object> event, Con
672680
} else if (!stack.isBaseStack() && stack.isDeleted() && onboarding.appStacksDeleted()) {
673681
LOGGER.info("All app stacks deleted");
674682
handleBaseProvisioningReadyToDelete(event, context);
683+
} else if (stack.isBaseStack() && stack.isDeleted()) {
684+
onboarding.setStatus(OnboardingStatus.deleted);
685+
dal.updateOnboarding(onboarding);
686+
// Let the tenant service know the onboarding status
687+
Utils.publishEvent(eventBridge, SAAS_BOOST_EVENT_BUS, EVENT_SOURCE,
688+
"Tenant Onboarding Status Changed",
689+
Map.of(
690+
"tenantId", tenantId,
691+
"onboardingStatus", onboarding.getStatus()
692+
)
693+
);
675694
}
676695
break;
677696
}
@@ -1770,6 +1789,7 @@ protected void handleTenantDeleted(Map<String, Object> event, Context context) {
17701789
try {
17711790
LOGGER.info("Deleting stack {}", stack.getName());
17721791
cfn.deleteStack(request -> request.stackName(stack.getArn()));
1792+
stack.setStatus("DELETE_IN_PROGRESS");
17731793
} catch (SdkServiceException cfnError) {
17741794
if (cfnError.getMessage().contains("does not exist")) {
17751795
LOGGER.warn("Stack {} does not exist!", stack.getArn());
@@ -1786,6 +1806,18 @@ protected void handleTenantDeleted(Map<String, Object> event, Context context) {
17861806
}
17871807
}
17881808
}
1809+
onboarding.setStatus(OnboardingStatus.deleting);
1810+
dal.updateOnboarding(onboarding);
1811+
1812+
// Let the tenant service know the onboarding status
1813+
Utils.publishEvent(eventBridge, SAAS_BOOST_EVENT_BUS, EVENT_SOURCE,
1814+
"Tenant Onboarding Status Changed",
1815+
Map.of(
1816+
"tenantId", tenantId,
1817+
"onboardingStatus", onboarding.getStatus()
1818+
)
1819+
);
1820+
17891821
// Just in case we're called with no app stacks
17901822
if (onboarding.appStacksDeleted()) {
17911823
handleBaseProvisioningReadyToDelete(event, context);
@@ -1812,6 +1844,7 @@ private void enableDisableTenant(Map<String, Object> event, Context context, boo
18121844
String tenantId = (String) detail.get("tenantId");
18131845
Onboarding onboarding = dal.getOnboardingByTenantId(tenantId);
18141846
if (onboarding != null) {
1847+
boolean update = false;
18151848
for (OnboardingStack stack : onboarding.getStacks()) {
18161849
if (!stack.isBaseStack()) {
18171850
LOGGER.info("Calling cloudFormation update-stack --stack-name {}", stack.getName());
@@ -1851,6 +1884,8 @@ private void enableDisableTenant(Map<String, Object> event, Context context, boo
18511884
if (!stack.getArn().equals(stackId)) {
18521885
LOGGER.info("Updating stack id does not equal existing stack arn");
18531886
}
1887+
update = true;
1888+
stack.setStatus("UPDATE_IN_PROGRESS");
18541889
} catch (SdkServiceException cfnError) {
18551890
// CloudFormation throws a 400 error if it doesn't detect any resources in a stack
18561891
// need to be updated. Swallow this error.
@@ -1864,6 +1899,20 @@ private void enableDisableTenant(Map<String, Object> event, Context context, boo
18641899
}
18651900
}
18661901
}
1902+
1903+
if (update) {
1904+
onboarding.setStatus(OnboardingStatus.updating);
1905+
dal.updateOnboarding(onboarding);
1906+
1907+
// Let the tenant service know the onboarding status
1908+
Utils.publishEvent(eventBridge, SAAS_BOOST_EVENT_BUS, EVENT_SOURCE,
1909+
"Tenant Onboarding Status Changed",
1910+
Map.of(
1911+
"tenantId", tenantId,
1912+
"onboardingStatus", onboarding.getStatus()
1913+
)
1914+
);
1915+
}
18671916
} else {
18681917
// Can't find an onboarding record for this id
18691918
LOGGER.error("Can't find onboarding record for tenant {}", detail.get("tenantId"));
@@ -1876,13 +1925,16 @@ protected void handleBaseProvisioningReadyToDelete(Map<String, Object> event, Co
18761925
String tenantId = (String) detail.get("tenantId");
18771926
Onboarding onboarding = dal.getOnboardingByTenantId(tenantId);
18781927
if (onboarding != null) {
1928+
boolean update = false;
18791929
if (onboarding.appStacksDeleted()) {
18801930
for (OnboardingStack stack : onboarding.getStacks()) {
18811931
if (stack.isBaseStack() && !Arrays.asList("DELETE_COMPLETE", "DELETE_IN_PROGRESS")
18821932
.contains(stack.getStatus())) {
18831933
try {
18841934
LOGGER.info("Deleting base stacks for tenant {}", tenantId);
18851935
cfn.deleteStack(request -> request.stackName(stack.getArn()));
1936+
update = true;
1937+
stack.setStatus("DELETE_IN_PROGRESS");
18861938
} catch (SdkServiceException cfnError) {
18871939
if (cfnError.getMessage().contains("does not exist")) {
18881940
LOGGER.warn("Stack {} does not exist!", stack.getArn());
@@ -1899,6 +1951,20 @@ protected void handleBaseProvisioningReadyToDelete(Map<String, Object> event, Co
18991951
}
19001952
}
19011953
}
1954+
1955+
if (update) {
1956+
onboarding.setStatus(OnboardingStatus.deleting);
1957+
dal.updateOnboarding(onboarding);
1958+
1959+
// Let the tenant service know the onboarding status
1960+
Utils.publishEvent(eventBridge, SAAS_BOOST_EVENT_BUS, EVENT_SOURCE,
1961+
"Tenant Onboarding Status Changed",
1962+
Map.of(
1963+
"tenantId", tenantId,
1964+
"onboardingStatus", onboarding.getStatus()
1965+
)
1966+
);
1967+
}
19021968
} else {
19031969
LOGGER.error("App stacks still exist. Can't delete base stacks.");
19041970
}

0 commit comments

Comments
 (0)