From fc5360642472d0b0b4641c8ee1acd4fdfff9be87 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 11 Mar 2021 23:43:59 +0100 Subject: [PATCH] bug4811: preparing for "remove application replica set" use case --- .../ui/client/LandscapeManagementPanel.java | 31 +++++++++++++++++-- .../LandscapeManagementWriteService.java | 2 ++ .../LandscapeManagementWriteServiceAsync.java | 3 ++ .../LandscapeManagementWriteServiceImpl.java | 19 ++++++++++++ .../CopyAndCompareMongoDatabase.java | 1 + 5 files changed, 54 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementPanel.java b/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementPanel.java index eb852b1c636..24e9586fe02 100755 --- a/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementPanel.java +++ b/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementPanel.java @@ -39,6 +39,7 @@ import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.Notification; import com.sap.sse.gwt.client.Notification.NotificationType; import com.sap.sse.gwt.client.celltable.ActionsColumn; +import com.sap.sse.gwt.client.celltable.EntityIdentityComparator; import com.sap.sse.gwt.client.celltable.TableWrapperWithSingleSelectionAndFilter; import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator; import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator; @@ -173,7 +174,20 @@ public class LandscapeManagementPanel extends SimplePanel { // application replica sets: applicationReplicaSetsTable = new TableWrapperWithSingleSelectionAndFilter, StringMessages, AdminConsoleTableResources>( stringMessages, errorReporter, /* enablePager */ false, - /* entity identity comparator */ Optional.empty(), GWT.create(AdminConsoleTableResources.class), + /* entity identity comparator */ Optional.of(new EntityIdentityComparator>() { + @Override + public boolean representSameEntity(SailingApplicationReplicaSetDTO dto1, + SailingApplicationReplicaSetDTO dto2) { + // TODO Auto-generated method stub + return false; + } + + @Override + public int hashCode(SailingApplicationReplicaSetDTO t) { + // TODO Auto-generated method stub + return 0; + } + }), GWT.create(AdminConsoleTableResources.class), /* checkbox filter function */ Optional.empty(), /* filter label */ Optional.empty(), /* filter checkbox label */ null) { @Override @@ -350,7 +364,20 @@ public class LandscapeManagementPanel extends SimplePanel { private void removeApplicationReplicaSet(StringMessages stringMessages, String regionId, SailingApplicationReplicaSetDTO applicationReplicaSetToRemove) { if (Window.confirm(stringMessages.reallyRemoveApplicationReplicaSet(applicationReplicaSetToRemove.getName()))) { - // TODO implement LandscapeManagementPanel.removeApplicationReplicaSet + applicationReplicaSetsBusy.setBusy(true); + landscapeManagementService.removeApplicationReplicaSet(applicationReplicaSetToRemove, new AsyncCallback() { + @Override + public void onFailure(Throwable caught) { + applicationReplicaSetsBusy.setBusy(false); + errorReporter.reportError(caught.getMessage()); + } + + @Override + public void onSuccess(Void result) { + applicationReplicaSetsBusy.setBusy(false); + applicationReplicaSetsTable.getFilterPanel().remove(applicationReplicaSetToRemove); + } + }); } } diff --git a/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementWriteService.java b/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementWriteService.java index 82138479a47..cc02c491e35 100755 --- a/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementWriteService.java +++ b/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementWriteService.java @@ -71,4 +71,6 @@ public interface LandscapeManagementWriteService extends RemoteService { String securityReplicationBearerToken, String optionalDomainName) throws Exception; void defineDefaultRedirect(String regionId, String hostname, RedirectDTO redirect, String keyName, String passphraseForPrivateKeyDecryption); + + void removeApplicationReplicaSet(SailingApplicationReplicaSetDTO applicationReplicaSetToRemove); } diff --git a/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementWriteServiceAsync.java b/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementWriteServiceAsync.java index d86cb75d8d3..7763fdb12f4 100755 --- a/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementWriteServiceAsync.java +++ b/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/client/LandscapeManagementWriteServiceAsync.java @@ -94,4 +94,7 @@ public interface LandscapeManagementWriteServiceAsync { void defineDefaultRedirect(String regionId, String hostname, RedirectDTO redirect, String keyName, String passphraseForPrivateKeyDecryption, AsyncCallback asyncCallback); + + void removeApplicationReplicaSet(SailingApplicationReplicaSetDTO applicationReplicaSetToRemove, + AsyncCallback asyncCallback); } diff --git a/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/server/LandscapeManagementWriteServiceImpl.java b/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/server/LandscapeManagementWriteServiceImpl.java index 584273ace0d..d7536a64ca7 100755 --- a/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/server/LandscapeManagementWriteServiceImpl.java +++ b/java/com.sap.sailing.landscape.ui/src/com/sap/sailing/landscape/ui/server/LandscapeManagementWriteServiceImpl.java @@ -620,4 +620,23 @@ public class LandscapeManagementWriteServiceImpl extends ResultCachingProxiedRem SailingApplicationReplicaSetDTO sailingApplicationReplicationSetDTO) { return null; } + + @Override + public void removeApplicationReplicaSet(SailingApplicationReplicaSetDTO applicationReplicaSetToRemove) { + /* + * TODO implement removeApplicationReplicaSet; will probably need to enumerate things again, starting from the + * master and replica processes and their hosts where the DTO tells us the respective regions; we also know the + * hostname. So we can look for the load balancer rules having this hostname in their hostname header, and for + * any S3 records, and hopefully re-use some of the logic used in getApplicationReplicaSets. At least do the + * following: + * + * - remove the auto scaling group + * - remove the launch configuration used by the auto scaling group + * - terminate the instances + * - remove the load balancer rules + * - remove the target groups + * - remove the load balancer if it is a DNS-mapped one and there are no rules left other than the default rule + * - remove the DNS record if this replica set was a DNS-mapped one + */ + } } diff --git a/java/com.sap.sse.landscape.aws/src/com/sap/sse/landscape/aws/orchestration/CopyAndCompareMongoDatabase.java b/java/com.sap.sse.landscape.aws/src/com/sap/sse/landscape/aws/orchestration/CopyAndCompareMongoDatabase.java index a67b4f20b3e..443d299aba6 100755 --- a/java/com.sap.sse.landscape.aws/src/com/sap/sse/landscape/aws/orchestration/CopyAndCompareMongoDatabase.java +++ b/java/com.sap.sse.landscape.aws/src/com/sap/sse/landscape/aws/orchestration/CopyAndCompareMongoDatabase.java @@ -101,6 +101,7 @@ extends AbstractAwsProcedureImpl { final ScheduledExecutorService executor = ThreadPoolUtil.INSTANCE.createBackgroundTaskThreadPoolExecutor(2, "MongoDB MD5 Hasher "+UUID.randomUUID()); final Future sourceMd5 = executor.submit(()->sourceDatabase.getMD5Hash()); final Future targetMd5 = executor.submit(()->targetDatabase.getMD5Hash()); + executor.shutdown(); if (sourceMd5.get().equals(targetMd5.get())) { logger.info("Databases "+sourceDatabase+" and "+targetDatabase+" have equal MD5 hash "+sourceMd5.get()+". Removing "+sourceDatabase+" and "+Util.joinStrings(", ", additionalDatabasesToDelete)); sourceDatabase.drop();