http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/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 0247774..cf08f0c 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
@@ -41,6 +41,7 @@ import org.apache.ambari.server.orm.dao.ClusterDAO;
 import org.apache.ambari.server.orm.dao.ClusterServiceDAO;
 import org.apache.ambari.server.orm.dao.ServiceConfigDAO;
 import org.apache.ambari.server.orm.dao.ServiceDesiredStateDAO;
+import org.apache.ambari.server.orm.dao.ServiceGroupDAO;
 import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
 import org.apache.ambari.server.orm.entities.ClusterEntity;
 import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
@@ -50,9 +51,9 @@ import 
org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
 import org.apache.ambari.server.orm.entities.ServiceConfigEntity;
 import org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity;
 import org.apache.ambari.server.orm.entities.ServiceDesiredStateEntityPK;
+import org.apache.ambari.server.orm.entities.ServiceGroupEntity;
 import org.apache.ambari.server.orm.entities.StackEntity;
 import org.apache.ambari.server.serveraction.kerberos.Component;
-import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -71,6 +72,7 @@ public class ServiceImpl implements Service {
   private static final Logger LOG = LoggerFactory.getLogger(ServiceImpl.class);
 
   private final Cluster cluster;
+  private final ServiceGroup serviceGroup;
   private final ConcurrentMap<String, ServiceComponent> components = new 
ConcurrentHashMap<>();
   private boolean isClientOnlyService;
   private boolean isCredentialStoreSupported;
@@ -83,6 +85,7 @@ public class ServiceImpl implements Service {
   private final ClusterServiceDAO clusterServiceDAO;
   private final ServiceDesiredStateDAO serviceDesiredStateDAO;
   private final ClusterDAO clusterDAO;
+  private final ServiceGroupDAO serviceGroupDAO;
   private final ServiceComponentFactory serviceComponentFactory;
 
   /**
@@ -91,32 +94,50 @@ public class ServiceImpl implements Service {
   private final AmbariEventPublisher eventPublisher;
 
   /**
+   * The id of the service.
+   */
+  private Long serviceId;
+
+  /**
    * The name of the service.
    */
   private final String serviceName;
   private final String displayName;
 
+  /**
+   * The stack service name.
+   */
+  private final String serviceDisplayName;
+
   @AssistedInject
-  ServiceImpl(@Assisted Cluster cluster, @Assisted String serviceName,
-      @Assisted RepositoryVersionEntity desiredRepositoryVersion, ClusterDAO 
clusterDAO,
-      ClusterServiceDAO clusterServiceDAO, ServiceDesiredStateDAO 
serviceDesiredStateDAO,
-      ServiceComponentFactory serviceComponentFactory, AmbariMetaInfo 
ambariMetaInfo,
-      AmbariEventPublisher eventPublisher) throws AmbariException {
+  ServiceImpl(@Assisted Cluster cluster, @Assisted ServiceGroup serviceGroup,
+              @Assisted("serviceName") String serviceName, 
@Assisted("serviceDisplayName") String serviceDisplayName,
+              @Assisted RepositoryVersionEntity desiredRepositoryVersion,
+              ClusterDAO clusterDAO, ServiceGroupDAO serviceGroupDAO,
+              ClusterServiceDAO clusterServiceDAO, ServiceDesiredStateDAO 
serviceDesiredStateDAO,
+              ServiceComponentFactory serviceComponentFactory, AmbariMetaInfo 
ambariMetaInfo,
+              AmbariEventPublisher eventPublisher) throws AmbariException {
     this.cluster = cluster;
+    this.serviceGroup = serviceGroup;
     this.clusterDAO = clusterDAO;
+    this.serviceGroupDAO = serviceGroupDAO;
     this.clusterServiceDAO = clusterServiceDAO;
     this.serviceDesiredStateDAO = serviceDesiredStateDAO;
     this.serviceComponentFactory = serviceComponentFactory;
     this.eventPublisher = eventPublisher;
     this.serviceName = serviceName;
+    this.serviceDisplayName = serviceDisplayName;
     this.ambariMetaInfo = ambariMetaInfo;
 
     ClusterServiceEntity serviceEntity = new ClusterServiceEntity();
     serviceEntity.setClusterId(cluster.getClusterId());
+    serviceEntity.setServiceGroupId(serviceGroup.getServiceGroupId());
     serviceEntity.setServiceName(serviceName);
+    serviceEntity.setServiceDisplayName(serviceDisplayName);
+
     ServiceDesiredStateEntity serviceDesiredStateEntity = new 
ServiceDesiredStateEntity();
-    serviceDesiredStateEntity.setServiceName(serviceName);
     serviceDesiredStateEntity.setClusterId(cluster.getClusterId());
+    
serviceDesiredStateEntity.setServiceGroupId(serviceGroup.getServiceGroupId());
     
serviceDesiredStateEntity.setDesiredRepositoryVersion(desiredRepositoryVersion);
     serviceDesiredStateEntityPK = 
getServiceDesiredStateEntityPK(serviceDesiredStateEntity);
     serviceEntityPK = getServiceEntityPK(serviceEntity);
@@ -127,7 +148,7 @@ public class ServiceImpl implements Service {
     StackId stackId = desiredRepositoryVersion.getStackId();
 
     ServiceInfo sInfo = ambariMetaInfo.getService(stackId.getStackName(),
-        stackId.getStackVersion(), serviceName);
+        stackId.getStackVersion(), serviceDisplayName);
 
     displayName = sInfo.getDisplayName();
     isClientOnlyService = sInfo.isClientOnlyService();
@@ -138,18 +159,23 @@ public class ServiceImpl implements Service {
   }
 
   @AssistedInject
-  ServiceImpl(@Assisted Cluster cluster, @Assisted ClusterServiceEntity 
serviceEntity,
-      ClusterDAO clusterDAO, ClusterServiceDAO clusterServiceDAO,
-      ServiceDesiredStateDAO serviceDesiredStateDAO,
-      ServiceComponentFactory serviceComponentFactory, AmbariMetaInfo 
ambariMetaInfo,
-      AmbariEventPublisher eventPublisher) throws AmbariException {
+  ServiceImpl(@Assisted Cluster cluster, @Assisted ServiceGroup serviceGroup,
+              @Assisted ClusterServiceEntity serviceEntity,
+              ClusterDAO clusterDAO, ServiceGroupDAO serviceGroupDAO,
+              ClusterServiceDAO clusterServiceDAO, ServiceDesiredStateDAO 
serviceDesiredStateDAO,
+              ServiceComponentFactory serviceComponentFactory, AmbariMetaInfo 
ambariMetaInfo,
+              AmbariEventPublisher eventPublisher) throws AmbariException {
     this.cluster = cluster;
+    this.serviceGroup = serviceGroup;
     this.clusterDAO = clusterDAO;
+    this.serviceGroupDAO = serviceGroupDAO;
     this.clusterServiceDAO = clusterServiceDAO;
     this.serviceDesiredStateDAO = serviceDesiredStateDAO;
     this.serviceComponentFactory = serviceComponentFactory;
     this.eventPublisher = eventPublisher;
-    serviceName = serviceEntity.getServiceName();
+    this.serviceId = serviceEntity.getServiceId();
+    this.serviceName = serviceEntity.getServiceName();
+    this.serviceDisplayName = serviceEntity.getServiceDisplayName();
     this.ambariMetaInfo = ambariMetaInfo;
 
     ServiceDesiredStateEntity serviceDesiredStateEntity = 
serviceEntity.getServiceDesiredStateEntity();
@@ -166,8 +192,8 @@ public class ServiceImpl implements Service {
           } catch(ProvisionException ex) {
             StackId stackId = new 
StackId(serviceComponentDesiredStateEntity.getDesiredStack());
             LOG.error(String.format("Can not get component info: stackName=%s, 
stackVersion=%s, serviceName=%s, componentName=%s",
-                stackId.getStackName(), stackId.getStackVersion(),
-                
serviceEntity.getServiceName(),serviceComponentDesiredStateEntity.getComponentName()));
+              stackId.getStackName(), stackId.getStackVersion(),
+              serviceEntity.getServiceDisplayName(), 
serviceComponentDesiredStateEntity.getComponentName()));
             ex.printStackTrace();
           }
       }
@@ -206,21 +232,32 @@ public class ServiceImpl implements Service {
   }
 
   @Override
-  public String getName() {
-    return serviceName;
-  }
+  public String getName() { return serviceName; }
 
   @Override
-  public String getDisplayName() {
-    return StringUtils.isBlank(displayName) ? serviceName : displayName;
+  public String getServiceDisplayName() {
+    return serviceDisplayName;
   }
 
   @Override
-  public long getClusterId() {
+  public Long getClusterId() {
     return cluster.getClusterId();
   }
 
   @Override
+  public Long getServiceGroupId() {
+    return serviceGroup.getServiceGroupId();
+  }
+
+  @Override
+  public String getServiceGroupName() {
+    return serviceGroup.getServiceGroupName();
+  }
+
+  @Override
+  public Long getServiceId() { return serviceId; }
+
+  @Override
   public Map<String, ServiceComponent> getServiceComponents() {
     return new HashMap<>(components);
   }
@@ -239,7 +276,7 @@ public class ServiceImpl implements Service {
       throw new AmbariException("Cannot add duplicate ServiceComponent"
           + ", clusterName=" + cluster.getClusterName()
           + ", clusterId=" + cluster.getClusterId()
-          + ", serviceName=" + getName()
+          + ", serviceName=" + getServiceDisplayName()
           + ", serviceComponentName=" + component.getName());
     }
 
@@ -260,7 +297,7 @@ public class ServiceImpl implements Service {
     ServiceComponent serviceComponent = components.get(componentName);
     if (null == serviceComponent) {
       throw new ServiceComponentNotFoundException(cluster.getClusterName(),
-          getName(), componentName);
+          getName(), getServiceDisplayName(), 
serviceGroup.getServiceGroupName(), componentName);
     }
 
     return serviceComponent;
@@ -276,7 +313,7 @@ public class ServiceImpl implements Service {
   public void setDesiredState(State state) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("Setting DesiredState of Service, clusterName={}, 
clusterId={}, serviceName={}, oldDesiredState={}, newDesiredState={}",
-        cluster.getClusterName(), cluster.getClusterId(), getName(), 
getDesiredState(), state);
+        cluster.getClusterName(), cluster.getClusterId(), 
getServiceDisplayName(), getDesiredState(), state);
     }
 
     ServiceDesiredStateEntity serviceDesiredStateEntity = 
getServiceDesiredStateEntity();
@@ -347,8 +384,9 @@ public class ServiceImpl implements Service {
     StackId desiredStackId = desiredRespositoryVersion.getStackId();
 
     ServiceResponse r = new ServiceResponse(cluster.getClusterId(), 
cluster.getClusterName(),
-        getName(), desiredStackId, desiredRespositoryVersion.getVersion(), 
getRepositoryState(),
-        getDesiredState().toString(), isCredentialStoreSupported(), 
isCredentialStoreEnabled());
+        serviceGroup.getServiceGroupId(), serviceGroup.getServiceGroupName(),
+        getServiceId(), getName(), getServiceDisplayName(), desiredStackId, 
desiredRespositoryVersion.getVersion(),
+        getRepositoryState(), getDesiredState().toString(), 
isCredentialStoreSupported(), isCredentialStoreEnabled());
 
     r.setDesiredRepositoryVersionId(desiredRespositoryVersion.getId());
 
@@ -414,7 +452,7 @@ public class ServiceImpl implements Service {
   public void setCredentialStoreEnabled(boolean credentialStoreEnabled) {
     if (LOG.isDebugEnabled()) {
       LOG.debug("Setting CredentialStoreEnabled of Service, clusterName={}, 
clusterId={}, serviceName={}, oldCredentialStoreEnabled={}, 
newCredentialStoreEnabled={}",
-        cluster.getClusterName(), cluster.getClusterId(), getName(), 
isCredentialStoreEnabled(), credentialStoreEnabled);
+        cluster.getClusterName(), cluster.getClusterId(), 
getServiceDisplayName(), isCredentialStoreEnabled(), credentialStoreEnabled);
     }
 
     ServiceDesiredStateEntity desiredStateEntity = 
getServiceDesiredStateEntity();
@@ -431,6 +469,7 @@ public class ServiceImpl implements Service {
   @Override
   public void debugDump(StringBuilder sb) {
     sb.append("Service={ serviceName=").append(getName())
+      .append(", serviceDisplayName=").append(getServiceDisplayName())
       .append(", clusterName=").append(cluster.getClusterName())
       .append(", clusterId=").append(cluster.getClusterId())
       .append(", desiredStackVersion=").append(getDesiredStackId())
@@ -460,7 +499,7 @@ public class ServiceImpl implements Service {
     cluster.addService(this);
 
     ServiceInstalledEvent event = new ServiceInstalledEvent(getClusterId(), 
stackId.getStackName(),
-        stackId.getStackVersion(), getName());
+        stackId.getStackVersion(), getName(), serviceDisplayName, 
serviceGroup.getServiceGroupName());
 
     eventPublisher.publish(event);
   }
@@ -469,10 +508,17 @@ public class ServiceImpl implements Service {
   void persistEntities(ClusterServiceEntity serviceEntity) {
     long clusterId = cluster.getClusterId();
     ClusterEntity clusterEntity = clusterDAO.findById(clusterId);
+    ServiceGroupEntity serviceGroupEntity = 
serviceGroupDAO.findByClusterAndServiceGroupIds(
+      clusterId, serviceGroup.getServiceGroupId());
+    serviceEntity.setServiceGroupEntity(serviceGroupEntity);
     serviceEntity.setClusterEntity(clusterEntity);
     clusterServiceDAO.create(serviceEntity);
+    serviceId = serviceEntity.getServiceId();
+    serviceEntityPK.setServiceId(serviceId);
+    serviceDesiredStateEntityPK.setServiceId(serviceId);
     clusterEntity.getClusterServiceEntities().add(serviceEntity);
     clusterDAO.merge(clusterEntity);
+    serviceGroupDAO.merge(serviceGroupEntity);
     clusterServiceDAO.merge(serviceEntity);
   }
 
@@ -486,9 +532,9 @@ public class ServiceImpl implements Service {
     //
     for (ServiceComponent sc : components.values()) {
       if (!sc.canBeRemoved()) {
-        LOG.warn("Found non removable component when trying to delete service" 
+ ", clusterName="
-            + cluster.getClusterName() + ", serviceName=" + getName() + ", 
componentName="
-            + sc.getName());
+        LOG.warn("Found non-removable component when trying to delete service" 
+ ", clusterName="
+            + cluster.getClusterName() + ", serviceName=" + getName() + ", 
serviceDisplayName="
+            + getServiceDisplayName() + ", componentName=" + sc.getName());
         return false;
       }
     }
@@ -509,7 +555,7 @@ public class ServiceImpl implements Service {
       }
     }
 
-    LOG.info("Deleting all configuration associations for {} on cluster {}", 
getName(), cluster.getClusterName());
+    LOG.info("Deleting all configuration associations for {} on cluster {}", 
getServiceDisplayName(), cluster.getClusterName());
 
     List<ServiceConfigEntity> serviceConfigEntities =
       serviceConfigDAO.findByService(cluster.getClusterId(), getName());
@@ -527,13 +573,13 @@ public class ServiceImpl implements Service {
     lock.lock();
     try {
       LOG.info("Deleting all components for service" + ", clusterName=" + 
cluster.getClusterName()
-          + ", serviceName=" + getName());
+          + ", serviceDisplayName=" + getServiceDisplayName());
       // FIXME check dependencies from meta layer
       for (ServiceComponent component : components.values()) {
         if (!component.canBeRemoved()) {
           throw new AmbariException("Found non removable component when trying 
to"
               + " delete all components from service" + ", clusterName=" + 
cluster.getClusterName()
-              + ", serviceName=" + getName() + ", componentName=" + 
component.getName());
+              + ", getServiceDisplayName=" + getServiceDisplayName() + ", 
componentName=" + component.getName());
         }
       }
 
@@ -554,12 +600,12 @@ public class ServiceImpl implements Service {
     try {
       ServiceComponent component = getServiceComponent(componentName);
       LOG.info("Deleting servicecomponent for cluster" + ", clusterName=" + 
cluster.getClusterName()
-          + ", serviceName=" + getName() + ", componentName=" + componentName);
+          + ", getServiceDisplayName=" + getServiceDisplayName() + ", 
componentName=" + componentName);
       // FIXME check dependencies from meta layer
       if (!component.canBeRemoved()) {
         throw new AmbariException("Could not delete component from cluster"
             + ", clusterName=" + cluster.getClusterName()
-            + ", serviceName=" + getName()
+            + ", getServiceDisplayName=" + getServiceDisplayName()
             + ", componentName=" + componentName);
       }
 
@@ -591,8 +637,9 @@ public class ServiceImpl implements Service {
       return;
     }
 
-    ServiceRemovedEvent event = new ServiceRemovedEvent(getClusterId(), 
stackId.getStackName(),
-        stackId.getStackVersion(), getName(), components);
+    ServiceRemovedEvent event = new ServiceRemovedEvent(getClusterId(), 
stackId.getStackName(), stackId.getStackVersion(),
+                                                        getName(), 
getServiceDisplayName(),
+                                                        
serviceGroup.getServiceGroupName(), components);
 
     eventPublisher.publish(event);
   }
@@ -632,14 +679,16 @@ public class ServiceImpl implements Service {
   private ClusterServiceEntityPK getServiceEntityPK(ClusterServiceEntity 
serviceEntity) {
     ClusterServiceEntityPK pk = new ClusterServiceEntityPK();
     pk.setClusterId(serviceEntity.getClusterId());
-    pk.setServiceName(serviceEntity.getServiceName());
+    pk.setServiceGroupId(serviceEntity.getServiceGroupId());
+    pk.setServiceId(serviceEntity.getServiceId());
     return pk;
   }
 
   private ServiceDesiredStateEntityPK 
getServiceDesiredStateEntityPK(ServiceDesiredStateEntity 
serviceDesiredStateEntity) {
     ServiceDesiredStateEntityPK pk = new ServiceDesiredStateEntityPK();
     pk.setClusterId(serviceDesiredStateEntity.getClusterId());
-    pk.setServiceName(serviceDesiredStateEntity.getServiceName());
+    pk.setServiceGroupId(serviceDesiredStateEntity.getServiceGroupId());
+    pk.setServiceId(serviceDesiredStateEntity.getServiceId());
     return pk;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java 
b/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java
index 1494488..6417b6e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java
@@ -169,10 +169,10 @@ public class StackInfo implements Comparable<StackInfo>, 
Validable {
     return services;
   }
 
-  public ServiceInfo getService(String name) {
+  public ServiceInfo getService(String serviceDisplayName) {
     Collection<ServiceInfo> services = getServices();
     for (ServiceInfo service : services) {
-      if (service.getName().equals(name)) {
+      if (service.getName().equals(serviceDisplayName)) {
         return service;
       }
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/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 605cb7a..f18aaa3 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
@@ -59,6 +59,7 @@ import org.apache.ambari.server.controller.ClusterResponse;
 import org.apache.ambari.server.controller.ConfigurationResponse;
 import org.apache.ambari.server.controller.MaintenanceStateHelper;
 import org.apache.ambari.server.controller.RootServiceResponseFactory.Services;
+import org.apache.ambari.server.controller.ServiceComponentHostResponse;
 import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
 import org.apache.ambari.server.events.AmbariEvent.AmbariEventType;
 import org.apache.ambari.server.events.ClusterConfigChangedEvent;
@@ -171,8 +172,10 @@ public class ClusterImpl implements Cluster {
   private StackId desiredStackVersion;
 
   private final ConcurrentSkipListMap<String, Service> services = new 
ConcurrentSkipListMap<>();
+  private final ConcurrentSkipListMap<Long, Service> servicesById = new 
ConcurrentSkipListMap<>();
 
   private Map<String, ServiceGroup> serviceGroups = new 
ConcurrentSkipListMap<>();
+  private final Map<Long, ServiceGroup> serviceGroupsById = new 
ConcurrentSkipListMap<>();
 
   /**
    * [ Config Type -> [ Config Version Tag -> Config ] ]
@@ -435,7 +438,7 @@ public class ClusterImpl implements Cluster {
         if (ambariMetaInfo.getService(stackId.getStackName(),
           stackId.getStackVersion(), serviceEntity.getServiceName()) != null) {
           services.put(serviceEntity.getServiceName(),
-            serviceFactory.createExisting(this, serviceEntity));
+            serviceFactory.createExisting(this, 
getServiceGroup(serviceEntity.getServiceGroupId()), serviceEntity));
         }
       } catch (AmbariException e) {
         LOG.error(String.format(
@@ -452,6 +455,7 @@ public class ClusterImpl implements Cluster {
       for (ServiceGroupEntity serviceGroupEntity : 
clusterEntity.getServiceGroupEntities()) {
         ServiceGroup sg = serviceGroupFactory.createExisting(this, 
serviceGroupEntity);
         serviceGroups.put(serviceGroupEntity.getServiceGroupName(), sg);
+        serviceGroupsById.put(serviceGroupEntity.getServiceGroupId(), sg);
       }
     }
   }
@@ -622,12 +626,17 @@ public class ClusterImpl implements Cluster {
 
   @Override
   @Transactional
-  public void addServiceComponentHosts(Collection<ServiceComponentHost> 
serviceComponentHosts) throws AmbariException {
+  public Set<ServiceComponentHostResponse> 
addServiceComponentHosts(Collection<ServiceComponentHost> 
serviceComponentHosts) throws AmbariException {
+    Set<ServiceComponentHostResponse> createdSvcHostCmpnt = new HashSet<>();
+    Cluster cluster = null;
     for (ServiceComponentHost serviceComponentHost : serviceComponentHosts) {
       Service service = getService(serviceComponentHost.getServiceName());
+      cluster = service.getCluster();
       ServiceComponent serviceComponent = 
service.getServiceComponent(serviceComponentHost.getServiceComponentName());
       serviceComponent.addServiceComponentHost(serviceComponentHost);
+      
createdSvcHostCmpnt.add(serviceComponentHost.convertToResponse(cluster.getDesiredConfigs()));
     }
+    return createdSvcHostCmpnt;
   }
 
   public void addServiceComponentHost(ServiceComponentHost svcCompHost)
@@ -768,7 +777,7 @@ public class ClusterImpl implements Cluster {
   }
 
   @Override
-  public long getClusterId() {
+  public Long getClusterId() {
     // Add cluster creates the managed entity before creating the Cluster
     // instance so id would not be null.
     return clusterId;
@@ -843,7 +852,8 @@ public class ClusterImpl implements Cluster {
   @Override
   public void addService(Service service) {
     if (LOG.isDebugEnabled()) {
-      LOG.debug("Adding a new Service, clusterName={}, clusterId={}, 
serviceName={}", getClusterName(), getClusterId(), service.getName());
+      LOG.debug("Adding a new Service, clusterName={}, clusterId={}, 
serviceName={} serviceDisplayName={}",
+                 getClusterName(), getClusterId(), service.getName(), 
service.getServiceDisplayName());
     }
     services.put(service.getName(), service);
   }
@@ -852,16 +862,17 @@ public class ClusterImpl implements Cluster {
    * {@inheritDoc}
    */
   @Override
-  public Service addService(String serviceName, RepositoryVersionEntity 
repositoryVersion) throws AmbariException {
+  public Service addService(ServiceGroup serviceGroup, String serviceName, 
String serviceDisplayName,
+                            RepositoryVersionEntity repositoryVersion) throws 
AmbariException {
     if (services.containsKey(serviceName)) {
-      String message = MessageFormat.format("The {0} service already exists in 
{1}", serviceName,
+      String message = MessageFormat.format("The {0} service already exists in 
{1}", serviceDisplayName,
         getClusterName());
 
       throw new AmbariException(message);
     }
 
     @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
-    Service service = serviceFactory.createNew(this, serviceName, 
repositoryVersion);
+    Service service = serviceFactory.createNew(this, serviceGroup, 
serviceName, serviceDisplayName, repositoryVersion);
     addService(service);
 
     return service;
@@ -875,6 +886,7 @@ public class ClusterImpl implements Cluster {
         + serviceGroup.getServiceGroupName());
     }
     serviceGroups.put(serviceGroup.getServiceGroupName(), serviceGroup);
+    serviceGroupsById.put(serviceGroup.getServiceGroupId(), serviceGroup);
   }
 
   @Override
@@ -900,11 +912,26 @@ public class ClusterImpl implements Cluster {
   }
 
   @Override
+  public Service getService(Long serviceId) throws AmbariException {
+    Service service = servicesById.get(serviceId);
+    if (null == service) {
+      throw new ServiceNotFoundException(getClusterName(), serviceId);
+    }
+
+    return service;
+  }
+
+  @Override
   public Map<String, Service> getServices() {
     return new HashMap<>(services);
   }
 
   @Override
+  public Map<Long, Service> getServicesById() {
+    return new HashMap<Long, Service>(servicesById);
+  }
+
+  @Override
   public Service getServiceByComponentName(String componentName) throws 
AmbariException {
     for (Service service : services.values()) {
       for (ServiceComponent component : 
service.getServiceComponents().values()) {
@@ -928,6 +955,16 @@ public class ClusterImpl implements Cluster {
     return serviceGroup;
   }
 
+
+  @Override
+  public ServiceGroup getServiceGroup(Long serviceGroupId) throws 
ServiceGroupNotFoundException {
+    ServiceGroup serviceGroup = serviceGroupsById.get(serviceGroupId);
+    if(null == serviceGroup) {
+      throw new ServiceGroupNotFoundException(getClusterName(), 
serviceGroupId);
+    }
+    return serviceGroup;
+  }
+
   @Override
   public Map<String, ServiceGroup> getServiceGroups() throws AmbariException {
     return new HashMap<String, ServiceGroup>(serviceGroups);
@@ -1356,6 +1393,7 @@ public class ClusterImpl implements Cluster {
       Long serviceGroupId = serviceGroup.getServiceGroupId();
       deleteServiceGroup(serviceGroup);
       serviceGroups.remove(serviceGroupName);
+      serviceGroupsById.remove(serviceGroupId);
     } finally {
       clusterGlobalLock.writeLock().unlock();
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/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 3ceaa48..37f5af9 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
@@ -1157,9 +1157,9 @@ public class HostImpl implements Host {
     HostEntity hostEntity = getHostEntity();
 
     for (HostComponentStateEntity componentState : 
hostEntity.getHostComponentStateEntities()) {
-      ComponentInfo component = 
ambariMetaInfo.getComponent(stackId.getStackName(),
-          stackId.getStackVersion(), componentState.getServiceName(),
-          componentState.getComponentName());
+      String serviceDisplayName = 
componentState.getServiceComponentDesiredStateEntity().getClusterServiceEntity().getServiceName();
+      ComponentInfo component = 
ambariMetaInfo.getComponent(stackId.getStackName(), stackId.getStackVersion(),
+                                                            
serviceDisplayName, componentState.getComponentName());
 
       if (component.isVersionAdvertised()) {
         return true;

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
index 45d8e8e..78a87b3 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
@@ -281,7 +281,7 @@ public class VersionDefinitionXml {
         continue;
       }
 
-      ServiceVersionSummary summary = new 
ServiceVersionSummary(service.getDisplayName());
+      ServiceVersionSummary summary = new 
ServiceVersionSummary(service.getServiceDisplayName());
       summaries.put(service.getName(), summary);
 
       String serviceVersion = 
service.getDesiredRepositoryVersion().getVersion();

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
index 230b031..54cbc3d 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
@@ -64,10 +64,12 @@ import org.apache.ambari.server.state.HostConfig;
 import org.apache.ambari.server.state.HostState;
 import org.apache.ambari.server.state.MaintenanceState;
 import org.apache.ambari.server.state.RepositoryVersionState;
+import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponent;
 import org.apache.ambari.server.state.ServiceComponentHost;
 import org.apache.ambari.server.state.ServiceComponentHostEvent;
 import org.apache.ambari.server.state.ServiceComponentHostEventType;
+import org.apache.ambari.server.state.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.StackInfo;
 import org.apache.ambari.server.state.State;
@@ -785,8 +787,9 @@ public class ServiceComponentHostImpl implements 
ServiceComponentHost {
 
     HostComponentStateEntity stateEntity = new HostComponentStateEntity();
     stateEntity.setClusterId(serviceComponent.getClusterId());
+    stateEntity.setServiceGroupId(serviceComponent.getServiceGroupId());
+    stateEntity.setServiceId(serviceComponent.getServiceId());
     stateEntity.setComponentName(serviceComponent.getName());
-    stateEntity.setServiceName(serviceComponent.getServiceName());
     stateEntity.setVersion(State.UNKNOWN.toString());
     stateEntity.setHostEntity(hostEntity);
     stateEntity.setCurrentState(stateMachine.getCurrentState());
@@ -795,7 +798,7 @@ public class ServiceComponentHostImpl implements 
ServiceComponentHost {
     HostComponentDesiredStateEntity desiredStateEntity = new 
HostComponentDesiredStateEntity();
     desiredStateEntity.setClusterId(serviceComponent.getClusterId());
     desiredStateEntity.setComponentName(serviceComponent.getName());
-    desiredStateEntity.setServiceName(serviceComponent.getServiceName());
+    desiredStateEntity.setServiceId(serviceComponent.getServiceId());
     desiredStateEntity.setHostEntity(hostEntity);
     desiredStateEntity.setDesiredState(State.INIT);
 
@@ -809,8 +812,8 @@ public class ServiceComponentHostImpl implements 
ServiceComponentHost {
 
     // publish the service component installed event
     ServiceComponentInstalledEvent event = new 
ServiceComponentInstalledEvent(getClusterId(),
-        stackId.getStackName(), stackId.getStackVersion(), getServiceName(),
-        getServiceComponentName(), getHostName(), isRecoveryEnabled());
+        stackId.getStackName(), stackId.getStackVersion(), getServiceName(), 
getServiceDisplayName(),
+        getServiceGroupName(), getServiceComponentName(), getHostName(), 
isRecoveryEnabled());
 
     eventPublisher.publish(event);
 
@@ -1055,7 +1058,7 @@ public class ServiceComponentHostImpl implements 
ServiceComponentHost {
   }
 
   @Override
-  public long getClusterId() {
+  public Long getClusterId() {
     return serviceComponent.getClusterId();
   }
 
@@ -1065,11 +1068,40 @@ public class ServiceComponentHostImpl implements 
ServiceComponentHost {
   }
 
   @Override
+  public String getServiceDisplayName() {
+    return serviceComponent.getServiceDisplayName();
+  }
+
+  @Override
+  public Long getServiceId() {
+    return serviceComponent.getServiceId();
+  }
+
+  @Override
+  public Long getHostComponentId() {
+    return hostComponentStateId;
+  }
+
+  @Override
   public boolean isClientComponent() {
     return serviceComponent.isClientComponent();
   }
 
   @Override
+  public Long getServiceGroupId() { return 
serviceComponent.getServiceGroupId(); }
+
+  @Override
+  public String getServiceGroupName() {
+    try {
+      Cluster cluster = clusters.getCluster(getClusterId());
+      ServiceGroup sg = cluster.getServiceGroup(getServiceGroupId());
+      return sg.getServiceGroupName();
+    } catch (AmbariException e) {
+      return null;
+    }
+  }
+
+  @Override
   public State getDesiredState() {
     HostComponentDesiredStateEntity desiredStateEntity = 
getDesiredStateEntity();
     if (desiredStateEntity != null) {
@@ -1142,8 +1174,18 @@ public class ServiceComponentHostImpl implements 
ServiceComponentHost {
     HostComponentDesiredStateEntity hostComponentDesiredStateEntity = 
getDesiredStateEntity();
 
     String clusterName = serviceComponent.getClusterName();
-    String serviceName = serviceComponent.getServiceName();
+    Long clusterId = serviceComponent.getClusterId();
+    String serviceName = serviceComponent.getServiceDisplayName();
+    Cluster cluster = null;
+    Service service = null;
+    try {
+      cluster = clusters.getCluster(clusterName);
+      service = cluster.getService(serviceName);
+    } catch (AmbariException e) {
+      e.printStackTrace();
+    }
     String serviceComponentName = serviceComponent.getName();
+    Long hostComponentId = getHostComponentId();
     String hostName = getHostName();
     String publicHostName = hostEntity.getPublicHostName();
     String state = getState().toString();
@@ -1168,9 +1210,10 @@ public class ServiceComponentHostImpl implements 
ServiceComponentHost {
       desiredRepositoryVersion = repositoryVersion.getVersion();
     }
 
-    ServiceComponentHostResponse r = new 
ServiceComponentHostResponse(clusterName, serviceName,
-        serviceComponentName, displayName, hostName, publicHostName, state, 
getVersion(),
-        desiredState, desiredStackId, desiredRepositoryVersion, 
componentAdminState);
+    ServiceComponentHostResponse r = new 
ServiceComponentHostResponse(clusterId, clusterName, 
service.getServiceGroupId(),
+            service.getServiceGroupName(), service.getServiceId(), 
service.getName(), service.getServiceDisplayName(),
+            hostComponentId, serviceComponentName, displayName, hostName, 
publicHostName, state, getVersion(),
+            desiredState, desiredStackId, desiredRepositoryVersion, 
componentAdminState);
 
     r.setActualConfigs(actualConfigs);
     r.setUpgradeState(upgradeState);
@@ -1213,7 +1256,7 @@ public class ServiceComponentHostImpl implements 
ServiceComponentHost {
   void persistEntities(HostEntity hostEntity, HostComponentStateEntity 
stateEntity,
       HostComponentDesiredStateEntity desiredStateEntity) {
     ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = 
serviceComponentDesiredStateDAO.findByName(
-        serviceComponent.getClusterId(), serviceComponent.getServiceName(),
+        serviceComponent.getClusterId(), serviceComponent.getServiceGroupId(), 
serviceComponent.getServiceId(),
         serviceComponent.getName());
 
     
desiredStateEntity.setServiceComponentDesiredStateEntity(serviceComponentDesiredStateEntity);
@@ -1264,12 +1307,14 @@ public class ServiceComponentHostImpl implements 
ServiceComponentHost {
       String stackVersion = stackId.getStackVersion();
       String stackName = stackId.getStackName();
       String serviceName = getServiceName();
+      String serviceDisplayName = getServiceDisplayName();
+      String serviceGroupName  = getServiceGroupName();
       String componentName = getServiceComponentName();
       String hostName = getHostName();
       boolean recoveryEnabled = isRecoveryEnabled();
 
       ServiceComponentUninstalledEvent event = new 
ServiceComponentUninstalledEvent(
-          clusterId, stackName, stackVersion, serviceName, componentName,
+          clusterId, stackName, stackVersion, serviceName, serviceDisplayName, 
serviceGroupName, componentName,
           hostName, recoveryEnabled);
 
       eventPublisher.publish(event);

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
index e9359ef..4615ff6 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostSummary.java
@@ -67,9 +67,10 @@ public class ServiceComponentHostSummary {
     String stackVersion = repositoryVersion.getStackVersion();
 
     for (HostComponentStateEntity hostComponentStateEntity : 
allHostComponents) {
-      ComponentInfo compInfo = ambariMetaInfo.getComponent(
-          stackName, stackVersion, hostComponentStateEntity.getServiceName(),
-          hostComponentStateEntity.getComponentName());
+      String serviceDisplayName  = 
hostComponentStateEntity.getServiceComponentDesiredStateEntity().
+        getClusterServiceEntity().getServiceDisplayName();
+      ComponentInfo compInfo = ambariMetaInfo.getComponent(stackName, 
stackVersion, serviceDisplayName,
+                                                           
hostComponentStateEntity.getComponentName());
 
       if (!compInfo.isVersionAdvertised()) {
         // Some Components cannot advertise a version. E.g., ZKF, 
AMBARI_METRICS, Kerberos

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/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 662f9aa..b66a169 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
@@ -243,7 +243,8 @@ public class AmbariContext {
     Set<ServiceComponentRequest> componentRequests = new HashSet<>();
     for (String service : services) {
       String credentialStoreEnabled = 
topology.getBlueprint().getCredentialStoreEnabled(service);
-      serviceRequests.add(new ServiceRequest(clusterName, service, 
repositoryVersionId, null, credentialStoreEnabled));
+      serviceRequests.add(new ServiceRequest(clusterName, null, service, 
service,
+              repositoryVersionId, null, credentialStoreEnabled));
 
       for (String component : topology.getBlueprint().getComponents(service)) {
         String recoveryEnabled = 
topology.getBlueprint().getRecoveryEnabled(service, component);
@@ -318,7 +319,7 @@ public class AmbariContext {
         //todo: handle this in a generic manner.  These checks are all over 
the code
         try {
           if (cluster.getService(service) != null && 
!component.equals("AMBARI_SERVER")) {
-            requests.add(new ServiceComponentHostRequest(clusterName, service, 
component, hostName, null));
+            requests.add(new ServiceComponentHostRequest(clusterName, null, 
service, component, hostName, null));
           }
         } catch(AmbariException se) {
           LOG.warn("Service already deleted from cluster: {}", service);

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/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 b1a13d3..1781fdd 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -160,11 +160,14 @@ CREATE TABLE servicegroups (
   CONSTRAINT FK_servicegroups_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE clusterservices (
+  id BIGINT NOT NULL,
   service_name VARCHAR(255) NOT NULL,
+  service_display_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
   service_enabled INTEGER NOT NULL,
-  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
-  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (id, service_group_id, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (service_group_id, 
cluster_id) REFERENCES servicegroups (id, cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
@@ -195,15 +198,16 @@ CREATE TABLE servicecomponentdesiredstate (
   id BIGINT NOT NULL,
   component_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   desired_repo_version_id BIGINT NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
   recovery_enabled SMALLINT NOT NULL DEFAULT 0,
   repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, 
cluster_id),
+  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_id, 
service_group_id, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   id BIGINT NOT NULL,
@@ -211,14 +215,15 @@ CREATE TABLE hostcomponentdesiredstate (
   component_name VARCHAR(255) NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   admin_state VARCHAR(32),
   maintenance_state VARCHAR(32) NOT NULL,
   restart_required SMALLINT NOT NULL DEFAULT 0,
   CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_hcdesiredstate_name UNIQUE (component_name, service_name, 
host_id, cluster_id),
+  CONSTRAINT UQ_hcdesiredstate_name UNIQUE (component_name, service_id, 
host_id, service_group_id, cluster_id),
   CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id),
-  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
 
 CREATE TABLE hostcomponentstate (
@@ -228,13 +233,14 @@ CREATE TABLE hostcomponentstate (
   version VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN',
   current_state VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id),
   CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES 
hosts (host_id),
-  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
-CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, 
component_name, service_name, cluster_id);
+CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, 
component_name, service_id, cluster_id);
 
 CREATE TABLE hoststate (
   agent_version VARCHAR(255) NOT NULL,
@@ -259,15 +265,16 @@ CREATE TABLE host_version (
 
 CREATE TABLE servicedesiredstate (
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   desired_host_role_mapping INTEGER NOT NULL,
   desired_repo_version_id BIGINT NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL,
   credential_store_enabled SMALLINT NOT NULL DEFAULT 0,
-  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_group_id, 
service_id),
   CONSTRAINT FK_repo_version_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
 CREATE TABLE adminprincipaltype (
   principal_type_id INTEGER NOT NULL,
@@ -1069,6 +1076,8 @@ INSERT INTO ambari_sequences (sequence_name, 
sequence_value)
   UNION ALL
   SELECT 'service_group_id_seq', 1 FROM SYSIBM.SYSDUMMY1
   UNION ALL
+  SELECT 'service_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  UNION ALL
   SELECT 'host_id_seq', 0 FROM SYSIBM.SYSDUMMY1
   UNION ALL
   SELECT 'user_id_seq', 2 FROM SYSIBM.SYSDUMMY1

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/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 2beee0f..1d885b5 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -179,11 +179,14 @@ CREATE TABLE servicegroups (
   CONSTRAINT FK_servicegroups_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE clusterservices (
+  id BIGINT NOT NULL,
   service_name VARCHAR(255) NOT NULL,
+  service_display_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
   service_enabled INTEGER NOT NULL,
-  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
-  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (id, service_group_id, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (service_group_id, 
cluster_id) REFERENCES servicegroups (id, cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
@@ -214,15 +217,16 @@ CREATE TABLE servicecomponentdesiredstate (
   id BIGINT NOT NULL,
   component_name VARCHAR(100) NOT NULL,
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   desired_repo_version_id BIGINT NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(100) NOT NULL,
   recovery_enabled SMALLINT NOT NULL DEFAULT 0,
   repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, 
cluster_id),
+  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_id, 
service_group_id, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   id BIGINT NOT NULL,
@@ -230,14 +234,15 @@ CREATE TABLE hostcomponentdesiredstate (
   component_name VARCHAR(100) NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  service_name VARCHAR(100) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   admin_state VARCHAR(32),
   maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
   restart_required TINYINT(1) NOT NULL DEFAULT 0,
   CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_hcdesiredstate_name UNIQUE (component_name, service_name, 
host_id, cluster_id),
+  CONSTRAINT UQ_hcdesiredstate_name UNIQUE (component_name, service_id, 
host_id, service_group_id, cluster_id),
   CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id),
-  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
 
 CREATE TABLE hostcomponentstate (
@@ -247,13 +252,14 @@ CREATE TABLE hostcomponentstate (
   version VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN',
   current_state VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  service_name VARCHAR(100) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id),
   CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES 
hosts (host_id),
-  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
-CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, 
component_name, service_name, cluster_id);
+CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, 
component_name, service_id, cluster_id);
 
 CREATE TABLE hoststate (
   agent_version VARCHAR(255) NOT NULL,
@@ -278,15 +284,16 @@ CREATE TABLE host_version (
 
 CREATE TABLE servicedesiredstate (
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   desired_host_role_mapping INTEGER NOT NULL,
   desired_repo_version_id BIGINT NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
   credential_store_enabled SMALLINT NOT NULL DEFAULT 0,
-  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_group_id, 
service_id),
   CONSTRAINT FK_repo_version_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
 CREATE TABLE adminprincipaltype (
   principal_type_id INTEGER NOT NULL,
@@ -1083,6 +1090,7 @@ CREATE INDEX idx_alert_notice_state on 
alert_notice(notify_state);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES
   ('cluster_id_seq', 1),
   ('service_group_id_seq', 1),
+  ('service_id_seq', 1),
   ('host_id_seq', 0),
   ('host_role_command_id_seq', 1),
   ('user_id_seq', 2),

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/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 190eb8b..3988396 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -161,11 +161,14 @@ CREATE TABLE servicegroups (
   CONSTRAINT FK_servicegroups_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE clusterservices (
+  id NUMBER(19) NOT NULL,
   service_name VARCHAR2(255) NOT NULL,
+  service_display_name VARCHAR(255) NOT NULL,
   cluster_id NUMBER(19) NOT NULL,
+  service_group_id NUMBER(19) NOT NULL,
   service_enabled NUMBER(10) NOT NULL,
-  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
-  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (id, service_group_id, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (service_group_id, 
cluster_id) REFERENCES servicegroups (id, cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id NUMBER(19) NOT NULL,
@@ -196,15 +199,16 @@ CREATE TABLE servicecomponentdesiredstate (
   id NUMBER(19) NOT NULL,
   component_name VARCHAR2(255) NOT NULL,
   cluster_id NUMBER(19) NOT NULL,
+  service_group_id NUMBER(19) NOT NULL,
+  service_id NUMBER(19) NOT NULL,
   desired_repo_version_id NUMBER(19) NOT NULL,
   desired_state VARCHAR2(255) NOT NULL,
-  service_name VARCHAR2(255) NOT NULL,
   recovery_enabled SMALLINT DEFAULT 0 NOT NULL,
   repo_state VARCHAR2(255) DEFAULT 'NOT_REQUIRED' NOT NULL,
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, 
cluster_id),
+  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_id, 
service_group_id, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   id NUMBER(19) NOT NULL,
@@ -212,14 +216,15 @@ CREATE TABLE hostcomponentdesiredstate (
   component_name VARCHAR2(255) NOT NULL,
   desired_state VARCHAR2(255) NOT NULL,
   host_id NUMBER(19) NOT NULL,
-  service_name VARCHAR2(255) NOT NULL,
+  service_group_id NUMBER(19) NOT NULL,
+  service_id NUMBER(19) NOT NULL,
   admin_state VARCHAR2(32) NULL,
   maintenance_state VARCHAR2(32) NOT NULL,
   restart_required NUMBER(1) DEFAULT 0 NOT NULL,
   CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_hcdesiredstate_name UNIQUE (component_name, service_name, 
host_id, cluster_id),
+  CONSTRAINT UQ_hcdesiredstate_name UNIQUE (component_name, service_id, 
host_id, service_group_id, host_id, cluster_id),
   CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id),
-  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
 CREATE TABLE hostcomponentstate (
   id NUMBER(19) NOT NULL,
@@ -228,11 +233,12 @@ CREATE TABLE hostcomponentstate (
   version VARCHAR2(32) DEFAULT 'UNKNOWN' NOT NULL,
   current_state VARCHAR2(255) NOT NULL,
   host_id NUMBER(19) NOT NULL,
-  service_name VARCHAR2(255) NOT NULL,
+  service_group_id NUMBER(19) NOT NULL,
+  service_id NUMBER(19) NOT NULL,
   upgrade_state VARCHAR2(32) DEFAULT 'NONE' NOT NULL,
   CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id),
   CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES 
hosts (host_id),
-  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
 CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, 
component_name, service_name, cluster_id);
 
@@ -259,15 +265,16 @@ CREATE TABLE host_version (
 
 CREATE TABLE servicedesiredstate (
   cluster_id NUMBER(19) NOT NULL,
+  service_group_id NUMBER(19) NOT NULL,
+  service_id NUMBER(19) NOT NULL,
   desired_host_role_mapping NUMBER(10) NOT NULL,
   desired_repo_version_id NUMBER(19) NOT NULL,
   desired_state VARCHAR2(255) NOT NULL,
-  service_name VARCHAR2(255) NOT NULL,
   maintenance_state VARCHAR2(32) NOT NULL,
   credential_store_enabled SMALLINT DEFAULT 0 NOT NULL,
-  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_group_id, 
service_id),
   CONSTRAINT FK_repo_version_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_group_id, 
service_id, cluster_id) REFERENCES clusterservices (service_group_id, id, 
cluster_id));
 
 CREATE TABLE adminprincipaltype (
   principal_type_id NUMBER(10) NOT NULL,
@@ -1063,6 +1070,7 @@ CREATE INDEX idx_alert_notice_state on 
alert_notice(notify_state);
 -- In order for the first ID to be 1, must initialize the ambari_sequences 
table with a sequence_value of 0.
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('host_role_command_id_seq', 0);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('service_group_id_seq', 1);
+INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('service_id_seq', 1);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('user_id_seq', 1);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('group_id_seq', 0);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('member_id_seq', 0);

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/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 0f6b075..68ee541 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -160,11 +160,14 @@ CREATE TABLE servicegroups (
   CONSTRAINT FK_servicegroups_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE clusterservices (
+  id BIGINT NOT NULL,
   service_name VARCHAR(255) NOT NULL,
+  service_display_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
   service_enabled INTEGER NOT NULL,
-  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
-  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (id, service_group_id, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (service_group_id, 
cluster_id) REFERENCES servicegroups (id, cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
@@ -194,15 +197,16 @@ CREATE TABLE servicecomponentdesiredstate (
   id BIGINT NOT NULL,
   component_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   desired_repo_version_id BIGINT NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
   recovery_enabled SMALLINT NOT NULL DEFAULT 0,
   repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, 
cluster_id),
+  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_id, 
service_group_id, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   id BIGINT NOT NULL,
@@ -210,14 +214,15 @@ CREATE TABLE hostcomponentdesiredstate (
   component_name VARCHAR(255) NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   admin_state VARCHAR(32),
   maintenance_state VARCHAR(32) NOT NULL,
   restart_required SMALLINT NOT NULL DEFAULT 0,
   CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_hcdesiredstate_name UNIQUE (component_name, service_name, 
host_id, cluster_id),
+  CONSTRAINT UQ_hcdesiredstate_name UNIQUE (component_name, service_id, 
host_id, service_group_id, cluster_id),
   CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id),
-  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
 CREATE TABLE hostcomponentstate (
   id BIGINT NOT NULL,
@@ -226,13 +231,14 @@ CREATE TABLE hostcomponentstate (
   version VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN',
   current_state VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id),
   CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES 
hosts (host_id),
-  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
-CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, 
component_name, service_name, cluster_id);
+CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, 
component_name, service_id, cluster_id);
 
 CREATE TABLE hoststate (
   agent_version VARCHAR(255) NOT NULL,
@@ -257,15 +263,16 @@ CREATE TABLE host_version (
 
 CREATE TABLE servicedesiredstate (
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   desired_host_role_mapping INTEGER NOT NULL,
   desired_repo_version_id BIGINT NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL,
   credential_store_enabled SMALLINT NOT NULL DEFAULT 0,
-  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_group_id, 
service_id),
   CONSTRAINT FK_repo_version_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
 
 CREATE TABLE adminprincipaltype (
@@ -1064,6 +1071,7 @@ BEGIN;
 INSERT INTO ambari_sequences (sequence_name, sequence_value) VALUES
   ('cluster_id_seq', 1),
   ('service_group_id_seq', 1),
+  ('service_id_seq', 1),
   ('host_id_seq', 0),
   ('user_id_seq', 2),
   ('group_id_seq', 1),

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/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 668d1e7..f8d2002 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -159,11 +159,14 @@ CREATE TABLE servicegroups (
   CONSTRAINT FK_servicegroups_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE clusterservices (
+  id NUMERIC(19) NOT NULL,
   service_name VARCHAR(255) NOT NULL,
+  service_display_name VARCHAR(255) NOT NULL,
   cluster_id NUMERIC(19) NOT NULL,
+  service_group_id NUMERIC(19) NOT NULL,
   service_enabled INTEGER NOT NULL,
-  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
-  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (id, service_group_id, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (service_group_id, 
cluster_id) REFERENCES servicegroups (id, cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id NUMERIC(19) NOT NULL,
@@ -193,15 +196,16 @@ CREATE TABLE servicecomponentdesiredstate (
   id NUMERIC(19) NOT NULL,
   component_name VARCHAR(255) NOT NULL,
   cluster_id NUMERIC(19) NOT NULL,
+  service_group_id NUMERIC(19) NOT NULL,
+  service_id NUMERIC(19) NOT NULL,
   desired_repo_version_id NUMERIC(19) NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
   recovery_enabled SMALLINT NOT NULL DEFAULT 0,
   repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, 
cluster_id),
+  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_id, 
service_group_id, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   id NUMERIC(19) NOT NULL,
@@ -209,14 +213,15 @@ CREATE TABLE hostcomponentdesiredstate (
   component_name VARCHAR(255) NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
   host_id NUMERIC(19) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   admin_state VARCHAR(32),
   maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
   restart_required BIT NOT NULL DEFAULT 0,
   CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_hcdesiredstate_name UNIQUE (component_name, service_name, 
host_id, cluster_id),
+  CONSTRAINT UQ_hcdesiredstate_name UNIQUE (component_name, service_id, 
host_id, service_group_id, cluster_id),
   CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts 
(host_id),
-  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
 CREATE TABLE hostcomponentstate (
   id NUMERIC(19) NOT NULL,
@@ -225,11 +230,12 @@ CREATE TABLE hostcomponentstate (
   version VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN',
   current_state VARCHAR(255) NOT NULL,
   host_id NUMERIC(19) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   CONSTRAINT PK_hostcomponentstate PRIMARY KEY (id),
   CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES 
hosts (host_id),
-  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
 CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, 
component_name, service_name, cluster_id);
 
@@ -256,15 +262,16 @@ CREATE TABLE host_version (
 
 CREATE TABLE servicedesiredstate (
   cluster_id NUMERIC(19) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   desired_host_role_mapping INTEGER NOT NULL,
   desired_repo_version_id NUMERIC(19) NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
   credential_store_enabled SMALLINT NOT NULL DEFAULT 0,
-  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_group_id, 
service_id),
   CONSTRAINT FK_repo_version_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
 CREATE TABLE adminprincipaltype (
   principal_type_id INTEGER NOT NULL,
@@ -1061,6 +1068,7 @@ CREATE INDEX idx_alert_notice_state on 
alert_notice(notify_state);
 -- In order for the first ID to be 1, must initialize the ambari_sequences 
table with a sequence_value of 0.
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('cluster_id_seq', 1);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('service_group_id_seq', 1);
+INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('service_id_seq', 1);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('host_id_seq', 0);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('host_role_command_id_seq', 1);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values 
('user_id_seq', 2);

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/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 d7afe73..4f7406c 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -173,11 +173,14 @@ CREATE TABLE servicegroups (
   CONSTRAINT FK_servicegroups_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
 
 CREATE TABLE clusterservices (
+  id BIGINT NOT NULL,
   service_name VARCHAR(255) NOT NULL,
+  service_display_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
   service_enabled INT NOT NULL,
-  CONSTRAINT PK_clusterservices PRIMARY KEY CLUSTERED (service_name, 
cluster_id),
-  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES 
clusters (cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (id, service_group_id, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (service_group_id, 
cluster_id) REFERENCES servicegroups (id, cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
@@ -207,15 +210,16 @@ CREATE TABLE servicecomponentdesiredstate (
   id BIGINT NOT NULL,
   component_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   desired_repo_version_id BIGINT NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
   recovery_enabled SMALLINT NOT NULL DEFAULT 0,
   repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
   CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, 
cluster_id),
+  CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_id, 
service_group_id, cluster_id),
   CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_id, 
service_group_id, cluster_id) REFERENCES clusterservices (id, service_group_id, 
cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   id BIGINT NOT NULL,
@@ -223,13 +227,14 @@ CREATE TABLE hostcomponentdesiredstate (
   component_name VARCHAR(255) NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   admin_state VARCHAR(32),
   maintenance_state VARCHAR(32) NOT NULL,
   restart_required BIT NOT NULL DEFAULT 0,
   CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY CLUSTERED (id),
-  CONSTRAINT UQ_hcdesiredstate_name UNIQUE NONCLUSTERED (component_name, 
service_name, host_id, cluster_id),
-  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id),
+  CONSTRAINT UQ_hcdesiredstate_name UNIQUE NONCLUSTERED (component_name, 
service_id, host_id, service_group_id, cluster_id),
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id),
   CONSTRAINT hstcmponentdesiredstatehstid FOREIGN KEY (host_id) REFERENCES 
hosts (host_id));
 
 
@@ -240,11 +245,12 @@ CREATE TABLE hostcomponentstate (
   version VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN',
   current_state VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   CONSTRAINT PK_hostcomponentstate PRIMARY KEY CLUSTERED (id),
   CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES 
hosts (host_id),
-  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_name, cluster_id) REFERENCES servicecomponentdesiredstate 
(component_name, service_name, cluster_id));
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, 
service_id, service_group_id, cluster_id) REFERENCES 
servicecomponentdesiredstate (component_name, service_id, service_group_id, 
cluster_id));
 
 CREATE NONCLUSTERED INDEX idx_host_component_state on 
hostcomponentstate(host_id, component_name, service_name, cluster_id);
 
@@ -261,15 +267,16 @@ CREATE TABLE hoststate (
 
 CREATE TABLE servicedesiredstate (
   cluster_id BIGINT NOT NULL,
+  service_group_id BIGINT NOT NULL,
+  service_id BIGINT NOT NULL,
   desired_host_role_mapping INTEGER NOT NULL,
   desired_repo_version_id BIGINT NOT NULL,
   desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL,
   credential_store_enabled SMALLINT NOT NULL DEFAULT 0,
-  CONSTRAINT PK_servicedesiredstate PRIMARY KEY CLUSTERED 
(cluster_id,service_name),
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY CLUSTERED (cluster_id, 
service_group_id, service_id),
   CONSTRAINT FK_repo_version_id FOREIGN KEY (desired_repo_version_id) 
REFERENCES repo_version (repo_version_id),
-  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, 
cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_group_id, 
service_id, cluster_id) REFERENCES clusterservices (service_group_id, id, 
cluster_id));
 
 CREATE TABLE adminprincipaltype (
   principal_type_id INTEGER NOT NULL,
@@ -1087,7 +1094,8 @@ BEGIN TRANSACTION
   INSERT INTO ambari_sequences (sequence_name, [sequence_value])
   VALUES
     ('cluster_id_seq', 1),
-    ('service_group_id_seq', 1)
+    ('service_group_id_seq', 1),
+    ('service_id_seq', 1),
     ('host_id_seq', 0),
     ('user_id_seq', 2),
     ('group_id_seq', 1),

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-server/src/main/resources/key_properties.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/key_properties.json 
b/ambari-server/src/main/resources/key_properties.json
index 5d76062..17d7cc4 100644
--- a/ambari-server/src/main/resources/key_properties.json
+++ b/ambari-server/src/main/resources/key_properties.json
@@ -8,7 +8,9 @@
   },
   "HostComponent": {
     "Cluster": "HostRoles/cluster_name",
+    "ServiceGroup": "HostRoles/service_group_name",
     "Host": "HostRoles/host_name",
+    "Service": "HostRoles/service_display_name",
     "HostComponent": "HostRoles/component_name",
     "Component": "HostRoles/component_name"
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-server/src/main/resources/properties.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/properties.json 
b/ambari-server/src/main/resources/properties.json
index 11ca7f6..c691ca9 100644
--- a/ambari-server/src/main/resources/properties.json
+++ b/ambari-server/src/main/resources/properties.json
@@ -41,9 +41,13 @@
     "HostComponent":[
         "HostRoles/role_id",
         "HostRoles/cluster_name",
+        "HostRoles/cluster_id",
+        "HostRoles/service_group_id",
+        "HostRoles/service_group_name",
         "HostRoles/host_name",
         "HostRoles/public_host_name",
         "HostRoles/component_name",
+        "HostRoles/id",
         "HostRoles/display_name",
         "HostRoles/state",
         "HostRoles/desired_state",
@@ -55,7 +59,9 @@
         "HostRoles/stale_configs",
         "HostRoles/desired_admin_state",
         "HostRoles/maintenance_state",
+        "HostRoles/service_id",
         "HostRoles/service_name",
+        "HostRoles/service_display_name",
         "HostRoles/upgrade_state",
         "_"
     ],

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
index 58d4c3e..22860ce 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalogHelper.java
@@ -134,7 +134,8 @@ public class UpgradeCatalogHelper {
     ServiceDesiredStateEntity serviceDesiredStateEntity = new 
ServiceDesiredStateEntity();
     
serviceDesiredStateEntity.setDesiredRepositoryVersion(desiredRepositoryVersion);
     serviceDesiredStateEntity.setClusterId(1L);
-    serviceDesiredStateEntity.setServiceName(serviceName);
+    serviceDesiredStateEntity.setServiceGroupId(1L);
+    serviceDesiredStateEntity.setServiceId(1L);
     serviceDesiredStateEntity.setClusterServiceEntity(clusterServiceEntity);
 
     
clusterServiceEntity.setServiceDesiredStateEntity(serviceDesiredStateEntity);
@@ -179,7 +180,8 @@ public class UpgradeCatalogHelper {
     ServiceComponentDesiredStateEntity componentDesiredStateEntity = new 
ServiceComponentDesiredStateEntity();
     componentDesiredStateEntity.setClusterServiceEntity(clusterServiceEntity);
     componentDesiredStateEntity.setComponentName(componentName);
-    
componentDesiredStateEntity.setServiceName(clusterServiceEntity.getServiceName());
+    
componentDesiredStateEntity.setServiceGroupId(clusterServiceEntity.getServiceGroupId());
+    
componentDesiredStateEntity.setServiceId(clusterServiceEntity.getServiceId());
     componentDesiredStateEntity.setClusterServiceEntity(clusterServiceEntity);
     
componentDesiredStateEntity.setClusterId(clusterServiceEntity.getClusterId());
     
componentDesiredStateEntity.setDesiredRepositoryVersion(desiredRepositoryVersion);
@@ -190,7 +192,8 @@ public class UpgradeCatalogHelper {
     HostComponentDesiredStateEntity hostComponentDesiredStateEntity = new 
HostComponentDesiredStateEntity();
     hostComponentDesiredStateEntity.setClusterId(clusterEntity.getClusterId());
     hostComponentDesiredStateEntity.setComponentName(componentName);
-    
hostComponentDesiredStateEntity.setServiceName(clusterServiceEntity.getServiceName());
+    
hostComponentDesiredStateEntity.setServiceGroupId(clusterServiceEntity.getServiceGroupId());
+    
hostComponentDesiredStateEntity.setServiceId(clusterServiceEntity.getServiceId());
     
hostComponentDesiredStateEntity.setAdminState(HostComponentAdminState.INSERVICE);
     
hostComponentDesiredStateEntity.setServiceComponentDesiredStateEntity(componentDesiredStateEntity);
     hostComponentDesiredStateEntity.setHostEntity(hostEntity);
@@ -199,7 +202,8 @@ public class UpgradeCatalogHelper {
     HostComponentStateEntity hostComponentStateEntity = new 
HostComponentStateEntity();
     hostComponentStateEntity.setHostEntity(hostEntity);
     hostComponentStateEntity.setComponentName(componentName);
-    
hostComponentStateEntity.setServiceName(clusterServiceEntity.getServiceName());
+    
hostComponentStateEntity.setServiceGroupId(clusterServiceEntity.getServiceGroupId());
+    hostComponentStateEntity.setServiceId(clusterServiceEntity.getServiceId());
     hostComponentStateEntity.setClusterId(clusterEntity.getClusterId());
     
hostComponentStateEntity.setServiceComponentDesiredStateEntity(componentDesiredStateEntity);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-web/app/app.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/app.js b/ambari-web/app/app.js
index 2c638e4..2526baa 100644
--- a/ambari-web/app/app.js
+++ b/ambari-web/app/app.js
@@ -48,6 +48,12 @@ module.exports = Em.Application.create({
   }.property('auth'),
 
   /**
+   * default/base service group name ('core')
+   * @type {String}
+   */
+  defaultServiceGroupName: 'core',
+
+  /**
    * @type {boolean}
    * @default false
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-web/app/controllers/global/update_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/update_controller.js 
b/ambari-web/app/controllers/global/update_controller.js
index 8a3f984..7a6f228 100644
--- a/ambari-web/app/controllers/global/update_controller.js
+++ b/ambari-web/app/controllers/global/update_controller.js
@@ -457,6 +457,7 @@ App.UpdateController = Em.Controller.extend({
       realUrl = '/components/?' + flumeHandlerParam + atsHandlerParam + 
haComponents +
         'ServiceComponentInfo/category=MASTER&fields=' +
         'ServiceComponentInfo/service_name,' +
+        'ServiceComponentInfo/service_display_name,' +
         'host_components/HostRoles/display_name,' +
         'host_components/HostRoles/host_name,' +
         'host_components/HostRoles/public_host_name,' +
@@ -536,7 +537,7 @@ App.UpdateController = Em.Controller.extend({
 
   updateComponentsState: function (callback) {
     var testUrl = '/data/services/HDP2/components_state.json';
-    var realUrl = '/components/?fields=ServiceComponentInfo/service_name,' +
+    var realUrl = 
'/components/?fields=ServiceComponentInfo/service_name,ServiceComponentInfo/service_display_name,'
 +
       
'ServiceComponentInfo/category,ServiceComponentInfo/installed_count,ServiceComponentInfo/started_count,ServiceComponentInfo/init_count,ServiceComponentInfo/install_failed_count,ServiceComponentInfo/unknown_count,ServiceComponentInfo/total_count,ServiceComponentInfo/display_name,host_components/HostRoles/host_name&minimal_response=true';
     var url = this.getUrl(testUrl, realUrl);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-web/app/controllers/main/admin/kerberos/step3_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/kerberos/step3_controller.js 
b/ambari-web/app/controllers/main/admin/kerberos/step3_controller.js
index 15be4f9..ee6153b 100644
--- a/ambari-web/app/controllers/main/admin/kerberos/step3_controller.js
+++ b/ambari-web/app/controllers/main/admin/kerberos/step3_controller.js
@@ -45,7 +45,7 @@ App.KerberosWizardStep3Controller = 
App.KerberosProgressPageController.extend({
           data: {
             context: Em.I18n.t('requestInfo.kerberosService'),
             ServiceInfo: {"state": "INSTALLED"},
-            urlParams: 
"ServiceInfo/state=INSTALLED&ServiceInfo/service_name=KERBEROS"
+            urlParams: 
"ServiceInfo/state=INSTALLED&ServiceInfo/service_display_name=KERBEROS"
           },
           success: 'startPolling',
           error: 'onTaskError'

http://git-wip-us.apache.org/repos/asf/ambari/blob/f3520c09/ambari-web/app/controllers/main/service/add_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/add_controller.js 
b/ambari-web/app/controllers/main/service/add_controller.js
index c11bcf2..0c54e30 100644
--- a/ambari-web/app/controllers/main/service/add_controller.js
+++ b/ambari-web/app/controllers/main/service/add_controller.js
@@ -428,7 +428,7 @@ App.AddServiceController = 
App.WizardController.extend(App.AddSecurityConfigs, {
     return {
       "context": Em.I18n.t('requestInfo.installServices'),
       "ServiceInfo": {"state": "INSTALLED"},
-      "urlParams": "ServiceInfo/service_name.in(" + selectedServices.join(',') 
+ ")"
+      "urlParams": "ServiceInfo/service_display_name.in(" + 
selectedServices.join(',') + ")"
     };
   },
 

Reply via email to