Repository: ambari
Updated Branches:
  refs/heads/branch-feature-AMBARI-14714 72bac1f7f -> 527c4a2d7


http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
index 881f172..755a80f 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
@@ -289,7 +289,7 @@ public class ClusterImpl implements Cluster {
   @Inject
   private StackDAO stackDAO;
 
-  private volatile Multimap<String, String> serviceConfigTypes;
+  private volatile Multimap<Long, String> serviceConfigTypes;
 
   /**
    * Used to publish events relating to cluster CRUD operations and to receive
@@ -348,9 +348,8 @@ public class ClusterImpl implements Cluster {
 
     loadRequestExecutions();
 
-    if (desiredStackVersion != null && 
!StringUtils.isEmpty(desiredStackVersion.getStackName()) && !
-      StringUtils.isEmpty(desiredStackVersion.getStackVersion())) {
-      loadServiceConfigTypes();
+    if (servicesById != null && !servicesById.isEmpty()) {
+      loadServicesConfigTypes(servicesById.values());
     }
 
     // register to receive stuff
@@ -358,41 +357,42 @@ public class ClusterImpl implements Cluster {
     this.eventPublisher = eventPublisher;
   }
 
-  private void loadServiceConfigTypes() throws AmbariException {
+  private void loadServicesConfigTypes(Collection<Service> services) throws 
AmbariException {
+    for (Service service : services) {
+      loadServiceConfigTypes(service);
+    }
+  }
+
+  private void loadServiceConfigTypes(Service service) throws AmbariException {
+    if (serviceConfigTypes == null) {
+      serviceConfigTypes = HashMultimap.create();
+    } else {
+      serviceConfigTypes.removeAll(service.getServiceId());
+    }
     try {
-      serviceConfigTypes = collectServiceConfigTypesMapping();
+      serviceConfigTypes.putAll(service.getServiceId(), 
collectServiceConfigTypes(service));
     } catch (AmbariException e) {
-      LOG.error("Cannot load stack info:", e);
+      LOG.error("Cannot load service info:", e);
       throw e;
     }
-    LOG.info("Service config types loaded: {}", serviceConfigTypes);
+    LOG.info("Updated service config types: {}", serviceConfigTypes);
   }
 
   /**
-   * Construct config type to service name mapping
+   * Construct config types for concrete service
    *
-   * @throws AmbariException when stack or its part not found
+   * @throws AmbariException when stack or service not found
    */
-  private Multimap<String, String> collectServiceConfigTypesMapping() throws 
AmbariException {
-    Multimap<String, String> serviceConfigTypes = HashMultimap.create();
-
-    Map<String, ServiceInfo> serviceInfoMap = null;
+  private Collection<String> collectServiceConfigTypes(Service service) throws 
AmbariException {
+    ServiceInfo serviceInfo;
     try {
-      serviceInfoMap = 
ambariMetaInfo.getServices(desiredStackVersion.getStackName(), 
desiredStackVersion.getStackVersion());
+      serviceInfo = ambariMetaInfo.getService(service);
     } catch (ParentObjectNotFoundException e) {
       LOG.error("Service config versioning disabled due to exception: ", e);
-      return serviceConfigTypes;
-    }
-    for (Entry<String, ServiceInfo> entry : serviceInfoMap.entrySet()) {
-      String serviceName = entry.getKey();
-      ServiceInfo serviceInfo = entry.getValue();
-      Set<String> configTypes = serviceInfo.getConfigTypeAttributes().keySet();
-      for (String configType : configTypes) {
-        serviceConfigTypes.put(serviceName, configType);
-      }
+      throw e;
     }
 
-    return serviceConfigTypes;
+    return serviceInfo.getConfigTypeAttributes().keySet();
   }
 
   /**
@@ -448,9 +448,10 @@ public class ClusterImpl implements Cluster {
       try {
         if (ambariMetaInfo.getService(stackId.getStackName(),
           stackId.getStackVersion(), serviceEntity.getServiceType()) != null) {
-          services.put(serviceEntity.getServiceName(),
-            serviceFactory.createExisting(this, 
getServiceGroup(serviceEntity.getServiceGroupId()), serviceEntity));
-           stackId = 
getService(serviceEntity.getServiceName()).getDesiredStackId();
+          Service service = serviceFactory.createExisting(this, 
getServiceGroup(serviceEntity.getServiceGroupId()), serviceEntity);
+          services.put(serviceEntity.getServiceName(), service);
+          stackId = 
getService(serviceEntity.getServiceName()).getDesiredStackId();
+          servicesById.put(serviceEntity.getServiceId(), service);
         }
 
       } catch (AmbariException e) {
@@ -874,7 +875,15 @@ public class ClusterImpl implements Cluster {
       LOG.debug("Adding a new Service, clusterName={}, clusterId={}, 
serviceName={} serviceType={}",
                  getClusterName(), getClusterId(), service.getName(), 
service.getServiceType());
     }
+    //TODO get rid of services map
     services.put(service.getName(), service);
+
+    servicesById.put(service.getServiceId(), service);
+    try {
+      loadServiceConfigTypes(service);
+    } catch (AmbariException e) {
+      e.printStackTrace();
+    }
   }
 
   /**
@@ -1047,15 +1056,53 @@ public class ClusterImpl implements Cluster {
   }
 
   @Override
+  public Service getService(String serviceGroupName, String serviceName) 
throws AmbariException {
+    Service service = null;
+    //TODO use serviceIds instead of service name (remove this if)
+    if (serviceGroupName == null) {
+      service = getService(serviceName);
+      if (null == service) {
+        throw new ServiceNotFoundException(getClusterName(), serviceName);
+      }
+    } else {
+      for (Service serviceCandidate : servicesById.values()) {
+        if (serviceCandidate.getClusterId().equals(this.getClusterId())
+            && StringUtils.equals(serviceCandidate.getServiceGroupName(), 
serviceGroupName)
+            && StringUtils.equals(serviceCandidate.getName(), serviceName)) {
+          if (service == null) {
+            service = serviceCandidate;
+          } else {
+            LOG.error("Two services entities found for same serviceGroup and 
serviceName : service1 {%s}, service2 {%s}", service, serviceCandidate);
+            throw new AmbariException(String.format("Two services entities 
found for same serviceGroup and serviceName : service1 {%s}, service2 {%s}", 
service, serviceCandidate));
+          }
+        }
+      }
+    }
+
+    if (null == service) {
+      throw new ServiceNotFoundException(getClusterName(), serviceName);
+    }
+
+    return service;
+  }
+
+  @Override
   public Service getService(Long serviceId) throws AmbariException {
     Service service = servicesById.get(serviceId);
     if (null == service) {
       throw new ServiceNotFoundException(getClusterName(), serviceId);
     }
-
     return service;
   }
 
+  private Service getServiceOrNull(Long serviceId) {
+    try {
+      return getService(serviceId);
+    } catch (AmbariException e) {
+      return null;
+    }
+  }
+
   @Override
   public Map<String, Service> getServices() {
     return new HashMap<>(services);
@@ -1126,8 +1173,6 @@ public class ClusterImpl implements Cluster {
 
       clusterEntity.setDesiredStack(stackEntity);
       clusterEntity = clusterDAO.merge(clusterEntity);
-
-      loadServiceConfigTypes();
     } finally {
       clusterGlobalLock.writeLock().unlock();
     }
@@ -1569,6 +1614,9 @@ public class ClusterImpl implements Cluster {
     service.delete();
 
     serviceComponentHosts.remove(serviceName);
+    services.remove(serviceName);
+    servicesById.remove(service.getServiceId());
+    serviceConfigTypes.removeAll(service.getServiceId());
 
     for (List<ServiceComponentHost> serviceComponents : 
serviceComponentHostsByHost.values()) {
       Iterables.removeIf(serviceComponents, new 
Predicate<ServiceComponentHost>() {
@@ -1639,12 +1687,12 @@ public class ClusterImpl implements Cluster {
   }
 
   @Override
-  public ServiceConfigVersionResponse addDesiredConfig(String user, 
Set<Config> configs) {
+  public ServiceConfigVersionResponse addDesiredConfig(String user, 
Set<Config> configs) throws AmbariException {
     return addDesiredConfig(user, configs, null);
   }
 
   @Override
-  public ServiceConfigVersionResponse addDesiredConfig(String user, 
Set<Config> configs, String serviceConfigVersionNote) {
+  public ServiceConfigVersionResponse addDesiredConfig(String user, 
Set<Config> configs, String serviceConfigVersionNote) throws AmbariException {
     if (null == user) {
       throw new NullPointerException("User must be specified.");
     }
@@ -1721,7 +1769,8 @@ public class ClusterImpl implements Cluster {
       for (ClusterConfigEntity configEntity : entities) {
         if (allVersions || configEntity.isSelected()) {
           DesiredConfig desiredConfig = new DesiredConfig();
-          desiredConfig.setServiceName(null);
+          desiredConfig.setServiceId(null);
+          desiredConfig.setServiceGroupId(null);
           desiredConfig.setTag(configEntity.getTag());
 
           if (!allConfigs.containsKey(configEntity.getType())) {
@@ -1787,7 +1836,7 @@ public class ClusterImpl implements Cluster {
 
   @Override
   public ServiceConfigVersionResponse createServiceConfigVersion(
-    String serviceName, String user, String note, ConfigGroup configGroup) {
+    Long serviceId, String user, String note, ConfigGroup configGroup) throws 
AmbariException {
 
     // Create next service config version
     ServiceConfigEntity serviceConfigEntity = new ServiceConfigEntity();
@@ -1808,24 +1857,23 @@ public class ClusterImpl implements Cluster {
 
         serviceConfigEntity.setClusterConfigEntities(configEntities);
       } else {
-        List<ClusterConfigEntity> configEntities = 
getClusterConfigEntitiesByService(serviceName);
+        List<ClusterConfigEntity> configEntities = 
getClusterConfigEntitiesByService(serviceId);
         serviceConfigEntity.setClusterConfigEntities(configEntities);
       }
 
 
       long nextServiceConfigVersion = 
serviceConfigDAO.findNextServiceConfigVersion(clusterId,
-        serviceName);
+        serviceId);
 
-      // get the correct stack ID to use when creating the service config
-      StackEntity stackEntity = clusterEntity.getDesiredStack();
-      Service service = services.get(serviceName);
-      if (null != service) {
-        StackId serviceStackId = service.getDesiredStackId();
-        stackEntity = stackDAO.find(serviceStackId);
-      }
+      Service service = getService(serviceId);
+      StackId serviceStackId = service.getDesiredStackId();
+      StackEntity stackEntity = stackDAO.find(serviceStackId);
+      ClusterServiceEntity clusterServiceEntity = 
clusterServiceDAO.findById(clusterId, service.getServiceGroupId(), 
service.getServiceId());
 
-      serviceConfigEntity.setServiceName(serviceName);
+      serviceConfigEntity.setServiceId(serviceId);
       serviceConfigEntity.setClusterEntity(clusterEntity);
+      serviceConfigEntity.setServiceGroupId(service.getServiceGroupId());
+      serviceConfigEntity.setClusterServiceEntity(clusterServiceEntity);
       serviceConfigEntity.setVersion(nextServiceConfigVersion);
       serviceConfigEntity.setUser(user);
       serviceConfigEntity.setNote(note);
@@ -1843,7 +1891,7 @@ public class ClusterImpl implements Cluster {
     String configGroupName = configGroup == null ? 
ServiceConfigVersionResponse.DEFAULT_CONFIG_GROUP_NAME : configGroup.getName();
     configChangeLog.info("(configchange) Creating config version. cluster: 
'{}', changed by: '{}', " +
         "service_name: '{}', config_group: '{}', config_group_id: '{}', 
version: '{}', create_timestamp: '{}', note: '{}'",
-      getClusterName(), user, serviceName, configGroupName,
+      getClusterName(), user, getService(serviceId).getName(), configGroupName,
       configGroup == null ? "null" : configGroup.getId(), 
serviceConfigEntity.getVersion(), serviceConfigEntity.getCreateTimestamp(),
       serviceConfigEntity.getNote());
 
@@ -1854,42 +1902,47 @@ public class ClusterImpl implements Cluster {
   }
 
   @Override
-  public String getServiceForConfigTypes(Collection<String> configTypes) {
+  public Long getServiceForConfigTypes(Collection<String> configTypes) {
     //debug
     LOG.info("Looking for service for config types {}", configTypes);
-    String serviceName = null;
+    Long serviceId = null;
     for (String configType : configTypes) {
-      for (Entry<String, String> entry : serviceConfigTypes.entries()) {
+      for (Entry<Long, String> entry : serviceConfigTypes.entries()) {
         if (StringUtils.equals(entry.getValue(), configType)) {
-          if (serviceName != null) {
-            if (entry.getKey() != null && !StringUtils.equals(serviceName, 
entry.getKey())) {
+          if (serviceId != null) {
+            if (entry.getKey() != null && !serviceId.equals(entry.getKey())) {
               throw new IllegalArgumentException(String.format("Config type %s 
belongs to %s service, " +
-                "but also qualified for %s", configType, serviceName, 
entry.getKey()));
+                "but also qualified for %s", configType, 
getServiceOrNull(serviceId), getServiceOrNull(entry.getKey())));
             }
           } else {
-            serviceName = entry.getKey();
+            serviceId = entry.getKey();
           }
         }
       }
     }
-    LOG.info("Service {} returning", serviceName);
-    return serviceName;
+    if (serviceId == null) {
+      LOG.warn("Can't find serviceId for {}, there is a problem if there's no 
cluster-env", configTypes);
+    } else {
+      LOG.info("Service {} returning", getServiceOrNull(serviceId));
+    }
+
+    return serviceId;
   }
 
   @Override
-  public String getServiceByConfigType(String configType) {
-    for (Entry<String, String> entry : serviceConfigTypes.entries()) {
-      String serviceName = entry.getKey();
+  public Service getServiceByConfigType(String configType) {
+    for (Entry<Long, String> entry : serviceConfigTypes.entries()) {
+      Long serviceId = entry.getKey();
       String type = entry.getValue();
       if (StringUtils.equals(type, configType)) {
-        return serviceName;
+        return getServiceOrNull(serviceId);
       }
     }
     return null;
   }
 
   @Override
-  public ServiceConfigVersionResponse setServiceConfigVersion(String 
serviceName, Long version, String user, String note) throws AmbariException {
+  public ServiceConfigVersionResponse setServiceConfigVersion(Long serviceId, 
Long version, String user, String note) throws AmbariException {
     if (null == user) {
       throw new NullPointerException("User must be specified.");
     }
@@ -1897,7 +1950,7 @@ public class ClusterImpl implements Cluster {
     clusterGlobalLock.writeLock().lock();
     try {
       ServiceConfigVersionResponse serviceConfigVersionResponse = 
applyServiceConfigVersion(
-        serviceName, version, user, note);
+          serviceId, version, user, note);
       return serviceConfigVersionResponse;
     } finally {
       clusterGlobalLock.writeLock().unlock();
@@ -2008,12 +2061,12 @@ public class ClusterImpl implements Cluster {
   }
 
   @Override
-  public List<ServiceConfigVersionResponse> 
getActiveServiceConfigVersionResponse(String serviceName) {
+  public List<ServiceConfigVersionResponse> 
getActiveServiceConfigVersionResponse(Long serviceId) {
     clusterGlobalLock.readLock().lock();
     try {
       List<ServiceConfigEntity> activeServiceConfigVersionEntities = new 
ArrayList<>();
       List<ServiceConfigVersionResponse> activeServiceConfigVersionResponses = 
new ArrayList<>();
-      
activeServiceConfigVersionEntities.addAll(serviceConfigDAO.getLastServiceConfigsForService(getClusterId(),
 serviceName));
+      
activeServiceConfigVersionEntities.addAll(serviceConfigDAO.getLastServiceConfigsForService(getClusterId(),
 serviceId));
       for (ServiceConfigEntity serviceConfigEntity : 
activeServiceConfigVersionEntities) {
         ServiceConfigVersionResponse serviceConfigVersionResponse = 
getServiceConfigVersionResponseWithConfig(convertToServiceConfigVersionResponse(serviceConfigEntity),
 serviceConfigEntity);
         serviceConfigVersionResponse.setIsCurrent(true);
@@ -2044,17 +2097,6 @@ public class ClusterImpl implements Cluster {
     return serviceConfigVersionResponse;
   }
 
-
-  @RequiresSession
-  ServiceConfigVersionResponse getActiveServiceConfigVersion(String 
serviceName) {
-    ServiceConfigEntity lastServiceConfig = 
serviceConfigDAO.getLastServiceConfig(getClusterId(), serviceName);
-    if (lastServiceConfig == null) {
-      LOG.debug("No service config version found for service {}", serviceName);
-      return null;
-    }
-    return convertToServiceConfigVersionResponse(lastServiceConfig);
-  }
-
   @RequiresSession
   ServiceConfigVersionResponse 
convertToServiceConfigVersionResponse(ServiceConfigEntity serviceConfigEntity) {
     Long groupId = serviceConfigEntity.getGroupId();
@@ -2082,11 +2124,11 @@ public class ClusterImpl implements Cluster {
   }
 
   @Transactional
-  ServiceConfigVersionResponse applyServiceConfigVersion(String serviceName, 
Long serviceConfigVersion, String user,
+  ServiceConfigVersionResponse applyServiceConfigVersion(Long serviceId, Long 
serviceConfigVersion, String user,
                                                          String 
serviceConfigVersionNote) throws AmbariException {
-    ServiceConfigEntity serviceConfigEntity = 
serviceConfigDAO.findByServiceAndVersion(serviceName, serviceConfigVersion);
+    ServiceConfigEntity serviceConfigEntity = 
serviceConfigDAO.findByServiceAndVersion(serviceId, serviceConfigVersion);
     if (serviceConfigEntity == null) {
-      throw new ObjectNotFoundException("Service config version with 
serviceName={} and version={} not found");
+      throw new ObjectNotFoundException("Service config version with 
serviceId={} and version={} not found");
     }
 
     // disable all configs related to service
@@ -2096,7 +2138,7 @@ public class ClusterImpl implements Cluster {
       // In that case eclipselink will revert changes to cached, if entity has 
fluchGroup and it
       // needs to be refreshed. Actually we don't need to change same antities 
in few steps, so i
       // decided to filter out. duplicates and do not change them. It will be 
better for performance and bug will be fixed.
-      Collection<String> configTypes = serviceConfigTypes.get(serviceName);
+      Collection<String> configTypes = serviceConfigTypes.get(serviceId);
       List<ClusterConfigEntity> enabledConfigs = 
clusterDAO.getEnabledConfigsByTypes(clusterId, configTypes);
       List<ClusterConfigEntity> serviceConfigEntities = 
serviceConfigEntity.getClusterConfigEntities();
       ArrayList<ClusterConfigEntity> duplicatevalues = new 
ArrayList<>(serviceConfigEntities);
@@ -2145,12 +2187,14 @@ public class ClusterImpl implements Cluster {
 
     ClusterEntity clusterEntity = getClusterEntity();
     long nextServiceConfigVersion = 
serviceConfigDAO.findNextServiceConfigVersion(
-      clusterEntity.getClusterId(), serviceName);
+      clusterEntity.getClusterId(), serviceId);
 
     ServiceConfigEntity serviceConfigEntityClone = new ServiceConfigEntity();
     serviceConfigEntityClone.setCreateTimestamp(System.currentTimeMillis());
     serviceConfigEntityClone.setUser(user);
-    serviceConfigEntityClone.setServiceName(serviceName);
+    serviceConfigEntityClone.setServiceId(serviceId);
+    
serviceConfigEntityClone.setServiceGroupId(serviceConfigEntity.getServiceGroupId());
+    
serviceConfigEntityClone.setClusterServiceEntity(serviceConfigEntity.getClusterServiceEntity());
     serviceConfigEntityClone.setClusterEntity(clusterEntity);
     serviceConfigEntityClone.setStack(serviceConfigEntity.getStack());
     
serviceConfigEntityClone.setClusterConfigEntities(serviceConfigEntity.getClusterConfigEntities());
@@ -2166,21 +2210,21 @@ public class ClusterImpl implements Cluster {
   }
 
   @Transactional
-  ServiceConfigVersionResponse applyConfigs(Set<Config> configs, String user, 
String serviceConfigVersionNote) {
+  ServiceConfigVersionResponse applyConfigs(Set<Config> configs, String user, 
String serviceConfigVersionNote) throws AmbariException {
 
-    String serviceName = null;
+    Long serviceId = null;
     for (Config config : configs) {
-      for (Entry<String, String> entry : serviceConfigTypes.entries()) {
+      for (Entry<Long, String> entry : serviceConfigTypes.entries()) {
         if (StringUtils.equals(entry.getValue(), config.getType())) {
-          if (serviceName == null) {
-            serviceName = entry.getKey();
+          if (serviceId == null) {
+            serviceId = entry.getKey();
             break;
-          } else if (!serviceName.equals(entry.getKey())) {
+          } else if (!serviceId.equals(entry.getKey())) {
             String error = String.format("Updating configs for multiple 
services by a " +
                 "single API request isn't supported. Conflicting services %s 
and %s for %s",
-              serviceName, entry.getKey(), config.getType());
+                getServiceOrNull(serviceId).getName(), 
getServiceOrNull(entry.getKey()).getName(), config.getType());
             IllegalArgumentException exception = new 
IllegalArgumentException(error);
-            LOG.error(error + ", config version not created for {}", 
serviceName);
+            LOG.error(error + ", config version not created for {}", 
getServiceOrNull(serviceId).getName());
             throw exception;
           } else {
             break;
@@ -2208,7 +2252,7 @@ public class ClusterImpl implements Cluster {
 
     clusterEntity = clusterDAO.merge(clusterEntity);
 
-    if (serviceName == null) {
+    if (serviceId == null) {
       ArrayList<String> configTypes = new ArrayList<>();
       for (Config config : configs) {
         configTypes.add(config.getType());
@@ -2216,19 +2260,19 @@ public class ClusterImpl implements Cluster {
       LOG.error("No service found for config types '{}', service config 
version not created", configTypes);
       return null;
     } else {
-      return createServiceConfigVersion(serviceName, user, 
serviceConfigVersionNote);
+      return createServiceConfigVersion(serviceId, user, 
serviceConfigVersionNote);
     }
 
   }
 
-  private ServiceConfigVersionResponse createServiceConfigVersion(String 
serviceName, String user,
-                                                                  String 
serviceConfigVersionNote) {
+  private ServiceConfigVersionResponse createServiceConfigVersion(Long 
serviceId, String user,
+                                                                  String 
serviceConfigVersionNote) throws AmbariException {
     //create next service config version
-    return createServiceConfigVersion(serviceName, user, 
serviceConfigVersionNote, null);
+    return createServiceConfigVersion(serviceId, user, 
serviceConfigVersionNote, null);
   }
 
-  private List<ClusterConfigEntity> getClusterConfigEntitiesByService(String 
serviceName) {
-    Collection<String> configTypes = serviceConfigTypes.get(serviceName);
+  private List<ClusterConfigEntity> getClusterConfigEntitiesByService(Long 
serviceId) {
+    Collection<String> configTypes = serviceConfigTypes.get(serviceId);
     return clusterDAO.getEnabledConfigsByTypes(getClusterId(), new 
ArrayList<>(configTypes));
   }
 
@@ -2267,7 +2311,8 @@ public class ClusterImpl implements Cluster {
     for (HostConfigMapping mappingEntity : mappingEntities) {
       DesiredConfig desiredConfig = new DesiredConfig();
       desiredConfig.setTag(mappingEntity.getVersion());
-      desiredConfig.setServiceName(mappingEntity.getServiceName());
+      desiredConfig.setServiceId(mappingEntity.getServiceId());
+      desiredConfig.setServiceGroupId(mappingEntity.getServiceGroupId());
 
       
desiredConfigsByHost.get(mappingEntity.getHostId()).put(mappingEntity.getType(),
 desiredConfig);
     }
@@ -2642,7 +2687,7 @@ public class ClusterImpl implements Cluster {
    */
   @Override
   @Transactional
-  public void applyLatestConfigurations(StackId stackId, String serviceName) {
+  public void applyLatestConfigurations(StackId stackId, Long serviceId) {
     clusterGlobalLock.writeLock().lock();
 
     try {
@@ -2655,7 +2700,7 @@ public class ClusterImpl implements Cluster {
       // find the latest configurations for the service
       Set<String> configTypesForService = new HashSet<>();
       List<ServiceConfigEntity> latestServiceConfigs = 
serviceConfigDAO.getLastServiceConfigsForService(
-        getClusterId(), serviceName);
+        getClusterId(), serviceId);
 
       // process the current service configurations
       for (ServiceConfigEntity serviceConfig : latestServiceConfigs) {
@@ -2704,7 +2749,7 @@ public class ClusterImpl implements Cluster {
 
       LOG.info(
         "Applied latest configurations for {} on stack {}. The the following 
types were modified: {}",
-        serviceName, stackId, StringUtils.join(configTypesForService, ','));
+          getServiceOrNull(serviceId), stackId, 
StringUtils.join(configTypesForService, ','));
 
     } finally {
       clusterGlobalLock.writeLock().unlock();
@@ -2739,12 +2784,12 @@ public class ClusterImpl implements Cluster {
    *
    * @param stackId
    *          the stack to remove configurations for (not {@code null}).
-   * @param serviceName
-   *          the service name (not {@code null}).
+   * @param serviceId
+   *          the service ID (not {@code null}).
    * @see #clusterGlobalLock
    */
   @Transactional
-  void removeAllConfigsForStack(StackId stackId, String serviceName) {
+  void removeAllConfigsForStack(StackId stackId, Long serviceId) {
     ClusterEntity clusterEntity = getClusterEntity();
 
     // make sure the entity isn't stale in the current unit of work.
@@ -2764,7 +2809,7 @@ public class ClusterImpl implements Cluster {
 
     // get the service configs only for the service
     List<ServiceConfigEntity> serviceConfigs = 
serviceConfigDAO.getServiceConfigsForServiceAndStack(
-      clusterId, stackId, serviceName);
+      clusterId, stackId, serviceId);
 
     // remove all service configurations and associated configs
     for (ServiceConfigEntity serviceConfig : serviceConfigs) {
@@ -2784,7 +2829,7 @@ public class ClusterImpl implements Cluster {
     clusterEntity.setClusterConfigEntities(allClusterConfigEntities);
     clusterEntity = clusterDAO.merge(clusterEntity);
 
-    LOG.info("Removed the following configuration types for {} on stack {}: 
{}", serviceName,
+    LOG.info("Removed the following configuration types for {} on stack {}: 
{}", getServiceOrNull(serviceId).getName(),
       stackId, StringUtils.join(removedConfigurationTypes, ','));
   }
 
@@ -2792,10 +2837,10 @@ public class ClusterImpl implements Cluster {
    * {@inheritDoc}
    */
   @Override
-  public void removeConfigurations(StackId stackId, String serviceName) {
+  public void removeConfigurations(StackId stackId, Long serviceId) {
     clusterGlobalLock.writeLock().lock();
     try {
-      removeAllConfigsForStack(stackId, serviceName);
+      removeAllConfigsForStack(stackId, serviceId);
       cacheConfigurations();
     } finally {
       clusterGlobalLock.writeLock().unlock();
@@ -2830,17 +2875,6 @@ public class ClusterImpl implements Cluster {
 
   private void loadStackVersion() {
     desiredStackVersion = new StackId(getClusterEntity().getDesiredStack());
-
-    if (!StringUtils.isEmpty(desiredStackVersion.getStackName())
-      && !StringUtils.isEmpty(desiredStackVersion.getStackVersion())) {
-      try {
-        loadServiceConfigTypes();
-      } catch (AmbariException e) {
-        // TODO recheck wrapping exception here, required for lazy loading 
after
-        // invalidation
-        throw new RuntimeException(e);
-      }
-    }
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java
index 0393145..324f43c 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroup.java
@@ -134,7 +134,14 @@ public interface ConfigGroup {
   /**
    * Name of service which config group is wired to
    */
-  String getServiceName();
+  Long getServiceId();
 
-  void setServiceName(String serviceName);
+  void setServiceId(Long serviceId);
+
+  /**
+   * Id of service group which config group is wired to
+   */
+  Long getServiceGroupId();
+
+  void setServiceGroupId(Long serviceGroupId);
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java
index f6fecce..06f9e6d 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupFactory.java
@@ -33,7 +33,8 @@ public interface ConfigGroupFactory {
    * Creates and saves a new {@link ConfigGroup}.
    */
   ConfigGroup createNew(@Assisted("cluster") Cluster cluster,
-      @Assisted("serviceName") @Nullable String serviceName, @Assisted("name") 
String name,
+      @Assisted("serviceGroupId") @Nullable Long serviceGroupId,
+      @Assisted("serviceId") @Nullable Long serviceId, @Assisted("name") 
String name,
       @Assisted("tag") String tag, @Assisted("description") String description,
       @Assisted("configs") Map<String, Config> configs, @Assisted("hosts") 
Map<Long, Host> hosts);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
index d1fbf1d..33902af 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/configgroup/ConfigGroupImpl.java
@@ -36,12 +36,14 @@ import 
org.apache.ambari.server.controller.ConfigGroupResponse;
 import 
org.apache.ambari.server.controller.internal.ConfigurationResourceProvider;
 import org.apache.ambari.server.logging.LockFactory;
 import org.apache.ambari.server.orm.dao.ClusterDAO;
+import org.apache.ambari.server.orm.dao.ClusterServiceDAO;
 import org.apache.ambari.server.orm.dao.ConfigGroupConfigMappingDAO;
 import org.apache.ambari.server.orm.dao.ConfigGroupDAO;
 import org.apache.ambari.server.orm.dao.ConfigGroupHostMappingDAO;
 import org.apache.ambari.server.orm.dao.HostDAO;
 import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
 import org.apache.ambari.server.orm.entities.ClusterEntity;
+import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
 import org.apache.ambari.server.orm.entities.ConfigGroupConfigMappingEntity;
 import org.apache.ambari.server.orm.entities.ConfigGroupEntity;
 import org.apache.ambari.server.orm.entities.ConfigGroupHostMappingEntity;
@@ -67,7 +69,8 @@ public class ConfigGroupImpl implements ConfigGroup {
   private ConcurrentMap<Long, Host> m_hosts;
   private ConcurrentMap<String, Config> m_configurations;
   private String configGroupName;
-  private String serviceName;
+  private Long serviceId;
+  private Long serviceGroupId;
   private long configGroupId;
 
   /**
@@ -91,17 +94,20 @@ public class ConfigGroupImpl implements ConfigGroup {
 
   private final ClusterDAO clusterDAO;
 
+  private final ClusterServiceDAO clusterServiceDAO;
+
   private final ConfigFactory configFactory;
 
   @AssistedInject
   public ConfigGroupImpl(@Assisted("cluster") Cluster cluster,
-      @Assisted("serviceName") @Nullable String serviceName, @Assisted("name") 
String name,
-      @Assisted("tag") String tag, @Assisted("description") String description,
-      @Assisted("configs") Map<String, Config> configurations,
-      @Assisted("hosts") Map<Long, Host> hosts, Clusters clusters, 
ConfigFactory configFactory,
-      ClusterDAO clusterDAO, HostDAO hostDAO, ConfigGroupDAO configGroupDAO,
-      ConfigGroupConfigMappingDAO configGroupConfigMappingDAO,
-      ConfigGroupHostMappingDAO configGroupHostMappingDAO, LockFactory 
lockFactory)
+                         @Assisted("serviceGroupId") @Nullable Long 
serviceGroupId,
+                         @Assisted("serviceId") @Nullable Long serviceId, 
@Assisted("name") String name,
+                         @Assisted("tag") String tag, @Assisted("description") 
String description,
+                         @Assisted("configs") Map<String, Config> 
configurations,
+                         @Assisted("hosts") Map<Long, Host> hosts, Clusters 
clusters, ConfigFactory configFactory,
+                         ClusterDAO clusterDAO, HostDAO hostDAO, 
ConfigGroupDAO configGroupDAO,
+                         ConfigGroupConfigMappingDAO 
configGroupConfigMappingDAO,
+                         ConfigGroupHostMappingDAO configGroupHostMappingDAO, 
ClusterServiceDAO clusterServiceDAO, LockFactory lockFactory)
       throws AmbariException {
 
     this.configFactory = configFactory;
@@ -110,11 +116,13 @@ public class ConfigGroupImpl implements ConfigGroup {
     this.configGroupDAO = configGroupDAO;
     this.configGroupConfigMappingDAO = configGroupConfigMappingDAO;
     this.configGroupHostMappingDAO = configGroupHostMappingDAO;
+    this.clusterServiceDAO = clusterServiceDAO;
 
     hostLock = lockFactory.newReadWriteLock(hostLockLabel);
 
     this.cluster = cluster;
-    this.serviceName = serviceName;
+    this.serviceGroupId = serviceGroupId;
+    this.serviceId = serviceId;
     configGroupName = name;
 
     ConfigGroupEntity configGroupEntity = new ConfigGroupEntity();
@@ -122,7 +130,10 @@ public class ConfigGroupImpl implements ConfigGroup {
     configGroupEntity.setGroupName(name);
     configGroupEntity.setTag(tag);
     configGroupEntity.setDescription(description);
-    configGroupEntity.setServiceName(serviceName);
+    configGroupEntity.setServiceId(serviceId);
+    configGroupEntity.setServiceGroupId(serviceGroupId);
+    ClusterServiceEntity clusterServiceEntity = 
clusterServiceDAO.findById(cluster.getClusterId(), serviceGroupId, serviceId);
+    configGroupEntity.setClusterServiceEntity(clusterServiceEntity);
 
     m_hosts = hosts == null ? new ConcurrentHashMap<>()
         : new ConcurrentHashMap<>(hosts);
@@ -140,7 +151,7 @@ public class ConfigGroupImpl implements ConfigGroup {
       Clusters clusters, ConfigFactory configFactory,
       ClusterDAO clusterDAO, HostDAO hostDAO, ConfigGroupDAO configGroupDAO,
       ConfigGroupConfigMappingDAO configGroupConfigMappingDAO,
-      ConfigGroupHostMappingDAO configGroupHostMappingDAO, LockFactory 
lockFactory) {
+      ConfigGroupHostMappingDAO configGroupHostMappingDAO, ClusterServiceDAO 
clusterServiceDAO, LockFactory lockFactory) {
 
     this.configFactory = configFactory;
     this.clusterDAO = clusterDAO;
@@ -148,13 +159,15 @@ public class ConfigGroupImpl implements ConfigGroup {
     this.configGroupDAO = configGroupDAO;
     this.configGroupConfigMappingDAO = configGroupConfigMappingDAO;
     this.configGroupHostMappingDAO = configGroupHostMappingDAO;
+    this.clusterServiceDAO = clusterServiceDAO;
 
     hostLock = lockFactory.newReadWriteLock(hostLockLabel);
 
     this.cluster = cluster;
     configGroupId = configGroupEntity.getGroupId();
     configGroupName = configGroupEntity.getGroupName();
-    serviceName = configGroupEntity.getServiceName();
+    serviceId = configGroupEntity.getServiceId();
+    serviceGroupId = configGroupEntity.getServiceGroupId();
 
     m_configurations = new ConcurrentHashMap<>();
     m_hosts = new ConcurrentHashMap<>();
@@ -347,6 +360,10 @@ public class ConfigGroupImpl implements ConfigGroup {
     ClusterEntity clusterEntity = clusterDAO.findById(cluster.getClusterId());
     configGroupEntity.setClusterEntity(clusterEntity);
     configGroupEntity.setTimestamp(System.currentTimeMillis());
+    configGroupEntity.setServiceGroupId(serviceGroupId);
+    configGroupEntity.setServiceId(serviceId);
+    ClusterServiceEntity clusterServiceEntity = 
clusterServiceDAO.findById(cluster.getClusterId(), serviceGroupId, serviceId);
+    configGroupEntity.setClusterServiceEntity(clusterServiceEntity);
     configGroupDAO.create(configGroupEntity);
 
     configGroupId = configGroupEntity.getGroupId();
@@ -416,8 +433,7 @@ public class ConfigGroupImpl implements ConfigGroup {
           (cluster.getClusterId(), config.getType(), config.getTag());
 
         if (clusterConfigEntity == null) {
-          String serviceName = getServiceName();
-          Service service = cluster.getService(serviceName);
+          Service service = cluster.getService(serviceId);
 
           config = configFactory.createNew(service.getDesiredStackId(), 
cluster, config.getType(),
               config.getTag(), config.getProperties(), 
config.getPropertiesAttributes());
@@ -507,17 +523,30 @@ public class ConfigGroupImpl implements ConfigGroup {
   }
 
   @Override
-  public String getServiceName() {
-    return serviceName;
+  public Long getServiceId() {
+    return serviceId;
+  }
+
+  @Override
+  public void setServiceId(Long serviceId) {
+    ConfigGroupEntity configGroupEntity = getConfigGroupEntity();
+    configGroupEntity.setServiceId(serviceId);
+    configGroupDAO.merge(configGroupEntity);
+
+    this.serviceId = serviceId;
+  }
+  @Override
+  public Long getServiceGroupId() {
+    return serviceGroupId;
   }
 
   @Override
-  public void setServiceName(String serviceName) {
+  public void setServiceGroupId(Long serviceGroupId) {
     ConfigGroupEntity configGroupEntity = getConfigGroupEntity();
-    configGroupEntity.setServiceName(serviceName);
+    configGroupEntity.setServiceGroupId(serviceGroupId);
     configGroupDAO.merge(configGroupEntity);
 
-    this.serviceName = serviceName;
+    this.serviceId = serviceGroupId;
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java 
b/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
index 4285ba9..7ec3112 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
@@ -1021,7 +1021,8 @@ public class HostImpl implements Host {
 
       DesiredConfig dc = new DesiredConfig();
       dc.setTag(e.getVersion());
-      dc.setServiceName(e.getServiceName());
+      dc.setServiceGroupId(e.getServiceGroupId());
+      dc.setServiceId(e.getServiceId());
       map.put(e.getType(), dc);
 
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
index e5eb11c..8a32265 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
@@ -712,7 +712,7 @@ public class AmbariContext {
       });
 
       ConfigGroupRequest request = new ConfigGroupRequest(null, clusterName,
-        absoluteGroupName, service.getName(), service.getName(), "Host Group 
Configuration",
+        absoluteGroupName, service.getName(), service.getServiceGroupName(), 
service.getName(), "Host Group Configuration",
         Sets.newHashSet(filteredGroupHosts), serviceConfigs);
 
       // get the config group provider and create config group resource

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java 
b/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
index 46c75c5..317e29f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
@@ -149,4 +149,11 @@ public class Service implements Configurable {
       ", stackId='" + stackId + '\'' +
       '}';
   }
+
+  public String getServiceGroupName() {
+    if (serviceGroup != null) {
+      return serviceGroup.getName();
+    }
+    return null;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
index a2e2f6f..5a2b92a 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
@@ -555,7 +555,7 @@ public abstract class AbstractUpgradeCatalog implements 
UpgradeCatalog {
         }
 
         Multimap<ConfigUpdateType, Entry<String, String>> propertiesToLog = 
ArrayListMultimap.create();
-        String serviceName = cluster.getServiceByConfigType(configType);
+        String serviceName = 
cluster.getServiceByConfigType(configType).getName();
 
         Map<String, String> mergedProperties =
           mergeProperties(oldConfigProperties, properties, updateIfExists, 
propertiesToLog);

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
index 36ff3b7..e1e7c9e 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -122,20 +122,6 @@ CREATE TABLE ambari_configuration (
   CONSTRAINT FK_ambari_conf_conf_base FOREIGN KEY (id) REFERENCES 
configuration_base (id)
 );
 
-CREATE TABLE serviceconfig (
-  service_config_id BIGINT NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
-  version BIGINT NOT NULL,
-  create_timestamp BIGINT NOT NULL,
-  stack_id BIGINT NOT NULL,
-  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  group_id BIGINT,
-  note VARCHAR(3000),
-  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
-  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
-  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, 
version));
-
 CREATE TABLE hosts (
   host_id BIGINT NOT NULL,
   host_name VARCHAR(255) NOT NULL,
@@ -156,20 +142,6 @@ CREATE TABLE hosts (
   CONSTRAINT PK_hosts PRIMARY KEY (host_id),
   CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
-CREATE TABLE serviceconfighosts (
-  service_config_id BIGINT NOT NULL,
-  host_id BIGINT NOT NULL,
-  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
-  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
-  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
-CREATE TABLE serviceconfigmapping (
-  service_config_id BIGINT NOT NULL,
-  config_id BIGINT NOT NULL,
-  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, 
config_id),
-  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
-  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
 CREATE TABLE servicegroups (
   id BIGINT NOT NULL,
   service_group_name VARCHAR(255) NOT NULL,
@@ -207,6 +179,36 @@ CREATE TABLE servicedependencies (
   CONSTRAINT FK_servicedependencies_service_group_cluster_id FOREIGN KEY 
(service_id, service_group_id, service_cluster_id) REFERENCES clusterservices  
(id, service_group_id, cluster_id));
   CONSTRAINT FK_servicedependencies_dependent_service_group_cluster_id FOREIGN 
KEY (dependent_service_id, dependent_service_group_id, 
dependent_service_cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
+CREATE TABLE serviceconfig (
+  service_config_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  version BIGINT NOT NULL,
+  create_timestamp BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
+  group_id BIGINT,
+  note VARCHAR(3000),
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
+  CONSTRAINT FK_serviceconfig_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_id, version));
+
+CREATE TABLE serviceconfighosts (
+  service_config_id BIGINT NOT NULL,
+  host_id BIGINT NOT NULL,
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
+CREATE TABLE serviceconfigmapping (
+  service_config_id BIGINT NOT NULL,
+  config_id BIGINT NOT NULL,
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, 
config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
@@ -499,12 +501,14 @@ CREATE TABLE hostconfigmapping (
   host_id BIGINT NOT NULL,
   type_name VARCHAR(255) NOT NULL,
   version_tag VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255),
+  service_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
   create_timestamp BIGINT NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   CONSTRAINT PK_hostconfigmapping PRIMARY KEY (cluster_id, host_id, type_name, 
create_timestamp),
   CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id));
 
 CREATE TABLE metainfo (
@@ -525,8 +529,10 @@ CREATE TABLE configgroup (
   tag VARCHAR(1024) NOT NULL,
   description VARCHAR(1024),
   create_timestamp BIGINT NOT NULL,
-  service_name VARCHAR(255),
+  service_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
   CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE confgroupclusterconfigmapping (

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 70a6543..b438e69 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -141,20 +141,6 @@ CREATE TABLE ambari_configuration (
   CONSTRAINT FK_ambari_conf_conf_base FOREIGN KEY (id) REFERENCES 
configuration_base (id)
 );
 
-CREATE TABLE serviceconfig (
-  service_config_id BIGINT NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
-  version BIGINT NOT NULL,
-  create_timestamp BIGINT NOT NULL,
-  stack_id BIGINT NOT NULL,
-  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  group_id BIGINT,
-  note LONGTEXT,
-  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
-  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
-  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, 
version));
-
 CREATE TABLE hosts (
   host_id BIGINT NOT NULL,
   host_name VARCHAR(255) NOT NULL,
@@ -175,20 +161,6 @@ CREATE TABLE hosts (
   CONSTRAINT PK_hosts PRIMARY KEY (host_id),
   CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
-CREATE TABLE serviceconfighosts (
-  service_config_id BIGINT NOT NULL,
-  host_id BIGINT NOT NULL,
-  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
-  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
-  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
-CREATE TABLE serviceconfigmapping (
-  service_config_id BIGINT NOT NULL,
-  config_id BIGINT NOT NULL,
-  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, 
config_id),
-  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
-  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
 CREATE TABLE servicegroups (
   id BIGINT NOT NULL,
   service_group_name VARCHAR(255) NOT NULL,
@@ -226,6 +198,36 @@ CREATE TABLE servicedependencies (
   CONSTRAINT FK_servicedependencies_service_group_cluster_id FOREIGN KEY 
(service_id, service_group_id, service_cluster_id) REFERENCES clusterservices  
(id, service_group_id, cluster_id));
   CONSTRAINT FK_servicedependencies_dependent_service_group_cluster_id FOREIGN 
KEY (dependent_service_id, dependent_service_group_id, 
dependent_service_cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
+CREATE TABLE serviceconfig (
+  service_config_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  version BIGINT NOT NULL,
+  create_timestamp BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
+  group_id BIGINT,
+  note LONGTEXT,
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
+  CONSTRAINT FK_serviceconfig_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_id, version));
+
+CREATE TABLE serviceconfighosts (
+  service_config_id BIGINT NOT NULL,
+  host_id BIGINT NOT NULL,
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
+CREATE TABLE serviceconfigmapping (
+  service_config_id BIGINT NOT NULL,
+  config_id BIGINT NOT NULL,
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, 
config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
@@ -511,11 +513,13 @@ CREATE TABLE hostconfigmapping (
   cluster_id BIGINT NOT NULL,
   type_name VARCHAR(255) NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
-  service_name VARCHAR(255),
+  service_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
   version_tag VARCHAR(255) NOT NULL,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   CONSTRAINT PK_hostconfigmapping PRIMARY KEY (create_timestamp, host_id, 
cluster_id, type_name),
   CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id));
 
 CREATE TABLE metainfo (
@@ -542,8 +546,10 @@ CREATE TABLE configgroup (
   tag VARCHAR(1024) NOT NULL,
   description VARCHAR(1024),
   create_timestamp BIGINT NOT NULL,
-  service_name VARCHAR(255),
+  service_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
   CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE confgroupclusterconfigmapping (

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index 7c5f0fd..aab7f95 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -122,21 +122,6 @@ CREATE TABLE ambari_configuration (
   CONSTRAINT FK_ambari_conf_conf_base FOREIGN KEY (id) REFERENCES 
configuration_base (id)
 );
 
-CREATE TABLE serviceconfig (
-  service_config_id NUMBER(19) NOT NULL,
-  cluster_id NUMBER(19) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
-  version NUMBER(19) NOT NULL,
-  create_timestamp NUMBER(19) NOT NULL,
-  stack_id NUMBER(19) NOT NULL,
-  user_name VARCHAR(255) DEFAULT '_db' NOT NULL,
-  group_id NUMBER(19),
-  note CLOB,
-  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
-  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
-  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, 
version));
-
-
 CREATE TABLE hosts (
   host_id NUMBER(19) NOT NULL,
   host_name VARCHAR2(255) NOT NULL,
@@ -157,20 +142,6 @@ CREATE TABLE hosts (
   CONSTRAINT PK_hosts PRIMARY KEY (host_id),
   CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
-CREATE TABLE serviceconfighosts (
-  service_config_id NUMBER(19) NOT NULL,
-  host_id NUMBER(19) NOT NULL,
-  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
-  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
-  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
-CREATE TABLE serviceconfigmapping (
-  service_config_id NUMBER(19) NOT NULL,
-  config_id NUMBER(19) NOT NULL,
-  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, 
config_id),
-  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
-  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
 CREATE TABLE servicegroups (
   id NUMBER(19) NOT NULL,
   service_group_name VARCHAR2(255) NOT NULL,
@@ -208,6 +179,36 @@ CREATE TABLE servicedependencies (
   CONSTRAINT FK_servicedependencies_service_group_cluster_id FOREIGN KEY 
(service_id, service_group_id, service_cluster_id) REFERENCES clusterservices  
(id, service_group_id, cluster_id));
   CONSTRAINT FK_servicedependencies_dependent_service_group_cluster_id FOREIGN 
KEY (dependent_service_id, dependent_service_group_id, 
dependent_service_cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
+CREATE TABLE serviceconfig (
+  service_config_id NUMBER(19) NOT NULL,
+  cluster_id NUMBER(19) NOT NULL,
+  service_id NUMBER(19) NOT NULL,
+  service_group_id NUMBER(19) NOT NULL,
+  version NUMBER(19) NOT NULL,
+  create_timestamp NUMBER(19) NOT NULL,
+  stack_id NUMBER(19) NOT NULL,
+  user_name VARCHAR(255) DEFAULT '_db' NOT NULL,
+  group_id NUMBER(19),
+  note CLOB,
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
+  CONSTRAINT FK_serviceconfig_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_id, version));
+
+CREATE TABLE serviceconfighosts (
+  service_config_id NUMBER(19) NOT NULL,
+  host_id NUMBER(19) NOT NULL,
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
+CREATE TABLE serviceconfigmapping (
+  service_config_id NUMBER(19) NOT NULL,
+  config_id NUMBER(19) NOT NULL,
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, 
config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
 CREATE TABLE clusterstate (
   cluster_id NUMBER(19) NOT NULL,
   current_cluster_state VARCHAR2(255) NULL,
@@ -493,11 +494,13 @@ CREATE TABLE hostconfigmapping (
   cluster_id NUMBER(19) NOT NULL,
   type_name VARCHAR2(255) NOT NULL,
   selected NUMBER(10) NOT NULL,
-  service_name VARCHAR2(255) NULL,
+  service_id NUMBER(19) NOT NULL,
+  service_group_id NUMBER(19) NOT NULL,
   version_tag VARCHAR2(255) NOT NULL,
   user_name VARCHAR(255) DEFAULT '_db',
   CONSTRAINT PK_hostconfigmapping PRIMARY KEY (create_timestamp, host_id, 
cluster_id, type_name),
   CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id));
 
 CREATE TABLE metainfo (
@@ -524,8 +527,10 @@ CREATE TABLE configgroup (
   tag VARCHAR2(1024) NOT NULL,
   description VARCHAR2(1024),
   create_timestamp NUMBER(19) NOT NULL,
-  service_name VARCHAR(255),
+  service_id NUMBER(19) NOT NULL,
+  service_group_id NUMBER(19) NOT NULL,
   CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE confgroupclusterconfigmapping (

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index dfef1ce..8832818 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -123,20 +123,6 @@ CREATE TABLE clusterconfig (
   CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag),
   CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version));
 
-CREATE TABLE serviceconfig (
-  service_config_id BIGINT NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
-  version BIGINT NOT NULL,
-  create_timestamp BIGINT NOT NULL,
-  stack_id BIGINT NOT NULL,
-  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  group_id BIGINT,
-  note TEXT,
-  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
-  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
-  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, 
version));
-
 CREATE TABLE hosts (
   host_id BIGINT NOT NULL,
   host_name VARCHAR(255) NOT NULL,
@@ -157,20 +143,6 @@ CREATE TABLE hosts (
   CONSTRAINT PK_hosts PRIMARY KEY (host_id),
   CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
-CREATE TABLE serviceconfighosts (
-  service_config_id BIGINT NOT NULL,
-  host_id BIGINT NOT NULL,
-  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
-  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
-  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
-CREATE TABLE serviceconfigmapping (
-  service_config_id BIGINT NOT NULL,
-  config_id BIGINT NOT NULL,
-  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, 
config_id),
-  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
-  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
 CREATE TABLE servicegroups (
   id BIGINT NOT NULL,
   service_group_name VARCHAR(255) NOT NULL,
@@ -208,6 +180,36 @@ CREATE TABLE servicedependencies (
   CONSTRAINT FK_servicedependencies_service_group_cluster_id FOREIGN KEY 
(service_id, service_group_id, service_cluster_id) REFERENCES clusterservices  
(id, service_group_id, cluster_id));
   CONSTRAINT FK_servicedependencies_dependent_service_group_cluster_id FOREIGN 
KEY (dependent_service_id, dependent_service_group_id, 
dependent_service_cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
+CREATE TABLE serviceconfig (
+  service_config_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
+  version BIGINT NOT NULL,
+  create_timestamp BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
+  group_id BIGINT,
+  note TEXT,
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
+  CONSTRAINT FK_serviceconfig_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_id, version ));
+
+CREATE TABLE serviceconfighosts (
+  service_config_id BIGINT NOT NULL,
+  host_id BIGINT NOT NULL,
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
+CREATE TABLE serviceconfigmapping (
+  service_config_id BIGINT NOT NULL,
+  config_id BIGINT NOT NULL,
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, 
config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
@@ -499,12 +501,14 @@ CREATE TABLE hostconfigmapping (
   host_id BIGINT NOT NULL,
   type_name VARCHAR(255) NOT NULL,
   version_tag VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255),
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   create_timestamp BIGINT NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   CONSTRAINT PK_hostconfigmapping PRIMARY KEY (cluster_id, host_id, type_name, 
create_timestamp),
   CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id));
 
 CREATE TABLE metainfo (
@@ -524,8 +528,10 @@ CREATE TABLE configgroup (
   tag VARCHAR(1024) NOT NULL,
   description VARCHAR(1024),
   create_timestamp BIGINT NOT NULL,
-  service_name VARCHAR(255),
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE confgroupclusterconfigmapping (

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
index 870555d..135707b 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -121,20 +121,6 @@ CREATE TABLE ambari_configuration (
   CONSTRAINT FK_ambari_conf_conf_base FOREIGN KEY (id) REFERENCES 
configuration_base (id)
 );
 
-CREATE TABLE serviceconfig (
-  service_config_id NUMERIC(19) NOT NULL,
-  cluster_id NUMERIC(19) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
-  version NUMERIC(19) NOT NULL,
-  create_timestamp NUMERIC(19) NOT NULL,
-  stack_id NUMERIC(19) NOT NULL,
-  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  group_id NUMERIC(19),
-  note TEXT,
-  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
-  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
-  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, 
version));
-
 CREATE TABLE hosts (
   host_id NUMERIC(19) NOT NULL,
   host_name VARCHAR(255) NOT NULL,
@@ -155,20 +141,6 @@ CREATE TABLE hosts (
   CONSTRAINT PK_hosts PRIMARY KEY (host_id),
   CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
-CREATE TABLE serviceconfighosts (
-  service_config_id NUMERIC(19) NOT NULL,
-  host_id NUMERIC(19) NOT NULL,
-  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
-  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
-  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
-CREATE TABLE serviceconfigmapping (
-  service_config_id NUMERIC(19) NOT NULL,
-  config_id NUMERIC(19) NOT NULL,
-  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, 
config_id),
-  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
-  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
 CREATE TABLE servicegroups (
   id NUMERIC(19) NOT NULL,
   service_group_name VARCHAR(255) NOT NULL,
@@ -206,6 +178,36 @@ CREATE TABLE servicedependencies (
   CONSTRAINT FK_servicedependencies_service_group_cluster_id FOREIGN KEY 
(service_id, service_group_id, service_cluster_id) REFERENCES clusterservices  
(id, service_group_id, cluster_id));
   CONSTRAINT FK_servicedependencies_dependent_service_group_cluster_id FOREIGN 
KEY (dependent_service_id, dependent_service_group_id, 
dependent_service_cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
+CREATE TABLE serviceconfig (
+  service_config_id NUMERIC(19) NOT NULL,
+  cluster_id NUMERIC(19) NOT NULL,
+  service_id NUMERIC(19) NOT NULL,
+  service_group_id NUMERIC(19) NOT NULL,
+  version NUMERIC(19) NOT NULL,
+  create_timestamp NUMERIC(19) NOT NULL,
+  stack_id NUMERIC(19) NOT NULL,
+  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
+  group_id NUMERIC(19),
+  note TEXT,
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
+  CONSTRAINT FK_serviceconfig_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_id, version));
+
+CREATE TABLE serviceconfighosts (
+  service_config_id NUMERIC(19) NOT NULL,
+  host_id NUMERIC(19) NOT NULL,
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
+CREATE TABLE serviceconfigmapping (
+  service_config_id NUMERIC(19) NOT NULL,
+  config_id NUMERIC(19) NOT NULL,
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, 
config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
 CREATE TABLE clusterstate (
   cluster_id NUMERIC(19) NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
@@ -489,11 +491,13 @@ CREATE TABLE hostconfigmapping (
   cluster_id NUMERIC(19) NOT NULL,
   type_name VARCHAR(255) NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
-  service_name VARCHAR(255),
+  service_id NUMERIC(19) NOT NULL,
+  service_group_id NUMERIC(19) NOT NULL,
   version_tag VARCHAR(255) NOT NULL,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   CONSTRAINT PK_hostconfigmapping PRIMARY KEY (create_timestamp, host_id, 
cluster_id, type_name),
   CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id));
 
 CREATE TABLE metainfo (
@@ -520,8 +524,10 @@ CREATE TABLE configgroup (
   tag VARCHAR(1024) NOT NULL,
   description VARCHAR(1024),
   create_timestamp NUMERIC(19) NOT NULL,
-  service_name VARCHAR(255),
+  service_id NUMERIC(19) NOT NULL,
+  service_group_id NUMERIC(19) NOT NULL,
   CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE confgroupclusterconfigmapping (

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
index 641b959..7d93aad 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -135,20 +135,6 @@ CREATE TABLE ambari_configuration (
   CONSTRAINT FK_ambari_conf_conf_base FOREIGN KEY (id) REFERENCES 
configuration_base (id)
 );
 
-CREATE TABLE serviceconfig (
-  service_config_id BIGINT NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
-  version BIGINT NOT NULL,
-  create_timestamp BIGINT NOT NULL,
-  stack_id BIGINT NOT NULL,
-  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  group_id BIGINT,
-  note VARCHAR(MAX),
-  CONSTRAINT PK_serviceconfig PRIMARY KEY CLUSTERED (service_config_id),
-  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
-  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, 
version));
-
 CREATE TABLE hosts (
   host_id BIGINT NOT NULL,
   host_name VARCHAR(255) NOT NULL,
@@ -169,20 +155,6 @@ CREATE TABLE hosts (
   CONSTRAINT PK_hosts PRIMARY KEY CLUSTERED (host_id),
   CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
-CREATE TABLE serviceconfighosts (
-  service_config_id BIGINT NOT NULL,
-  host_id BIGINT NOT NULL,
-  CONSTRAINT PK_serviceconfighosts PRIMARY KEY CLUSTERED (service_config_id, 
host_id),
-  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
-  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
-CREATE TABLE serviceconfigmapping (
-  service_config_id BIGINT NOT NULL,
-  config_id BIGINT NOT NULL,
-  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY CLUSTERED (service_config_id, 
config_id),
-  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
-  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
-
 CREATE TABLE servicegroups (
   id BIGINT NOT NULL,
   service_group_name VARCHAR(255) NOT NULL,
@@ -220,6 +192,36 @@ CREATE TABLE servicedependencies (
   CONSTRAINT FK_servicedependencies_service_group_cluster_id FOREIGN KEY 
(service_id, service_group_id, service_cluster_id) REFERENCES clusterservices  
(id, service_group_id, cluster_id));
   CONSTRAINT FK_servicedependencies_dependent_service_group_cluster_id FOREIGN 
KEY (dependent_service_id, dependent_service_group_id, 
dependent_service_cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
+CREATE TABLE serviceconfig (
+  service_config_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  version BIGINT NOT NULL,
+  create_timestamp BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
+  group_id BIGINT,
+  note VARCHAR(MAX),
+  CONSTRAINT PK_serviceconfig PRIMARY KEY CLUSTERED (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES 
stack(stack_id),
+  CONSTRAINT FK_serviceconfig_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, 
version));
+
+CREATE TABLE serviceconfighosts (
+  service_config_id BIGINT NOT NULL,
+  host_id BIGINT NOT NULL,
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY CLUSTERED (service_config_id, 
host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES 
hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
+CREATE TABLE serviceconfigmapping (
+  service_config_id BIGINT NOT NULL,
+  config_id BIGINT NOT NULL,
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY CLUSTERED (service_config_id, 
config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES 
clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES 
serviceconfig(service_config_id));
+
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
@@ -502,12 +504,14 @@ CREATE TABLE hostconfigmapping (
   host_id BIGINT NOT NULL,
   type_name VARCHAR(255) NOT NULL,
   version_tag VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255),
+  service_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
   create_timestamp BIGINT NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   CONSTRAINT PK_hostconfigmapping PRIMARY KEY CLUSTERED (cluster_id, host_id, 
type_name, create_timestamp),
   CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id));
 
 CREATE TABLE metainfo (
@@ -528,8 +532,10 @@ CREATE TABLE configgroup (
   tag VARCHAR(1024) NOT NULL,
   description VARCHAR(1024),
   create_timestamp BIGINT NOT NULL,
-  service_name VARCHAR(255),
+  service_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
   CONSTRAINT PK_configgroup PRIMARY KEY CLUSTERED (group_id),
+  CONSTRAINT FK_configgroup_cluster_service FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id),
   CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE confgroupclusterconfigmapping (

http://git-wip-us.apache.org/repos/asf/ambari/blob/527c4a2d/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
index 7485257..2ff4d32 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java
@@ -55,6 +55,8 @@ public class ServiceCheckValidityCheckTest {
   private static final String CLUSTER_NAME = "cluster1";
   private static final long CLUSTER_ID = 1L;
   private static final String SERVICE_NAME = "HDFS";
+  private static final long SERVICE_ID = 2L;
+  private static final long SERVICE_GROUP_ID = 3L;
   private static final long CONFIG_CREATE_TIMESTAMP = 1461518722202L;
   private static final long SERVICE_CHECK_START_TIME = CONFIG_CREATE_TIMESTAMP 
- 2000L;
   private static final String SERVICE_COMPONENT_NAME = "service component";
@@ -132,13 +134,14 @@ public class ServiceCheckValidityCheckTest {
     
when(service.getServiceComponents()).thenReturn(ImmutableMap.of(SERVICE_COMPONENT_NAME,
 serviceComponent));
 
     ServiceConfigEntity serviceConfigEntity = new ServiceConfigEntity();
-    serviceConfigEntity.setServiceName(SERVICE_NAME);
+    serviceConfigEntity.setServiceId(SERVICE_ID);
+    serviceConfigEntity.setServiceGroupId(SERVICE_GROUP_ID);
     serviceConfigEntity.setCreateTimestamp(CONFIG_CREATE_TIMESTAMP);
 
     LastServiceCheckDTO lastServiceCheckDTO1 = new 
LastServiceCheckDTO(Role.ZOOKEEPER_QUORUM_SERVICE_CHECK.name(), 
SERVICE_CHECK_START_TIME);
     LastServiceCheckDTO lastServiceCheckDTO2 = new 
LastServiceCheckDTO(Role.HDFS_SERVICE_CHECK.name(), SERVICE_CHECK_START_TIME);
 
-    when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), 
eq(SERVICE_NAME))).thenReturn(serviceConfigEntity);
+    when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), 
eq(SERVICE_ID))).thenReturn(serviceConfigEntity);
     
when(hostRoleCommandDAO.getLatestServiceChecksByRole(any(Long.class))).thenReturn(asList(lastServiceCheckDTO1,
 lastServiceCheckDTO2));
 
     PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
@@ -159,12 +162,13 @@ public class ServiceCheckValidityCheckTest {
     
when(service.getServiceComponents()).thenReturn(ImmutableMap.of(SERVICE_COMPONENT_NAME,
 serviceComponent));
 
     ServiceConfigEntity serviceConfigEntity = new ServiceConfigEntity();
-    serviceConfigEntity.setServiceName(SERVICE_NAME);
+    serviceConfigEntity.setServiceId(SERVICE_ID);
+    serviceConfigEntity.setServiceGroupId(SERVICE_GROUP_ID);
     serviceConfigEntity.setCreateTimestamp(CONFIG_CREATE_TIMESTAMP);
 
     LastServiceCheckDTO lastServiceCheckDTO = new 
LastServiceCheckDTO(Role.HDFS_SERVICE_CHECK.name(), SERVICE_CHECK_START_TIME);
 
-    when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), 
eq(SERVICE_NAME))).thenReturn(serviceConfigEntity);
+    when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), 
eq(SERVICE_ID))).thenReturn(serviceConfigEntity);
     
when(hostRoleCommandDAO.getLatestServiceChecksByRole(any(Long.class))).thenReturn(singletonList(lastServiceCheckDTO));
 
     PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
@@ -182,10 +186,11 @@ public class ServiceCheckValidityCheckTest {
     
when(service.getServiceComponents()).thenReturn(ImmutableMap.of(SERVICE_COMPONENT_NAME,
 serviceComponent));
 
     ServiceConfigEntity serviceConfigEntity = new ServiceConfigEntity();
-    serviceConfigEntity.setServiceName(SERVICE_NAME);
+    serviceConfigEntity.setServiceId(SERVICE_ID);
+    serviceConfigEntity.setServiceGroupId(SERVICE_GROUP_ID);
     serviceConfigEntity.setCreateTimestamp(CONFIG_CREATE_TIMESTAMP);
 
-    when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), 
eq(SERVICE_NAME))).thenReturn(serviceConfigEntity);
+    when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), 
eq(SERVICE_ID))).thenReturn(serviceConfigEntity);
     
when(hostRoleCommandDAO.getLatestServiceChecksByRole(any(Long.class))).thenReturn(Collections.<LastServiceCheckDTO>emptyList());
 
     PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
@@ -202,13 +207,14 @@ public class ServiceCheckValidityCheckTest {
     
when(service.getServiceComponents()).thenReturn(ImmutableMap.of(SERVICE_COMPONENT_NAME,
 serviceComponent));
 
     ServiceConfigEntity serviceConfigEntity = new ServiceConfigEntity();
-    serviceConfigEntity.setServiceName(SERVICE_NAME);
+    serviceConfigEntity.setServiceId(SERVICE_ID);
+    serviceConfigEntity.setServiceGroupId(SERVICE_GROUP_ID);
     serviceConfigEntity.setCreateTimestamp(CONFIG_CREATE_TIMESTAMP);
 
     LastServiceCheckDTO lastServiceCheckDTO1 = new 
LastServiceCheckDTO(Role.HDFS_SERVICE_CHECK.name(), SERVICE_CHECK_START_TIME);
     LastServiceCheckDTO lastServiceCheckDTO2 = new 
LastServiceCheckDTO(Role.HDFS_SERVICE_CHECK.name(), CONFIG_CREATE_TIMESTAMP - 
1L);
 
-    when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), 
eq(SERVICE_NAME))).thenReturn(serviceConfigEntity);
+    when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), 
eq(SERVICE_ID))).thenReturn(serviceConfigEntity);
     
when(hostRoleCommandDAO.getLatestServiceChecksByRole(any(Long.class))).thenReturn(asList(lastServiceCheckDTO1,
 lastServiceCheckDTO2));
 
     PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);
@@ -235,7 +241,8 @@ public class ServiceCheckValidityCheckTest {
     
when(service.getServiceComponents()).thenReturn(ImmutableMap.of(SERVICE_COMPONENT_NAME,
 serviceComponent));
 
     ServiceConfigEntity serviceConfigEntity = new ServiceConfigEntity();
-    serviceConfigEntity.setServiceName(SERVICE_NAME);
+    serviceConfigEntity.setServiceId(SERVICE_ID);
+    serviceConfigEntity.setServiceGroupId(SERVICE_GROUP_ID);
     serviceConfigEntity.setCreateTimestamp(CONFIG_CREATE_TIMESTAMP);
 
     String hdfsRole = Role.HDFS_SERVICE_CHECK.name();
@@ -244,7 +251,7 @@ public class ServiceCheckValidityCheckTest {
     LastServiceCheckDTO lastServiceCheckDTO1 = new 
LastServiceCheckDTO(hdfsRole, SERVICE_CHECK_START_TIME);
     LastServiceCheckDTO lastServiceCheckDTO2 = new 
LastServiceCheckDTO(hdfs2Role, CONFIG_CREATE_TIMESTAMP - 1L);
 
-    when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), 
eq(SERVICE_NAME))).thenReturn(serviceConfigEntity);
+    when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), 
eq(SERVICE_ID))).thenReturn(serviceConfigEntity);
     
when(hostRoleCommandDAO.getLatestServiceChecksByRole(any(Long.class))).thenReturn(asList(lastServiceCheckDTO1,
 lastServiceCheckDTO2));
 
     PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME);

Reply via email to