public static List getCustomComponentNamesToDelete()

in aws-applicationinsights-application/src/main/java/software/amazon/applicationinsights/application/HandlerHelper.java [487:527]


    public static List<String> getCustomComponentNamesToDelete(
            ResourceModel model,
            AmazonWebServicesClientProxy proxy,
            ApplicationInsightsClient applicationInsightsClient,
            Logger logger) {
        List<String> appComponentNames = getAppCustomComponentNames(model.getResourceGroupName(), proxy, applicationInsightsClient);
        logger.log("app component names: " + appComponentNames.toString());

        Map<String, CustomComponent> modelComponentMap =
                Optional.ofNullable(model.getCustomComponents()).orElse(Collections.emptyList())
                        .stream()
                        .collect(Collectors.toMap(CustomComponent::getComponentName, Function.identity()));
        List<String> modelComponentNames = new ArrayList<>(modelComponentMap.keySet());
        logger.log("model component names: " + modelComponentNames.toString());

        List<String> componentNamesToDelete = new ArrayList<>(appComponentNames);
        componentNamesToDelete.removeAll(modelComponentNames);

        List<String> commonComponentNames = new ArrayList<>(appComponentNames);
        commonComponentNames.retainAll(modelComponentNames);
        logger.log("common component names: " + commonComponentNames.toString());

        for (String commonComponentName : commonComponentNames) {
            DescribeComponentResponse describeComponentResponse =
                    describeAppicationComponent(commonComponentName, model.getResourceGroupName(), proxy, applicationInsightsClient);
            List<String> resourceList = describeComponentResponse.resourceList();
            List<String> modelResourceList = modelComponentMap.get(commonComponentName).getResourceList();
            logger.log("common component name: " + commonComponentName);
            logger.log("app resource list: " + resourceList.toString());
            logger.log("model resource list: " + modelResourceList.toString());

            // if custom comopnent resource lists mistach, it needs to be deleted & recreated to avoid deadlock
            // e.g. before change: component A contains instance 1, component B contains instance 2;
            // after change: component A contains instance 2, component B contains instance 1
            if (resourceList.size() != modelResourceList.size() || !resourceList.containsAll(modelResourceList)) {
                componentNamesToDelete.add(commonComponentName);
            }
        }

        return componentNamesToDelete;
    }