AMBARI-22309 Update db schema to use service_id instead of service_name (configs part) (dsen)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/527c4a2d Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/527c4a2d Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/527c4a2d Branch: refs/heads/branch-feature-AMBARI-14714 Commit: 527c4a2d74e7f03b44d9412bd418c73a6f155032 Parents: 72bac1f Author: Dmytro Sen <[email protected]> Authored: Fri Nov 3 14:35:10 2017 +0200 Committer: Dmytro Sen <[email protected]> Committed: Fri Nov 3 14:35:10 2017 +0200 ---------------------------------------------------------------------- .../checks/ServiceCheckValidityCheck.java | 2 +- .../AmbariManagementControllerImpl.java | 16 +- .../server/controller/ConfigGroupRequest.java | 12 +- .../controller/ServiceConfigVersionRequest.java | 14 +- .../ServiceConfigVersionResponse.java | 24 ++ .../internal/ClusterResourceProvider.java | 6 + .../internal/ConfigGroupResourceProvider.java | 48 ++-- .../ServiceConfigVersionResourceProvider.java | 7 +- .../server/orm/cache/HostConfigMapping.java | 7 +- .../server/orm/cache/HostConfigMappingImpl.java | 30 ++- .../server/orm/dao/HostConfigMappingDAO.java | 8 +- .../ambari/server/orm/dao/ServiceConfigDAO.java | 46 ++-- .../orm/entities/ClusterServiceEntity.java | 6 + .../server/orm/entities/ConfigGroupEntity.java | 41 ++- .../orm/entities/HostConfigMappingEntity.java | 59 +++- .../orm/entities/ServiceConfigEntity.java | 66 ++++- .../serveraction/upgrades/ConfigureAction.java | 2 +- .../upgrades/FinalizeUpgradeAction.java | 4 +- .../upgrades/PreconfigureKerberosAction.java | 2 +- .../org/apache/ambari/server/state/Cluster.java | 35 +-- .../ambari/server/state/ConfigHelper.java | 4 +- .../ambari/server/state/DesiredConfig.java | 51 +++- .../apache/ambari/server/state/ServiceImpl.java | 13 +- .../ambari/server/state/UpgradeHelper.java | 7 +- .../server/state/cluster/ClusterImpl.java | 268 +++++++++++-------- .../server/state/configgroup/ConfigGroup.java | 11 +- .../state/configgroup/ConfigGroupFactory.java | 3 +- .../state/configgroup/ConfigGroupImpl.java | 67 +++-- .../ambari/server/state/host/HostImpl.java | 3 +- .../ambari/server/topology/AmbariContext.java | 2 +- .../apache/ambari/server/topology/Service.java | 7 + .../server/upgrade/AbstractUpgradeCatalog.java | 2 +- .../main/resources/Ambari-DDL-Derby-CREATE.sql | 66 ++--- .../main/resources/Ambari-DDL-MySQL-CREATE.sql | 66 ++--- .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 67 ++--- .../resources/Ambari-DDL-Postgres-CREATE.sql | 66 ++--- .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 66 ++--- .../resources/Ambari-DDL-SQLServer-CREATE.sql | 66 ++--- .../checks/ServiceCheckValidityCheckTest.java | 27 +- 39 files changed, 829 insertions(+), 468 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java index a4c2430..2582c71 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java @@ -106,7 +106,7 @@ public class ServiceCheckValidityCheck extends AbstractCheckDescriptor { LOG.info(String.format("%s in %s version %s does not have customizable configurations. Skip checking service configuration history.", service.getName(), stackId.getStackName(), stackId.getStackVersion())); } else { LOG.info(String.format("%s in %s version %s has customizable configurations. Check service configuration history.", service.getName(), stackId.getStackName(), stackId.getStackVersion())); - ServiceConfigEntity lastServiceConfig = serviceConfigDAO.getLastServiceConfig(clusterId, service.getName()); + ServiceConfigEntity lastServiceConfig = serviceConfigDAO.getLastServiceConfig(clusterId, service.getServiceId()); lastServiceConfigUpdates.put(service.getName(), lastServiceConfig.getCreateTimestamp()); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 370f735..7f5c051 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java @@ -883,7 +883,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle // If the config type is for a service, then allow a user with SERVICE_MODIFY_CONFIGS to // update, else ensure the user has CLUSTER_MODIFY_CONFIGS - String service = null; + Long service = null; try { service = cluster.getServiceForConfigTypes(Collections.singleton(configType)); @@ -897,7 +897,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle // recovery mode setting. Map<String, String[]> propertyChanges = getPropertyChanges(cluster, request); - if(StringUtils.isEmpty(service)) { + if(service == null) { // If the configuration is not attached to a specific service, it is a cluster-wide configuration // type. For example, cluster-env. @@ -1961,6 +1961,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle } ServiceConfigVersionRequest serviceConfigVersionRequest = request.getServiceConfigVersionRequest(); + //TODO add serviceGroupName validation when the UI is updated to use them if (StringUtils.isEmpty(serviceConfigVersionRequest.getServiceName()) || null == serviceConfigVersionRequest.getVersion()) { String msg = "Service name and version should be specified in service config version"; @@ -1968,7 +1969,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle throw new IllegalArgumentException(msg); } - serviceConfigVersionResponse = cluster.setServiceConfigVersion(serviceConfigVersionRequest.getServiceName(), + serviceConfigVersionResponse = cluster.setServiceConfigVersion( + cluster.getService(serviceConfigVersionRequest.getServiceGroupName(), serviceConfigVersionRequest.getServiceName()).getServiceId(), serviceConfigVersionRequest.getVersion(), getAuthName(), serviceConfigVersionRequest.getNote()); } @@ -3985,7 +3987,13 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle List<ServiceConfigVersionResponse> serviceConfigVersionResponses = new ArrayList<>(); if (Boolean.TRUE.equals(request.getIsCurrent()) && serviceName != null) { - serviceConfigVersionResponses.addAll(cluster.getActiveServiceConfigVersionResponse(serviceName)); + //TODO add serviceGroupName validation when the UI is updated to use them + try { + Long serviceId = cluster.getService(request.getServiceGroupName(), request.getServiceName()).getServiceId(); + serviceConfigVersionResponses.addAll(cluster.getActiveServiceConfigVersionResponse(serviceId)); + } catch (ServiceNotFoundException e) { + LOG.warn("Service {} not found on cluster {}", serviceName, cluster.getClusterName()); + } } else { serviceConfigVersionResponses.addAll(cluster.getServiceConfigVersions()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/controller/ConfigGroupRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ConfigGroupRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ConfigGroupRequest.java index babdf10..fb8d2c9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ConfigGroupRequest.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ConfigGroupRequest.java @@ -28,18 +28,20 @@ public class ConfigGroupRequest { private String groupName; private String tag; private String serviceName; + private String serviceGroupName; private String description; private String serviceConfigVersionNote; private Set<String> hosts; private Map<String, Config> configs; public ConfigGroupRequest(Long id, String clusterName, String groupName, - String tag, String serviceName, String description, + String tag, String serviceGroupName, String serviceName, String description, Set<String> hosts, Map<String, Config> configs) { this.id = id; this.clusterName = clusterName; this.groupName = groupName; this.tag = tag; + this.serviceGroupName = serviceGroupName; this.serviceName = serviceName; this.description = description; this.hosts = hosts; @@ -117,4 +119,12 @@ public class ConfigGroupRequest { public void setServiceConfigVersionNote(String serviceConfigVersionNote) { this.serviceConfigVersionNote = serviceConfigVersionNote; } + + public String getServiceGroupName() { + return serviceGroupName; + } + + public void setServiceGroupName(String serviceGroupName) { + this.serviceGroupName = serviceGroupName; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceConfigVersionRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceConfigVersionRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceConfigVersionRequest.java index c47a5e0..29a7a42 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceConfigVersionRequest.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceConfigVersionRequest.java @@ -21,6 +21,7 @@ package org.apache.ambari.server.controller; public class ServiceConfigVersionRequest { private String clusterName; private String serviceName; + private String serviceGroupName; private Long version; private Long createTime; private Long applyTime; @@ -31,8 +32,9 @@ public class ServiceConfigVersionRequest { public ServiceConfigVersionRequest() { } - public ServiceConfigVersionRequest(String clusterName, String serviceName, Long version, Long createTime, Long applyTime, String userName, Boolean isCurrent) { + public ServiceConfigVersionRequest(String clusterName, String serviceGroupName, String serviceName, Long version, Long createTime, Long applyTime, String userName, Boolean isCurrent) { this.clusterName = clusterName; + this.serviceGroupName = serviceGroupName; this.serviceName = serviceName; this.version = version; this.createTime = createTime; @@ -105,10 +107,20 @@ public class ServiceConfigVersionRequest { this.isCurrent = isCurrent; } + public String getServiceGroupName() { + return serviceGroupName; + } + + public void setServiceGroupName(String serviceGroupName) { + this.serviceGroupName = serviceGroupName; + } + + @Override public String toString() { return "ServiceConfigVersionRequest{" + "clusterName='" + clusterName + '\'' + + ", serviceGroupName='" + serviceGroupName + '\'' + ", serviceName='" + serviceName + '\'' + ", version=" + version + ", createTime=" + createTime + http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceConfigVersionResponse.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceConfigVersionResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceConfigVersionResponse.java index 275d703..0d5b99e 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceConfigVersionResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceConfigVersionResponse.java @@ -54,6 +54,15 @@ public class ServiceConfigVersionResponse { @JsonProperty("service_name") private final String serviceName; + @JsonProperty("service_id") + private final Long serviceId; + + @JsonProperty("service_group_name") + private final String serviceGroupName; + + @JsonProperty("service_group_id") + private final Long serviceGroupId; + @JsonProperty("service_config_version") private final Long version; @@ -106,6 +115,9 @@ public class ServiceConfigVersionResponse { clusterName = clusterEntity.getClusterName(); serviceName = serviceConfigEntity.getServiceName(); + serviceId = serviceConfigEntity.getServiceId(); + serviceGroupName = serviceConfigEntity.getServiceGroupName(); + serviceGroupId = serviceConfigEntity.getServiceGroupId(); version = serviceConfigEntity.getVersion(); userName = serviceConfigEntity.getUser(); createTime = serviceConfigEntity.getCreateTimestamp(); @@ -234,5 +246,17 @@ public class ServiceConfigVersionResponse { .append(hosts) .toHashCode(); } + + public String getServiceGroupName() { + return serviceGroupName; + } + + public Long getServiceId() { + return serviceId; + } + + public Long getServiceGroupId() { + return serviceGroupId; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java index ed80291..61e0f99 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java @@ -328,8 +328,14 @@ public class ClusterResourceProvider extends AbstractControllerResourceProvider for (Collection<ServiceConfigVersionResponse> scvCollection : serviceConfigVersions.values()) { for (ServiceConfigVersionResponse serviceConfigVersionResponse : scvCollection) { Resource resource = new ResourceImpl(Resource.Type.ServiceConfigVersion); + resource.setProperty(ServiceConfigVersionResourceProvider.SERVICE_CONFIG_VERSION_SERVICE_GROUP_NAME_PROPERTY_ID, + serviceConfigVersionResponse.getServiceGroupName()); + resource.setProperty(ServiceConfigVersionResourceProvider.SERVICE_CONFIG_VERSION_SERVICE_GROUP_ID_PROPERTY_ID, + serviceConfigVersionResponse.getServiceGroupId()); resource.setProperty(ServiceConfigVersionResourceProvider.SERVICE_CONFIG_VERSION_SERVICE_NAME_PROPERTY_ID, serviceConfigVersionResponse.getServiceName()); + resource.setProperty(ServiceConfigVersionResourceProvider.SERVICE_CONFIG_VERSION_SERVICE_ID_PROPERTY_ID, + serviceConfigVersionResponse.getServiceId()); resource.setProperty(ServiceConfigVersionResourceProvider.SERVICE_CONFIG_VERSION_PROPERTY_ID, serviceConfigVersionResponse.getVersion()); resource.setProperty(ServiceConfigVersionResourceProvider.SERVICE_CONFIG_VERSION_NOTE_PROPERTY_ID, http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java index 737bfa4..332b1d2 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java @@ -60,6 +60,7 @@ import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Config; import org.apache.ambari.server.state.ConfigFactory; import org.apache.ambari.server.state.Host; +import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.configgroup.ConfigGroup; import org.apache.ambari.server.state.configgroup.ConfigGroupFactory; import org.apache.commons.collections.MapUtils; @@ -85,6 +86,8 @@ public class ConfigGroupResourceProvider extends .getPropertyId("ConfigGroup", "group_name"); protected static final String CONFIGGROUP_TAG_PROPERTY_ID = PropertyHelper .getPropertyId("ConfigGroup", "tag"); + protected static final String CONFIGGROUP_SERVICEGROUPNAME_PROPERTY_ID = PropertyHelper + .getPropertyId("ConfigGroup", "service_group_name"); protected static final String CONFIGGROUP_SERVICENAME_PROPERTY_ID = PropertyHelper .getPropertyId("ConfigGroup", "service_name"); protected static final String CONFIGGROUP_DESC_PROPERTY_ID = PropertyHelper @@ -475,7 +478,7 @@ public class ConfigGroupResourceProvider extends throw new ConfigGroupNotFoundException(cluster.getClusterName(), request.getId().toString()); } - if (StringUtils.isEmpty(configGroup.getServiceName())) { + if (configGroup.getServiceId() == null) { if (!AuthorizationHelper.isAuthorized(ResourceType.CLUSTER, cluster.getResourceId(), RoleAuthorization.CLUSTER_MANAGE_CONFIG_GROUPS)) { throw new AuthorizationException("The authenticated user is not authorized to delete config groups"); @@ -564,18 +567,20 @@ public class ConfigGroupResourceProvider extends } verifyHostList(cluster, hosts, request); - - String serviceName = request.getServiceName(); - if (serviceName == null && !MapUtils.isEmpty(request.getConfigs())) { + Service service = cluster.getService(request.getServiceGroupName(), request.getServiceName()); + Long serviceId = service.getServiceId(); + Long serviceGroupId = service.getServiceGroupId(); + if (serviceId == null && !MapUtils.isEmpty(request.getConfigs())) { try { - serviceName = cluster.getServiceForConfigTypes(request.getConfigs().keySet()); + serviceId = cluster.getServiceForConfigTypes(request.getConfigs().keySet()); + serviceGroupId = cluster.getService(serviceId).getServiceGroupId(); } catch (IllegalArgumentException e) { // Ignore this since we may have hit a config type that spans multiple services. This may // happen in unit test cases but should not happen with later versions of stacks. } } - if (StringUtils.isEmpty(serviceName)) { + if (serviceId == null) { if (!AuthorizationHelper.isAuthorized(ResourceType.CLUSTER, cluster.getResourceId(), RoleAuthorization.CLUSTER_MANAGE_CONFIG_GROUPS)) { throw new AuthorizationException("The authenticated user is not authorized to create config groups"); @@ -592,14 +597,14 @@ public class ConfigGroupResourceProvider extends verifyConfigs(request.getConfigs(), cluster.getClusterName()); - ConfigGroup configGroup = configGroupFactory.createNew(cluster, serviceName, + ConfigGroup configGroup = configGroupFactory.createNew(cluster, serviceGroupId, serviceId, request.getGroupName(), request.getTag(), request.getDescription(), request.getConfigs(), hosts); cluster.addConfigGroup(configGroup); - if (serviceName != null) { - cluster.createServiceConfigVersion(serviceName, getManagementController().getAuthName(), + if (serviceGroupId != null && serviceId != null) { + cluster.createServiceConfigVersion(serviceId, getManagementController().getAuthName(), request.getServiceConfigVersionNote(), configGroup); } else { LOG.warn("Could not determine service name for config group {}, service config version not created", @@ -648,10 +653,10 @@ public class ConfigGroupResourceProvider extends + ", groupId = " + request.getId()); } - String serviceName = configGroup.getServiceName(); - String requestServiceName = cluster.getServiceForConfigTypes(request.getConfigs().keySet()); + Long serviceId = configGroup.getServiceId(); + Long requestServiceId = cluster.getServiceForConfigTypes(request.getConfigs().keySet()); - if (StringUtils.isEmpty(serviceName) && StringUtils.isEmpty(requestServiceName)) { + if (serviceId == null && requestServiceId == null) { if (!AuthorizationHelper.isAuthorized(ResourceType.CLUSTER, cluster.getResourceId(), RoleAuthorization.CLUSTER_MANAGE_CONFIG_GROUPS)) { throw new AuthorizationException("The authenticated user is not authorized to update config groups"); @@ -663,20 +668,20 @@ public class ConfigGroupResourceProvider extends } } - if (serviceName != null && requestServiceName != null && !StringUtils.equals(serviceName, requestServiceName)) { + if (serviceId != null && requestServiceId != null && !serviceId.equals(requestServiceId)) { throw new IllegalArgumentException("Config group " + configGroup.getId() + - " is mapped to service " + serviceName + ", " + - "but request contain configs from service " + requestServiceName); - } else if (serviceName == null && requestServiceName != null) { - configGroup.setServiceName(requestServiceName); - serviceName = requestServiceName; + " is mapped to service " + serviceId + ", " + + "but request contain configs from service " + requestServiceId); + } else if (serviceId == null && requestServiceId != null) { + configGroup.setServiceId(requestServiceId); + serviceId = requestServiceId; } int numHosts = (null != configGroup.getHosts()) ? configGroup.getHosts().size() : 0; configLogger.info("(configchange) Updating configuration group host membership or config value. cluster: '{}', changed by: '{}', " + "service_name: '{}', config group: '{}', tag: '{}', num hosts in config group: '{}', note: '{}'", cluster.getClusterName(), getManagementController().getAuthName(), - serviceName, request.getGroupName(), request.getTag(), numHosts, request.getServiceConfigVersionNote()); + serviceId, request.getGroupName(), request.getTag(), numHosts, request.getServiceConfigVersionNote()); if (!request.getConfigs().isEmpty()) { List<String> affectedConfigTypeList = new ArrayList(request.getConfigs().keySet()); @@ -718,8 +723,8 @@ public class ConfigGroupResourceProvider extends configGroup.setDescription(request.getDescription()); configGroup.setTag(request.getTag()); - if (serviceName != null) { - cluster.createServiceConfigVersion(serviceName, getManagementController().getAuthName(), + if (serviceId != null) { + cluster.createServiceConfigVersion(serviceId, getManagementController().getAuthName(), request.getServiceConfigVersionNote(), configGroup); ConfigGroupResponse configGroupResponse = new ConfigGroupResponse(configGroup.getId(), cluster.getClusterName(), configGroup.getName(), @@ -754,6 +759,7 @@ public class ConfigGroupResourceProvider extends (String) properties.get(CONFIGGROUP_CLUSTER_NAME_PROPERTY_ID), (String) properties.get(CONFIGGROUP_NAME_PROPERTY_ID), (String) properties.get(CONFIGGROUP_TAG_PROPERTY_ID), + (String) properties.get(CONFIGGROUP_SERVICEGROUPNAME_PROPERTY_ID), (String) properties.get(CONFIGGROUP_SERVICENAME_PROPERTY_ID), (String) properties.get(CONFIGGROUP_DESC_PROPERTY_ID), null, http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceConfigVersionResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceConfigVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceConfigVersionResourceProvider.java index e7dbbc0..cbc08eb 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceConfigVersionResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceConfigVersionResourceProvider.java @@ -52,7 +52,10 @@ public class ServiceConfigVersionResourceProvider extends public static final String SERVICE_CONFIG_VERSION_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId(null, "cluster_name"); public static final String SERVICE_CONFIG_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId(null, "service_config_version"); + public static final String SERVICE_CONFIG_VERSION_SERVICE_GROUP_NAME_PROPERTY_ID = PropertyHelper.getPropertyId(null, "service_group_name"); + public static final String SERVICE_CONFIG_VERSION_SERVICE_GROUP_ID_PROPERTY_ID = PropertyHelper.getPropertyId(null, "service_group_id"); public static final String SERVICE_CONFIG_VERSION_SERVICE_NAME_PROPERTY_ID = PropertyHelper.getPropertyId(null, "service_name"); + public static final String SERVICE_CONFIG_VERSION_SERVICE_ID_PROPERTY_ID = PropertyHelper.getPropertyId(null, "service_id"); public static final String SERVICE_CONFIG_VERSION_CREATE_TIME_PROPERTY_ID = PropertyHelper.getPropertyId(null, "createtime"); public static final String SERVICE_CONFIG_VERSION_USER_PROPERTY_ID = PropertyHelper.getPropertyId(null, "user"); public static final String SERVICE_CONFIG_VERSION_NOTE_PROPERTY_ID = PropertyHelper.getPropertyId(null, "service_config_version_note"); @@ -194,6 +197,7 @@ public class ServiceConfigVersionResourceProvider extends for (String propertyId : propertyIds) { if (!propertyId.equals("cluster_name") && !propertyId.equals("service_config_version") && + !propertyId.equals("service_group_name")&& !propertyId.equals("service_name") && !propertyId.equals("createtime") && !propertyId.equals("appliedtime") && !propertyId.equals("user") && !propertyId.equals("service_config_version_note") && @@ -214,13 +218,14 @@ public class ServiceConfigVersionResourceProvider extends private ServiceConfigVersionRequest createRequest(Map<String, Object> properties) { String clusterName = (String) properties.get(SERVICE_CONFIG_VERSION_CLUSTER_NAME_PROPERTY_ID); + String serviceGroupName = (String) properties.get(SERVICE_CONFIG_VERSION_SERVICE_GROUP_NAME_PROPERTY_ID); String serviceName = (String) properties.get(SERVICE_CONFIG_VERSION_SERVICE_NAME_PROPERTY_ID); String user = (String) properties.get(SERVICE_CONFIG_VERSION_USER_PROPERTY_ID); Boolean isCurrent = Boolean.valueOf((String) properties.get(SERVICE_CONFIG_VERSION_IS_CURRENT_PROPERTY_ID)); Object versionObject = properties.get(SERVICE_CONFIG_VERSION_PROPERTY_ID); Long version = versionObject == null ? null : Long.valueOf(versionObject.toString()); - return new ServiceConfigVersionRequest(clusterName, serviceName, version, null, null, user, isCurrent); + return new ServiceConfigVersionRequest(clusterName, serviceGroupName, serviceName, version, null, null, user, isCurrent); } private List<Map<String, Object>> convertToSubResources(final String clusterName, List<ConfigurationResponse> configs) { http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/orm/cache/HostConfigMapping.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/cache/HostConfigMapping.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/cache/HostConfigMapping.java index 8f6c9b7..9ead794 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/cache/HostConfigMapping.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/cache/HostConfigMapping.java @@ -34,8 +34,11 @@ public interface HostConfigMapping { String getVersion(); void setVersion(String version); - String getServiceName(); - void setServiceName(String serviceName); + Long getServiceId(); + void setServiceId(Long serviceId); + + Long getServiceGroupId(); + void setServiceGroupId(Long serviceGroupId); String getUser(); void setUser(String user); http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/orm/cache/HostConfigMappingImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/cache/HostConfigMappingImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/cache/HostConfigMappingImpl.java index 5da7f95..f28841f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/cache/HostConfigMappingImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/cache/HostConfigMappingImpl.java @@ -26,7 +26,8 @@ public class HostConfigMappingImpl implements HostConfigMapping { private String type; private Long createTimestamp; private String version; - private String serviceName; + private Long serviceId; + private Long serviceGroupId; private String user; private Integer selected; @@ -38,7 +39,8 @@ public class HostConfigMappingImpl implements HostConfigMapping { setType(entry.getType()); setCreateTimestamp(entry.getCreateTimestamp()); setVersion(entry.getVersion()); - setServiceName(entry.getServiceName()); + setServiceGroupId(entry.getServiceGroupId()); + setServiceId(entry.getServiceId()); setUser(entry.getUser()); setSelected(entry.getSelected()); } @@ -105,15 +107,27 @@ public class HostConfigMappingImpl implements HostConfigMapping { throw new RuntimeException("Version couldn't be null"); this.version = version; } - public String getServiceName() { - return serviceName; + + @Override + public Long getServiceId() { + return serviceId; } - + @Override - public void setServiceName(String serviceName) { - this.serviceName = serviceName; + public void setServiceId(Long serviceId) { + this.serviceId = serviceId; } - + + @Override + public Long getServiceGroupId() { + return serviceGroupId; + } + + @Override + public void setServiceGroupId(Long serviceGroupId) { + this.serviceGroupId = serviceGroupId; + } + @Override public String getUser() { return user; http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAO.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAO.java index 5e43473..b80e0e7 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAO.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAO.java @@ -351,7 +351,8 @@ public class HostConfigMappingDAO { hostConfigMappingEntity.setCreateTimestamp(hostConfigMapping.getCreateTimestamp()); hostConfigMappingEntity.setHostId(hostEntity.getHostId()); hostConfigMappingEntity.setSelected(hostConfigMapping.getSelected()); - hostConfigMappingEntity.setServiceName(hostConfigMapping.getServiceName()); + hostConfigMappingEntity.setServiceGroupId(hostConfigMapping.getServiceGroupId()); + hostConfigMappingEntity.setServiceId(hostConfigMapping.getServiceId()); hostConfigMappingEntity.setType(hostConfigMapping.getType()); hostConfigMappingEntity.setUser(hostConfigMapping.getUser()); hostConfigMappingEntity.setVersion(hostConfigMapping.getVersion()); @@ -362,11 +363,12 @@ public class HostConfigMappingDAO { public HostConfigMapping buildHostConfigMapping( HostConfigMappingEntity hostConfigMappingEntity) { HostConfigMapping hostConfigMapping = new HostConfigMappingImpl(); - + hostConfigMapping.setClusterId(hostConfigMappingEntity.getClusterId()); hostConfigMapping.setCreateTimestamp(hostConfigMappingEntity.getCreateTimestamp()); hostConfigMapping.setHostId(hostConfigMappingEntity.getHostId()); - hostConfigMapping.setServiceName(hostConfigMappingEntity.getServiceName()); + hostConfigMapping.setServiceGroupId(hostConfigMappingEntity.getServiceGroupId()); + hostConfigMapping.setServiceId(hostConfigMappingEntity.getServiceId()); hostConfigMapping.setType(hostConfigMappingEntity.getType()); hostConfigMapping.setUser(hostConfigMappingEntity.getUser()); hostConfigMapping.setSelected(hostConfigMappingEntity.isSelected()); http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceConfigDAO.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceConfigDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceConfigDAO.java index 6bfad54..d00ff67 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceConfigDAO.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ServiceConfigDAO.java @@ -59,19 +59,19 @@ public class ServiceConfigDAO { } @RequiresSession - public ServiceConfigEntity findByServiceAndVersion(String serviceName, Long version) { + public ServiceConfigEntity findByServiceAndVersion(Long serviceId, Long version) { TypedQuery<ServiceConfigEntity> query = entityManagerProvider.get(). createQuery("SELECT scv FROM ServiceConfigEntity scv " + - "WHERE scv.serviceName=?1 AND scv.version=?2", ServiceConfigEntity.class); - return daoUtils.selectOne(query, serviceName, version); + "WHERE scv.serviceId=?1 AND scv.version=?2", ServiceConfigEntity.class); + return daoUtils.selectOne(query, serviceId, version); } @RequiresSession - public List<ServiceConfigEntity> findByService(Long clusterId, String serviceName) { + public List<ServiceConfigEntity> findByService(Long clusterId, Long serviceId) { TypedQuery<ServiceConfigEntity> query = entityManagerProvider.get(). createQuery("SELECT scv FROM ServiceConfigEntity scv " + - "WHERE scv.clusterId=?1 AND scv.serviceName=?2", ServiceConfigEntity.class); - return daoUtils.selectList(query, clusterId, serviceName); + "WHERE scv.clusterId=?1 AND scv.serviceId=?2", ServiceConfigEntity.class); + return daoUtils.selectList(query, clusterId, serviceId); } @RequiresSession @@ -128,18 +128,18 @@ public class ServiceConfigDAO { * Gets the latest service config versions of all config groups for a service * @param clusterId * the cluster (not {@code null}). - * @param serviceName - * Name of the service whose latest service config versions needs to be retrieved . + * @param serviceId + * ID of the service whose latest service config versions needs to be retrieved . * @return all service configurations for the cluster and service. */ @RequiresSession - public List<ServiceConfigEntity> getLastServiceConfigsForService(Long clusterId, String serviceName) { + public List<ServiceConfigEntity> getLastServiceConfigsForService(Long clusterId, Long serviceId) { TypedQuery<ServiceConfigEntity> query = entityManagerProvider.get().createNamedQuery( "ServiceConfigEntity.findLatestServiceConfigsByService", ServiceConfigEntity.class); query.setParameter("clusterId", clusterId); - query.setParameter("serviceName", serviceName); + query.setParameter("serviceId", serviceId); return daoUtils.selectList(query); } @@ -157,7 +157,7 @@ public class ServiceConfigDAO { */ @RequiresSession public List<ServiceConfigEntity> getServiceConfigsForServiceAndStack(Long clusterId, - StackId stackId, String serviceName) { + StackId stackId, Long serviceId) { StackEntity stackEntity = stackDAO.find(stackId.getStackName(), stackId.getStackVersion()); @@ -168,7 +168,7 @@ public class ServiceConfigDAO { query.setParameter("clusterId", clusterId); query.setParameter("stack", stackEntity); - query.setParameter("serviceName", serviceName); + query.setParameter("serviceId", serviceId); return daoUtils.selectList(query); } @@ -200,24 +200,24 @@ public class ServiceConfigDAO { } @RequiresSession - public ServiceConfigEntity getLastServiceConfig(Long clusterId, String serviceName) { + public ServiceConfigEntity getLastServiceConfig(Long clusterId, Long serviceId) { TypedQuery<ServiceConfigEntity> query = entityManagerProvider.get(). createQuery("SELECT scv FROM ServiceConfigEntity scv " + - "WHERE scv.clusterId = ?1 AND scv.serviceName = ?2 " + + "WHERE scv.clusterId = ?1 AND scv.serviceId = ?2 " + "ORDER BY scv.createTimestamp DESC", ServiceConfigEntity.class); - return daoUtils.selectOne(query, clusterId, serviceName); + return daoUtils.selectOne(query, clusterId, serviceId); } @RequiresSession - public ServiceConfigEntity findMaxVersion(Long clusterId, String serviceName) { + public ServiceConfigEntity findMaxVersion(Long clusterId, Long serviceId) { TypedQuery<ServiceConfigEntity> query = entityManagerProvider.get().createQuery("SELECT scv FROM ServiceConfigEntity scv " + - "WHERE scv.clusterId=?1 AND scv.serviceName=?2 AND scv.version = (" + + "WHERE scv.clusterId=?1 AND scv.serviceId=?2 AND scv.version = (" + "SELECT max(scv2.version) FROM ServiceConfigEntity scv2 " + - "WHERE scv2.clusterId=?1 AND scv2.serviceName=?2)", ServiceConfigEntity.class); + "WHERE scv2.clusterId=?1 AND scv2.serviceId=?2)", ServiceConfigEntity.class); - return daoUtils.selectSingle(query, clusterId, serviceName); + return daoUtils.selectSingle(query, clusterId, serviceId); } /** @@ -250,17 +250,17 @@ public class ServiceConfigDAO { * * @param clusterId * the cluster that the service is a part of. - * @param serviceName - * the name of the service (not {@code null}). + * @param serviceId + * the ID of the service (not {@code null}). * @return the maximum version value + 1 */ @RequiresSession - public Long findNextServiceConfigVersion(long clusterId, String serviceName) { + public Long findNextServiceConfigVersion(long clusterId, Long serviceId) { TypedQuery<Number> query = entityManagerProvider.get().createNamedQuery( "ServiceConfigEntity.findNextServiceConfigVersion", Number.class); query.setParameter("clusterId", clusterId); - query.setParameter("serviceName", serviceName); + query.setParameter("serviceId", serviceId); return daoUtils.selectSingle(query).longValue(); } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterServiceEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterServiceEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterServiceEntity.java index b6c60be..976bb67 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterServiceEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterServiceEntity.java @@ -235,4 +235,10 @@ public class ClusterServiceEntity { this.serviceComponentDesiredStateEntities = serviceComponentDesiredStateEntities; } + public String getServiceGroupName() { + if (serviceGroupEntity != null) { + return serviceGroupEntity.getServiceGroupName(); + } + return null; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ConfigGroupEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ConfigGroupEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ConfigGroupEntity.java index 065a073..225b2cc 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ConfigGroupEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ConfigGroupEntity.java @@ -26,6 +26,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; @@ -73,8 +74,20 @@ public class ConfigGroupEntity { @Column(name = "create_timestamp", nullable=false, insertable=true, updatable=false) private long timestamp; - @Column(name = "service_name") - private String serviceName; + @Column(name = "service_id", nullable = false, insertable = false, updatable = false) + private Long serviceId; + + @Column(name = "service_group_id", nullable = false, insertable = false, updatable = false) + private Long serviceGroupId; + + @ManyToOne + @JoinColumns( + { + @JoinColumn(name = "cluster_id", referencedColumnName = "cluster_id", nullable = false, insertable = false, updatable = false), + @JoinColumn(name = "service_group_id", referencedColumnName = "service_group_id", nullable = false), + @JoinColumn(name = "service_id", referencedColumnName = "id", nullable = false) + }) + private ClusterServiceEntity clusterServiceEntity; @ManyToOne @JoinColumn(name = "cluster_id", referencedColumnName = "cluster_id", nullable = false) @@ -182,11 +195,27 @@ public class ConfigGroupEntity { return result; } - public String getServiceName() { - return serviceName; + public Long getServiceId() { + return serviceId; + } + + public void setServiceId(Long serviceId) { + this.serviceId = serviceId; + } + + public Long getServiceGroupId() { + return serviceGroupId; + } + + public void setServiceGroupId(Long serviceGroupId) { + this.serviceGroupId = serviceGroupId; + } + + public ClusterServiceEntity getClusterServiceEntity() { + return clusterServiceEntity; } - public void setServiceName(String serviceName) { - this.serviceName = serviceName; + public void setClusterServiceEntity(ClusterServiceEntity clusterServiceEntity) { + this.clusterServiceEntity = clusterServiceEntity; } } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostConfigMappingEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostConfigMappingEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostConfigMappingEntity.java index eea4a40..76708f9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostConfigMappingEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostConfigMappingEntity.java @@ -21,6 +21,9 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; +import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; +import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; @@ -40,7 +43,7 @@ import javax.persistence.Table; public class HostConfigMappingEntity { @Id - @Column(name = "cluster_id", insertable = true, updatable = false, nullable = false) + @Column(name = "cluster_id", insertable = false, updatable = false, nullable = false) private Long clusterId; @Id @@ -58,8 +61,20 @@ public class HostConfigMappingEntity { @Column(name = "version_tag", insertable = true, updatable = false, nullable = false) private String versionTag; - @Column(name = "service_name", insertable = true, updatable = true) - private String serviceName; + @Column(name = "service_id", insertable = false, updatable = false, nullable = false) + private Long serviceId; + + @Column(name = "service_group_id", insertable = false, updatable = false, nullable = false) + private Long serviceGroupId; + + @ManyToOne + @JoinColumns( + { + @JoinColumn(name = "cluster_id", referencedColumnName = "cluster_id", nullable = false), + @JoinColumn(name = "service_group_id", referencedColumnName = "service_group_id", nullable = false), + @JoinColumn(name = "service_id", referencedColumnName = "id", nullable = false) + }) + private ClusterServiceEntity clusterServiceEntity; @Column(name = "selected", insertable = true, updatable = true, nullable = false) private int selected = 0; @@ -115,14 +130,6 @@ public class HostConfigMappingEntity { this.selected = selected; } - public String getServiceName() { - return serviceName; - } - - public void setServiceName(String name) { - serviceName = name; - } - /** * @return the user */ @@ -149,7 +156,8 @@ public class HostConfigMappingEntity { if (createTimestamp != null ? !createTimestamp.equals(that.createTimestamp) : that.createTimestamp != null) return false; if (hostId != null ? !hostId.equals(that.hostId) : that.hostId != null) return false; - if (serviceName != null ? !serviceName.equals(that.serviceName) : that.serviceName != null) return false; + if (serviceGroupId != null ? !serviceGroupId.equals(that.serviceGroupId) : that.serviceGroupId != null) return false; + if (serviceId != null ? !serviceId.equals(that.serviceId) : that.serviceId != null) return false; if (type != null ? !type.equals(that.type) : that.type != null) return false; if (user != null ? !user.equals(that.user) : that.user != null) return false; if (versionTag != null ? !versionTag.equals(that.versionTag) : that.versionTag != null) return false; @@ -164,9 +172,34 @@ public class HostConfigMappingEntity { result = 31 * result + (type != null ? type.hashCode() : 0); result = 31 * result + (createTimestamp != null ? createTimestamp.hashCode() : 0); result = 31 * result + (versionTag != null ? versionTag.hashCode() : 0); - result = 31 * result + (serviceName != null ? serviceName.hashCode() : 0); + result = 31 * result + (serviceGroupId != null ? serviceGroupId.hashCode() : 0); + result = 31 * result + (serviceId != null ? serviceId.hashCode() : 0); result = 31 * result + selected; result = 31 * result + (user != null ? user.hashCode() : 0); return result; } + + public Long getServiceId() { + return serviceId; + } + + public void setServiceId(Long serviceId) { + this.serviceId = serviceId; + } + + public Long getServiceGroupId() { + return serviceGroupId; + } + + public void setServiceGroupId(Long serviceGroupId) { + this.serviceGroupId = serviceGroupId; + } + + public ClusterServiceEntity getClusterServiceEntity() { + return clusterServiceEntity; + } + + public void setClusterServiceEntity(ClusterServiceEntity clusterServiceEntity) { + this.clusterServiceEntity = clusterServiceEntity; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceConfigEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceConfigEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceConfigEntity.java index b1409ed..7cd7e98 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceConfigEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceConfigEntity.java @@ -29,6 +29,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; @@ -51,19 +52,19 @@ import javax.persistence.TableGenerator; query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId=:clusterId ORDER BY serviceConfig.version DESC"), @NamedQuery( name = "ServiceConfigEntity.findNextServiceConfigVersion", - query = "SELECT COALESCE(MAX(serviceConfig.version), 0) + 1 AS nextVersion FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.serviceName=:serviceName AND serviceConfig.clusterId=:clusterId"), + query = "SELECT COALESCE(MAX(serviceConfig.version), 0) + 1 AS nextVersion FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.serviceId=:serviceId AND serviceConfig.clusterId=:clusterId"), @NamedQuery( name = "ServiceConfigEntity.findServiceConfigsByStack", - query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId=:clusterId AND serviceConfig.stack=:stack AND serviceConfig.serviceName=:serviceName"), + query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId=:clusterId AND serviceConfig.stack=:stack AND serviceConfig.serviceId=:serviceId"), @NamedQuery( name = "ServiceConfigEntity.findLatestServiceConfigsByStack", - query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId = :clusterId AND (serviceConfig.groupId = null OR serviceConfig.groupId IN (SELECT cg.groupId from ConfigGroupEntity cg)) AND serviceConfig.version = (SELECT MAX(serviceConfig2.version) FROM ServiceConfigEntity serviceConfig2 WHERE serviceConfig2.clusterId= :clusterId AND serviceConfig2.stack = :stack AND serviceConfig2.serviceName = serviceConfig.serviceName)"), + query = "SELECT serviceConfig FROM ServiceConfigEntity serviceConfig WHERE serviceConfig.clusterId = :clusterId AND (serviceConfig.groupId = null OR serviceConfig.groupId IN (SELECT cg.groupId from ConfigGroupEntity cg)) AND serviceConfig.version = (SELECT MAX(serviceConfig2.version) FROM ServiceConfigEntity serviceConfig2 WHERE serviceConfig2.clusterId= :clusterId AND serviceConfig2.stack = :stack AND serviceConfig2.serviceId = serviceConfig.serviceId)"), @NamedQuery( name = "ServiceConfigEntity.findLatestServiceConfigsByService", - query = "SELECT scv FROM ServiceConfigEntity scv WHERE scv.clusterId = :clusterId AND scv.serviceName = :serviceName AND (scv.groupId = null OR scv.groupId IN (SELECT cg.groupId from ConfigGroupEntity cg)) AND scv.version = (SELECT MAX(scv2.version) FROM ServiceConfigEntity scv2 WHERE (scv2.serviceName = :serviceName AND scv2.clusterId = :clusterId) AND (scv2.groupId = scv.groupId OR (scv2.groupId IS NULL AND scv.groupId IS NULL)))"), + query = "SELECT scv FROM ServiceConfigEntity scv WHERE scv.clusterId = :clusterId AND scv.serviceId = :serviceId AND (scv.groupId = null OR scv.groupId IN (SELECT cg.groupId from ConfigGroupEntity cg)) AND scv.version = (SELECT MAX(scv2.version) FROM ServiceConfigEntity scv2 WHERE (scv2.serviceId = :serviceId AND scv2.clusterId = :clusterId) AND (scv2.groupId = scv.groupId OR (scv2.groupId IS NULL AND scv.groupId IS NULL)))"), @NamedQuery( name = "ServiceConfigEntity.findLatestServiceConfigsByCluster", - query = "SELECT scv FROM ServiceConfigEntity scv WHERE scv.clusterId = :clusterId AND scv.serviceConfigId IN (SELECT MAX(scv1.serviceConfigId) FROM ServiceConfigEntity scv1 WHERE (scv1.clusterId = :clusterId) AND (scv1.groupId IS NULL) GROUP BY scv1.serviceName)") }) + query = "SELECT scv FROM ServiceConfigEntity scv WHERE scv.clusterId = :clusterId AND scv.serviceConfigId IN (SELECT MAX(scv1.serviceConfigId) FROM ServiceConfigEntity scv1 WHERE (scv1.clusterId = :clusterId) AND (scv1.groupId IS NULL) GROUP BY scv1.serviceId)") }) public class ServiceConfigEntity { @Id @Column(name = "service_config_id") @@ -75,8 +76,21 @@ public class ServiceConfigEntity { private Long clusterId; @Basic - @Column(name = "service_name", nullable = false) - private String serviceName; + @Column(name = "service_id", nullable = false, insertable = false, updatable = false) + private Long serviceId; + + @Basic + @Column(name = "service_group_id", nullable = false, insertable = false, updatable = false) + private Long serviceGroupId; + + @ManyToOne + @JoinColumns( + { + @JoinColumn(name = "cluster_id", referencedColumnName = "cluster_id", nullable = false, insertable = false, updatable = false), + @JoinColumn(name = "service_group_id", referencedColumnName = "service_group_id", nullable = false), + @JoinColumn(name = "service_id", referencedColumnName = "id", nullable = false) + }) + private ClusterServiceEntity clusterServiceEntity; @Basic @Column(name = "group_id", nullable = true) @@ -135,12 +149,12 @@ public class ServiceConfigEntity { this.serviceConfigId = serviceConfigId; } - public String getServiceName() { - return serviceName; + public Long getServiceId() { + return serviceId; } - public void setServiceName(String serviceName) { - this.serviceName = serviceName; + public void setServiceId(Long serviceId) { + this.serviceId = serviceId; } public Long getVersion() { @@ -275,4 +289,34 @@ public class ServiceConfigEntity { } return true; } + + public Long getServiceGroupId() { + return serviceGroupId; + } + + public void setServiceGroupId(Long serviceGroupId) { + this.serviceGroupId = serviceGroupId; + } + + public ClusterServiceEntity getClusterServiceEntity() { + return clusterServiceEntity; + } + + public void setClusterServiceEntity(ClusterServiceEntity clusterServiceEntity) { + this.clusterServiceEntity = clusterServiceEntity; + } + + public String getServiceGroupName() { + if (clusterServiceEntity != null) { + return clusterServiceEntity.getServiceGroupName(); + } + return null; + } + + public String getServiceName() { + if (clusterServiceEntity != null) { + return clusterServiceEntity.getServiceName(); + } + return null; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java index f15a507..6bb248e 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/ConfigureAction.java @@ -181,7 +181,7 @@ public class ConfigureAction extends AbstractUpgradeServerAction { // such as hdfs-site or hbase-env String configType = commandParameters.get(ConfigureTask.PARAMETER_CONFIG_TYPE); - String serviceName = cluster.getServiceByConfigType(configType); + String serviceName = cluster.getServiceByConfigType(configType).getName(); // !!! we couldn't get the service based on its config type, so try the associated if (StringUtils.isBlank(serviceName)) { http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java index f0ae0c8..7380cba 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java @@ -325,8 +325,8 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction { outSB.append( String.format("Removing %s configurations for %s", sourceStackId, serviceName)).append(System.lineSeparator()); - - cluster.removeConfigurations(sourceStackId, serviceName); + //TODO pass serviceGroupName + cluster.removeConfigurations(sourceStackId, cluster.getService(null, serviceName).getServiceId()); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/PreconfigureKerberosAction.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/PreconfigureKerberosAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/PreconfigureKerberosAction.java index 5af7c6b..02cb70a 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/PreconfigureKerberosAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/PreconfigureKerberosAction.java @@ -462,7 +462,7 @@ public class PreconfigureKerberosAction extends AbstractUpgradeServerAction { for (Map.Entry<String, Map<String, String>> entry : kerberosConfigurations.entrySet()) { String configType = entry.getKey(); - String service = cluster.getServiceByConfigType(configType); + String service = cluster.getServiceByConfigType(configType).getName(); Set<String> allowedProperties = propertyFilter.get(configType); // Update properties for services that are installed and not filtered out http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java index 2193c3a..27d37e3 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java @@ -98,6 +98,7 @@ public interface Cluster { ServiceGroup addServiceGroupDependency(String serviceGroupName, String dependencyServiceGroupName) throws AmbariException; + //TODO remove when UI starts using service groups /** * Get a service * @@ -106,6 +107,8 @@ public interface Cluster { */ Service getService(String serviceName) throws AmbariException; + Service getService(String serviceGroupName, String serviceName) throws AmbariException; + Service getService(Long serviceId) throws AmbariException; /** @@ -383,7 +386,7 @@ public interface Cluster { * @return <code>true</code> if the config was added, or <code>false</code> * if the config is already set as the current */ - ServiceConfigVersionResponse addDesiredConfig(String user, Set<Config> configs); + ServiceConfigVersionResponse addDesiredConfig(String user, Set<Config> configs) throws AmbariException; /** * Adds and sets a DESIRED configuration to be applied to a cluster. There @@ -395,24 +398,24 @@ public interface Cluster { * @return <code>true</code> if the config was added, or <code>false</code> * if the config is already set as the current */ - ServiceConfigVersionResponse addDesiredConfig(String user, Set<Config> configs, String serviceConfigVersionNote); + ServiceConfigVersionResponse addDesiredConfig(String user, Set<Config> configs, String serviceConfigVersionNote) throws AmbariException; - ServiceConfigVersionResponse createServiceConfigVersion(String serviceName, String user, String note, - ConfigGroup configGroup); + ServiceConfigVersionResponse createServiceConfigVersion(Long serviceId, String user, String note, + ConfigGroup configGroup) throws AmbariException; - String getServiceForConfigTypes(Collection<String> configTypes); + Long getServiceForConfigTypes(Collection<String> configTypes); /** * Apply specified service config version (rollback) * - * @param serviceName service name + * @param serviceId service Id * @param version service config version * @param user the user making the change for audit purposes * @param note * @return service config version created * @throws AmbariException */ - ServiceConfigVersionResponse setServiceConfigVersion(String serviceName, Long version, String user, String note) throws AmbariException; + ServiceConfigVersionResponse setServiceConfigVersion(Long serviceId, Long version, String user, String note) throws AmbariException; /** * Get currently active service config versions for stack services @@ -424,10 +427,10 @@ public interface Cluster { /** * Get active service config version responses for all config groups of a service * - * @param serviceName service name + * @param serviceId service ID * @return */ - List<ServiceConfigVersionResponse> getActiveServiceConfigVersionResponse(String serviceName); + List<ServiceConfigVersionResponse> getActiveServiceConfigVersionResponse(Long serviceId); /** * Get service config version history @@ -670,18 +673,18 @@ public interface Cluster { * * @param stackId the stack to use when finding the latest configurations (not * {@code null}). - * @param serviceName the service to modify configurations for (not {@code null}). + * @param serviceId the service to modify configurations for (not {@code null}). */ - void applyLatestConfigurations(StackId stackId, String serviceName); + void applyLatestConfigurations(StackId stackId, Long serviceId); /** * Removes all configurations for the specified service and stack. * * @param stackId the stack to use when finding the configurations to remove (not * {@code null}). - * @param serviceName the service to rmeove configurations for (not {@code null}). + * @param serviceId the service to remove configurations for (not {@code null}). */ - void removeConfigurations(StackId stackId, String serviceName); + void removeConfigurations(StackId stackId, Long serviceId); /** * Returns whether this cluster was provisioned by a Blueprint or not. @@ -717,13 +720,13 @@ public interface Cluster { boolean isUpgradeSuspended(); /** - * Returns the name of the service that the passed config type belongs to. + * Returns the service that the passed config type belongs to. * * @param configType the config type to look up the service by - * @return returns the name of the service that the config type belongs to if + * @return returns the service that the config type belongs to if * there is any otherwise returns null. */ - String getServiceByConfigType(String configType); + Service getServiceByConfigType(String configType); /** * Gets the most recent value of {@code cluster-env/propertyName} where http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java index d729cb8..8c0e656 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java @@ -1117,7 +1117,7 @@ public class ConfigHelper { AmbariManagementController controller, Map<String, Map<String, String>> batchProperties, String authenticatedUserName, String serviceVersionNote) throws AmbariException { - Map<String, Set<Config>> serviceMapped = new HashMap<>(); + Map<Long, Set<Config>> serviceMapped = new HashMap<>(); for (Map.Entry<String, Map<String, String>> entry : batchProperties.entrySet()) { String type = entry.getKey(); @@ -1128,7 +1128,7 @@ public class ConfigHelper { if (null != baseConfig) { try { - String service = cluster.getServiceForConfigTypes(Collections.singleton(type)); + Long service = cluster.getServiceForConfigTypes(Collections.singleton(type)); if (!serviceMapped.containsKey(service)) { serviceMapped.put(service, new HashSet<>()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/state/DesiredConfig.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/DesiredConfig.java b/ambari-server/src/main/java/org/apache/ambari/server/state/DesiredConfig.java index 4fad21d..9c0d32d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/DesiredConfig.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/DesiredConfig.java @@ -33,7 +33,8 @@ import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; public class DesiredConfig { private String tag; - private String serviceName; + private Long serviceId; + private Long serviceGroupId; private Long version; private List<HostOverride> hostOverrides = new ArrayList<>(); @@ -55,21 +56,39 @@ public class DesiredConfig { } /** - * Gets the service name (if any) for the desired config. - * @return the service name + * Gets the service id (if any) for the desired config. + * @return the service id */ @JsonSerialize(include = Inclusion.NON_NULL) - @JsonProperty("service_name") - public String getServiceName() { - return serviceName; + @JsonProperty("service_id") + public Long getServiceId() { + return serviceId; } /** - * Sets the service name (if any) for the desired config. - * @param name the service name + * Sets the service id (if any) for the desired config. + * @param serviceId the service id */ - public void setServiceName(String name) { - serviceName = name; + public void setServiceId(Long serviceId) { + this.serviceId = serviceId; + } + + /** + * Gets the service group id (if any) for the desired config. + * @return the service group id + */ + @JsonSerialize(include = Inclusion.NON_NULL) + @JsonProperty("service_group_id") + public Long getServiceGroupId() { + return serviceGroupId; + } + + /** + * Sets the service group id (if any) for the desired config. + * @param serviceGroupId the service group id + */ + public void setServiceGroupId(Long serviceGroupId) { + this.serviceGroupId = serviceGroupId; } /** @@ -160,8 +179,10 @@ public class DesiredConfig { StringBuilder sb = new StringBuilder(); sb.append("{"); sb.append("tag=").append(tag); - if (null != serviceName) - sb.append(", service=").append(serviceName); + if (null != serviceGroupId) + sb.append(", serviceGroupId=").append(serviceGroupId); + if (null != serviceId) + sb.append(", serviceId=").append(serviceId); if (null != hostOverrides && hostOverrides.size() > 0) { sb.append(", hosts=["); int i = 0; @@ -189,7 +210,8 @@ public class DesiredConfig { return new EqualsBuilder() .append(tag, that.tag) - .append(serviceName, that.serviceName) + .append(serviceGroupId, that.serviceGroupId) + .append(serviceId, that.serviceId) .append(version, that.version) .append(hostOverrides, that.hostOverrides) .isEquals(); @@ -199,7 +221,8 @@ public class DesiredConfig { public int hashCode() { return new HashCodeBuilder(17, 37) .append(tag) - .append(serviceName) + .append(serviceGroupId) + .append(serviceId) .append(version) .append(hostOverrides) .toHashCode(); http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java index 0321701..bfb04be 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java @@ -512,6 +512,15 @@ public class ServiceImpl implements Service { return isCredentialStoreRequired; } + @Override + public String toString() { + return "ServiceImpl{" + + "serviceId=" + serviceId + + ", serviceName='" + serviceName + '\'' + + ", displayName='" + displayName + '\'' + + ", serviceType='" + serviceType + '\'' + + '}'; + } /** * Get a true or false value specifying whether @@ -635,7 +644,7 @@ public class ServiceImpl implements Service { @Transactional void deleteAllServiceConfigs() throws AmbariException { long clusterId = getClusterId(); - ServiceConfigEntity lastServiceConfigEntity = serviceConfigDAO.findMaxVersion(clusterId, getName()); + ServiceConfigEntity lastServiceConfigEntity = serviceConfigDAO.findMaxVersion(clusterId, getServiceId()); // de-select every configuration from the service if (lastServiceConfigEntity != null) { for (ClusterConfigEntity serviceConfigEntity : lastServiceConfigEntity.getClusterConfigEntities()) { @@ -649,7 +658,7 @@ public class ServiceImpl implements Service { LOG.info("Deleting all configuration associations for {} on cluster {}", getName(), cluster.getClusterName()); List<ServiceConfigEntity> serviceConfigEntities = - serviceConfigDAO.findByService(cluster.getClusterId(), getName()); + serviceConfigDAO.findByService(cluster.getClusterId(), getServiceId()); for (ServiceConfigEntity serviceConfigEntity : serviceConfigEntities) { // Only delete the historical version information and not original http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java index 510072a..a6c6507 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java @@ -972,7 +972,8 @@ public class UpgradeHelper { // downgrade is easy - just remove the new and make the old current if (direction == Direction.DOWNGRADE) { - cluster.applyLatestConfigurations(targetStackId, serviceName); + //TODO pass serviceGroupName + cluster.applyLatestConfigurations(targetStackId, cluster.getService(null, serviceName).getServiceId()); continue; } @@ -1001,8 +1002,10 @@ public class UpgradeHelper { // find the current, existing configurations for the service List<Config> existingServiceConfigs = new ArrayList<>(); + List<ServiceConfigEntity> latestServiceConfigs = m_serviceConfigDAO.getLastServiceConfigsForService( - cluster.getClusterId(), serviceName); + //TODO pass serviceGroupName + cluster.getClusterId(), cluster.getService(null, serviceName).getServiceId()); for (ServiceConfigEntity serviceConfig : latestServiceConfigs) { List<ClusterConfigEntity> existingConfigurations = serviceConfig.getClusterConfigEntities();
