[
https://issues.apache.org/jira/browse/KNOX-3084?focusedWorklogId=975120&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-975120
]
ASF GitHub Bot logged work on KNOX-3084:
----------------------------------------
Author: ASF GitHub Bot
Created on: 18/Jul/25 13:15
Start Date: 18/Jul/25 13:15
Worklog Time Spent: 10m
Work Description: 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
Issue Time Tracking
-------------------
Worklog Id: (was: 975120)
Time Spent: 40m (was: 0.5h)
> Update CM service discovery with the enhanced role configs endpoint
> -------------------------------------------------------------------
>
> Key: KNOX-3084
> URL: https://issues.apache.org/jira/browse/KNOX-3084
> Project: Apache Knox
> Issue Type: Task
> Components: cm-discovery
> Affects Versions: 2.1.0
> Reporter: Tamás Marcinkovics
> Assignee: Tamás Marcinkovics
> Priority: Major
> Time Spent: 40m
> Remaining Estimate: 0h
>
> There is a new CM API endpoint to fetch all role configurations for a given
> service ({{RolesResouce.readRolesConfig}}) if the supported API version is
> greater than or equal to v57. This endpoint is available in the
> cloudera-manager-api-swagger:7.13.1 artifact.
> [https://repository.cloudera.com/service/rest/repository/browse/cloudera-repos/com/cloudera/api/swagger/cloudera-manager-api-swagger/7.13.1/]
> On the Knox side, we need to change the existing {{readRoles}} and
> {{readRoleConfig}} API calls to the new {{readRolesConfig}} call.
> The {{view}} parameter should still remain {{full}} as
> {{full_with_no_health_check}} only returns role configuration parameters with
> non-default values.
> As the new cloudera-manager-api-swagger artifact is using okhttp 4.10, we
> also need to change {{DiscoveryApiClient}} setup and our Okhttp interceptors
> from Okhttp 2.7.5 to Okhttp 4.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)