bonampak commented on code in PR #1059: URL: https://github.com/apache/knox/pull/1059#discussion_r2216021550
########## gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/ClouderaManagerServiceDiscovery.java: ########## @@ -255,81 +257,115 @@ private boolean shouldRetryServiceDiscovery(ApiException e) { return false; } - private ClouderaManagerCluster discoverCluster(DiscoveryApiClient client, String clusterName, Collection<String> includedServices) + private ClouderaManagerCluster discoverCluster(GatewayConfig gatewayConfig, DiscoveryApiClient client, + String clusterName, Collection<String> includedServices) throws ApiException { ServicesResourceApi servicesResourceApi = new ServicesResourceApi(client); RolesResourceApi rolesResourceApi = new RolesResourceApi(client); + ServiceRoleCollector roleCollector = + ServiceRoleCollectorBuilder.newBuilder() + .gatewayConfig(gatewayConfig) + .rolesResourceApi(rolesResourceApi) + .build(); log.discoveringCluster(clusterName); + List<ApiService> serviceList = getServiceList(client.getConfig(), servicesResourceApi); + if (serviceList == null) { + return null; + } + + // if Legacy Cloudera Manager API Clients Compatibility is turned off, some HDFS settings are in CORE_SETTINGS + ApiServiceConfig coreSettingsConfig = coreSettingsConfig(client, servicesResourceApi, serviceList); + Set<ServiceModel> serviceModels = new HashSet<>(); + for (ApiService service : serviceList) { + serviceModels.addAll( + discoverService(client, clusterName, includedServices, service, servicesResourceApi, roleCollector, coreSettingsConfig)); + } - List<ApiService> serviceList = getClusterServices(client.getConfig(), servicesResourceApi); + ClouderaManagerCluster cluster = new ClouderaManagerCluster(clusterName); + cluster.addServiceModels(serviceModels); + log.discoveredCluster(clusterName); + return cluster; + } - if (serviceList != null) { - /* - Since Cloudera Manager does not have a service for itself, we will add a skeleton CM - service so that we can add CM service to topology when auto-discovery is - turned on and CM service is selected in the descriptor - */ - final ApiService cmService = new ApiService(); - cmService.setName(CM_SERVICE_TYPE.toLowerCase(Locale.ROOT)); - cmService.setType(CM_SERVICE_TYPE); - serviceList.add(cmService); - - // if Legacy Cloudera Manager API Clients Compatibility is turned off, some HDFS settings are in CORE_SETTINGS - ApiServiceConfig coreSettingsConfig = coreSettingsConfig(client, servicesResourceApi, serviceList); - - for (ApiService service : serviceList) { - final List<ServiceModelGenerator> modelGenerators = serviceModelGeneratorsHolder.getServiceModelGenerators(service.getType()); - if (shouldSkipServiceDiscovery(modelGenerators, includedServices)) { - //log.skipServiceDiscovery(service.getName(), service.getType()); - //continue; - } - log.discoveringService(service.getName(), service.getType()); - ApiServiceConfig serviceConfig = null; - /* no reason to check service config for CM or CORE_SETTINGS services */ - if (!CM_SERVICE_TYPE.equals(service.getType()) && !CORE_SETTINGS_TYPE.equals(service.getType())) { - serviceConfig = getServiceConfig(client.getConfig(), servicesResourceApi, service); - } - ApiRoleList roleList = getRoles(client.getConfig(), rolesResourceApi, clusterName, service); - if (roleList != null && roleList.getItems() != null) { - for (ApiRole role : roleList.getItems()) { - String roleName = role.getName(); - log.discoveringServiceRole(roleName, role.getType()); - - ApiConfigList roleConfig = null; - /* no reason to check role config for CM or CORE_SETTINGS services */ - if (!CM_SERVICE_TYPE.equals(service.getType()) && !CORE_SETTINGS_TYPE.equals(service.getType())) { - roleConfig = getRoleConfig(client.getConfig(), rolesResourceApi, service, role); - } - - if (modelGenerators != null) { - for (ServiceModelGenerator serviceModelGenerator : modelGenerators) { - ServiceModelGeneratorHandleResponse response = serviceModelGenerator.handles(service, serviceConfig, role, roleConfig); - if (response.handled()) { - serviceModelGenerator.setApiClient(client); - ServiceModel serviceModel = serviceModelGenerator.generateService(service, serviceConfig, role, roleConfig, coreSettingsConfig); - serviceModels.add(serviceModel); - } else if (!response.getConfigurationIssues().isEmpty()) { - log.serviceRoleHasConfigurationIssues(roleName, String.join(";", response.getConfigurationIssues())); - } - } - } - - log.discoveredServiceRole(roleName, role.getType()); - } - } + @SuppressWarnings("PMD.UnusedFormalParameter") + private Set<ServiceModel> discoverService(DiscoveryApiClient client, String clusterName, Collection<String> includedServices, + ApiService service, ServicesResourceApi servicesResourceApi, + ServiceRoleCollector roleCollector, ApiServiceConfig coreSettingsConfig) throws ApiException { + Set<ServiceModel> serviceModels = new HashSet<>(); + final List<ServiceModelGenerator> modelGenerators = serviceModelGeneratorsHolder.getServiceModelGenerators(service.getType()); + //if (shouldSkipServiceDiscovery(modelGenerators, includedServices)) { + //log.skipServiceDiscovery(service.getName(), service.getType()); + //continue; + //} + log.discoveringService(service.getName(), service.getType()); + ApiServiceConfig serviceConfig = null; + /* no reason to check service config for CM or CORE_SETTINGS services */ + if (!CM_SERVICE_TYPE.equals(service.getType()) && !CORE_SETTINGS_TYPE.equals(service.getType())) { + serviceConfig = getServiceConfig(client.getConfig(), servicesResourceApi, service); + } + ApiRoleConfigList roleConfigList = getAllServiceRoleConfigurations(client.getConfig(), roleCollector, clusterName, service); + if (roleConfigList != null && roleConfigList.getItems() != null) { + for (ApiRoleConfig roleConfig : roleConfigList.getItems()) { + ApiRole role = new ApiRole() + .name(roleConfig.getName()) + .type(roleConfig.getRoleType()) + .hostRef(roleConfig.getHostRef()); Review Comment: done -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@knox.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org