You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2015/09/19 01:12:35 UTC

ambari git commit: AMBARI-12949 - Downgrade fails with err: 500 status code received on POST method for API: /api/vi/clusters/mycluster/upgrades (Di Li via jonathanhurley)

Repository: ambari
Updated Branches:
  refs/heads/trunk 9dd623abb -> c8595d6e9


AMBARI-12949 - Downgrade fails with err: 500 status code received on POST method for API: /api/vi/clusters/mycluster/upgrades (Di Li via jonathanhurley)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c8595d6e
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c8595d6e
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c8595d6e

Branch: refs/heads/trunk
Commit: c8595d6e9a60584f371a513c8dd3579a53f66d69
Parents: 9dd623a
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Fri Sep 18 19:12:19 2015 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Fri Sep 18 19:12:19 2015 -0400

----------------------------------------------------------------------
 .../ambari/server/orm/dao/ClusterDAO.java       |  26 ++
 .../orm/entities/ClusterConfigEntity.java       |   5 +-
 .../server/state/cluster/ClusterImpl.java       |  49 ++-
 .../server/orm/dao/ServiceConfigDAOTest.java    | 346 ++++++++++++++++++-
 4 files changed, 410 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c8595d6e/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
index 6e55128..609d0de 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java
@@ -203,6 +203,32 @@ public class ClusterDAO {
   }
 
   /**
+   * Gets the latest configurations for a given stack for all of the
+   * configurations of the specified cluster.
+   *
+   * @param clusterId
+   *          the cluster that the service is a part of.
+   * @param stackId
+   *          the stack to get the latest configurations for (not {@code null}).
+   * @return the latest configurations for the specified cluster and stack.
+   */
+  @RequiresSession
+  public List<ClusterConfigMappingEntity> getClusterConfigMappingsByStack(long clusterId,
+      StackId stackId) {
+    StackEntity stackEntity = stackDAO.find(stackId.getStackName(),
+        stackId.getStackVersion());
+
+    TypedQuery<ClusterConfigMappingEntity> query = entityManagerProvider.get().createNamedQuery(
+        "ClusterConfigEntity.findClusterConfigMappingsByStack",
+        ClusterConfigMappingEntity.class);
+
+    query.setParameter("clusterId", clusterId);
+    query.setParameter("stack", stackEntity);
+
+    return daoUtils.selectList(query);
+  }  
+  
+  /**
    * Create Cluster entity in Database
    * @param clusterEntity entity to create
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/c8595d6e/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterConfigEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterConfigEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterConfigEntity.java
index 899ffe8..d8d7aa4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterConfigEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterConfigEntity.java
@@ -51,7 +51,10 @@ import javax.persistence.UniqueConstraint;
 @NamedQueries({
     @NamedQuery(name = "ClusterConfigEntity.findNextConfigVersion", query = "SELECT COALESCE(MAX(clusterConfig.version),0) + 1 as nextVersion FROM ClusterConfigEntity clusterConfig WHERE clusterConfig.type=:configType AND clusterConfig.clusterId=:clusterId"),
     @NamedQuery(name = "ClusterConfigEntity.findAllConfigsByStack", query = "SELECT clusterConfig FROM ClusterConfigEntity clusterConfig WHERE clusterConfig.clusterId=:clusterId AND clusterConfig.stack=:stack"),
-    @NamedQuery(name = "ClusterConfigEntity.findLatestConfigsByStack", query = "SELECT clusterConfig FROM ClusterConfigEntity clusterConfig WHERE clusterConfig.clusterId=:clusterId AND clusterConfig.timestamp = (SELECT MAX(clusterConfig2.timestamp) FROM ClusterConfigEntity clusterConfig2 WHERE clusterConfig2.clusterId=:clusterId AND clusterConfig2.stack=:stack AND clusterConfig2.type = clusterConfig.type)") })
+    @NamedQuery(name = "ClusterConfigEntity.findLatestConfigsByStack", query = "SELECT clusterConfig FROM ClusterConfigEntity clusterConfig WHERE clusterConfig.clusterId=:clusterId AND clusterConfig.timestamp = (SELECT MAX(clusterConfig2.timestamp) FROM ClusterConfigEntity clusterConfig2 WHERE clusterConfig2.clusterId=:clusterId AND clusterConfig2.stack=:stack AND clusterConfig2.type = clusterConfig.type)"),
+    @NamedQuery(name = "ClusterConfigEntity.findClusterConfigMappingsByStack", query = "SELECT clusterConfigMapping FROM ClusterConfigMappingEntity clusterConfigMapping WHERE clusterConfigMapping.clusterId=:clusterId and clusterConfigMapping.tag in ( select clusterConfig.tag from ClusterConfigEntity clusterConfig where clusterConfig.stack = :stack)")
+})
+
 public class ClusterConfigEntity {
 
   @Id

http://git-wip-us.apache.org/repos/asf/ambari/blob/c8595d6e/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 4b20cba..eda2534 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
@@ -2855,27 +2855,29 @@ public class ClusterImpl implements Cluster {
     clusterGlobalLock.writeLock().lock();
     try {
       Collection<ClusterConfigMappingEntity> configMappingEntities = clusterEntity.getConfigMappingEntities();
-
+      
       // disable previous config
       for (ClusterConfigMappingEntity e : configMappingEntities) {
+        LOG.debug("{} with tag {} is unselected", e.getType(), e.getTag());
         e.setSelected(0);
       }
-
-      List<ClusterConfigEntity> clusterConfigsToMakeSelected = clusterDAO.getLatestConfigurations(
-          clusterEntity.getClusterId(), stackId);
-
-      for( ClusterConfigEntity clusterConfigToMakeSelected : clusterConfigsToMakeSelected ){
-        for (ClusterConfigMappingEntity configMappingEntity : configMappingEntities) {
-          String tag = configMappingEntity.getTag();
-          String type = configMappingEntity.getType();
-
-          if (clusterConfigToMakeSelected.getTag().equals(tag)
-              && clusterConfigToMakeSelected.getType().equals(type)) {
-            configMappingEntity.setSelected(1);
+      
+      List<ClusterConfigMappingEntity> clusterConfigMappingEntities = clusterDAO.getClusterConfigMappingsByStack(clusterEntity.getClusterId(), stackId);
+      Collection<ClusterConfigMappingEntity> latestConfigMappingByStack = getLatestConfigMapping(clusterConfigMappingEntities);
+      
+      for(ClusterConfigMappingEntity e: configMappingEntities){
+        String type = e.getType(); //loop thru all the config mappings
+        String tag =  e.getTag();
+        for (ClusterConfigMappingEntity latest : latestConfigMappingByStack) {
+          String t = latest.getType();
+          String tagLatest = latest.getTag();
+          if(type.equals(t) && tag.equals(tagLatest) ){//find the latest config of a given mapping entity
+            LOG.info("{} with version tag {} is selected for stack {}", type, tag, stackId.toString());
+            e.setSelected(1);
           }
         }
       }
-
+      
       clusterEntity = clusterDAO.merge(clusterEntity);
 
       cacheConfigurations();
@@ -2884,6 +2886,25 @@ public class ClusterImpl implements Cluster {
     }
   }
 
+  public Collection<ClusterConfigMappingEntity> getLatestConfigMapping(List<ClusterConfigMappingEntity> clusterConfigMappingEntities){
+    Map<String, ClusterConfigMappingEntity> temp = new HashMap<String, ClusterConfigMappingEntity>();
+    for (ClusterConfigMappingEntity e : clusterConfigMappingEntities) {
+      String type = e.getType();
+      if(temp.containsKey(type)){
+        ClusterConfigMappingEntity entityStored = (ClusterConfigMappingEntity)temp.get(type);
+        Long timestampStored = entityStored.getCreateTimestamp();
+        Long timestamp = e.getCreateTimestamp();
+        if(timestamp > timestampStored){
+          temp.put(type, e); //find a newer config for the given type
+        }
+      } else {
+        temp.put(type, e); //first time encounter a type, add it
+      }
+    }
+
+    return (Collection<ClusterConfigMappingEntity>) temp.values();
+  }
+
   /**
    * {@inheritDoc}
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/c8595d6e/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
index 4c186b5..7873abb 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
@@ -17,6 +17,11 @@
  */
 package org.apache.ambari.server.orm.dao;
 
+import static org.easymock.EasyMock.createMockBuilder;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 
 import junit.framework.Assert;
@@ -26,12 +31,16 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
+import org.apache.ambari.server.orm.entities.ClusterConfigMappingEntity;
 import org.apache.ambari.server.orm.entities.ClusterEntity;
+import org.apache.ambari.server.orm.entities.ConfigGroupConfigMappingEntity;
+import org.apache.ambari.server.orm.entities.ConfigGroupEntity;
 import org.apache.ambari.server.orm.entities.ResourceEntity;
 import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
 import org.apache.ambari.server.orm.entities.ServiceConfigEntity;
 import org.apache.ambari.server.orm.entities.StackEntity;
 import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.cluster.ClusterImpl;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -49,6 +58,8 @@ public class ServiceConfigDAOTest {
   private ClusterDAO clusterDAO;
   private ResourceTypeDAO resourceTypeDAO;
   private StackDAO stackDAO;
+  private ConfigGroupDAO configGroupDAO;
+  private ConfigGroupConfigMappingDAO configGroupConfigMappingDAO;
 
   @Before
   public void setup() throws Exception {
@@ -62,6 +73,8 @@ public class ServiceConfigDAOTest {
     stackDAO = injector.getInstance(StackDAO.class);
     serviceConfigDAO = injector.getInstance(ServiceConfigDAO.class);
     resourceTypeDAO = injector.getInstance(ResourceTypeDAO.class);
+    configGroupDAO = injector.getInstance(ConfigGroupDAO.class);
+    configGroupConfigMappingDAO = injector.getInstance(ConfigGroupConfigMappingDAO.class);
   }
 
   @After
@@ -333,4 +346,335 @@ public class ServiceConfigDAOTest {
     serviceConfigs = serviceConfigDAO.getLatestServiceConfigs(clusterId, HDP_02);
     Assert.assertEquals(2, serviceConfigs.size());
   }
-}
+  
+  @Test
+  public void testConfiguration() throws Exception{
+    initClusterEntities();
+    ClusterEntity clusterEntity = clusterDAO.findByName("c1");
+
+    Assert.assertTrue(!clusterEntity.getClusterConfigEntities().isEmpty());
+    Assert.assertTrue(!clusterEntity.getConfigMappingEntities().isEmpty());
+    
+    Assert.assertEquals(5, clusterEntity.getClusterConfigEntities().size());
+    Assert.assertEquals(3, clusterEntity.getConfigMappingEntities().size());
+  }
+  
+  @Test
+  public void testGetClusterConfigMappingByStack() throws Exception{
+    initClusterEntities();
+    
+    ClusterEntity clusterEntity = clusterDAO.findByName("c1");
+    
+    List<ClusterConfigMappingEntity> clusterConfigMappingEntities = clusterDAO.getClusterConfigMappingsByStack(clusterEntity.getClusterId(), HDP_01);
+    Assert.assertEquals(2, clusterConfigMappingEntities .size());
+
+    ClusterConfigMappingEntity e1 = clusterConfigMappingEntities.get(0);
+    String tag1 = e1.getTag();
+    Assert.assertEquals("version1", tag1);
+    String type1 = e1.getType();
+    Assert.assertEquals("oozie-site", type1);
+    
+    ClusterConfigMappingEntity e2 = clusterConfigMappingEntities.get(1);
+    String tag2 = e2.getTag();
+    Assert.assertEquals("version2", tag2);
+    String type2 = e2.getType();
+    Assert.assertEquals("oozie-site", type2);
+  }
+  
+  /**
+   * Test the get latest configuration query against clusterconfig table with configuration groups inserted
+   * */
+  @Test
+  public void testGetClusterConfigMappingByStackCG() throws Exception{
+    initClusterEntitiesWithConfigGroups();
+    ClusterEntity clusterEntity = clusterDAO.findByName("c1");
+    
+    List<ConfigGroupEntity> configGroupEntities = configGroupDAO.findAllByTag("OOZIE");
+    
+    Assert.assertNotNull(configGroupEntities);
+    ConfigGroupEntity configGroupEntity = configGroupEntities.get(0);
+    Assert.assertNotNull(configGroupEntity);
+    Assert.assertEquals("c1", configGroupEntity.getClusterEntity().getClusterName());
+    Assert.assertEquals(Long.valueOf(1), configGroupEntity.getClusterEntity()
+      .getClusterId());
+    Assert.assertEquals("oozie_server", configGroupEntity.getGroupName());
+    Assert.assertEquals("OOZIE", configGroupEntity.getTag());
+    Assert.assertEquals("oozie server", configGroupEntity.getDescription());
+    
+    List<ClusterConfigMappingEntity> clusterConfigMappingEntities = clusterDAO.getClusterConfigMappingsByStack(clusterEntity.getClusterId(), HDP_01);
+    Assert.assertEquals(2, clusterConfigMappingEntities .size());
+
+    ClusterConfigMappingEntity e1 = clusterConfigMappingEntities.get(0);
+    String tag1 = e1.getTag();
+    Assert.assertEquals("version1", tag1);
+    String type1 = e1.getType();
+    Assert.assertEquals("oozie-site", type1);
+    
+    ClusterConfigMappingEntity e2 = clusterConfigMappingEntities.get(1);
+    String tag2 = e2.getTag();
+    Assert.assertEquals("version2", tag2);
+    String type2 = e2.getType();
+    Assert.assertEquals("oozie-site", type2);
+  }
+  
+  /**
+   * Test  
+   *
+   * When the last configuration of a given configuration type to be stored into the clusterconfig table is 
+   * for a configuration group, there is no corresponding entry generated in the clusterconfigmapping.
+   *
+   * Therefore, the getlatestconfiguration query should skip configuration groups stored in the clusterconfig table.
+   *
+   * Test to determine the latest configuration of a given type whose version_tag 
+   * exists in the clusterconfigmapping table.
+   *
+   * */
+  @Test
+  public void testGetLatestClusterConfigMappingByStack() throws Exception{
+    ClusterImpl cluster =
+        createMockBuilder(ClusterImpl.class).
+          addMockedMethod("getSessionManager").
+          addMockedMethod("getClusterName").
+          addMockedMethod("getSessionAttributes").
+          createMock();
+    
+    initClusterEntities();
+    ClusterEntity clusterEntity = clusterDAO.findByName("c1");
+    List<ClusterConfigMappingEntity> clusterConfigMappingEntities = clusterDAO.getClusterConfigMappingsByStack(clusterEntity.getClusterId(), HDP_01);
+    Collection<ClusterConfigMappingEntity> latestMapingEntities = cluster.getLatestConfigMapping(clusterConfigMappingEntities);
+    Assert.assertEquals(1, latestMapingEntities.size());
+    for(ClusterConfigMappingEntity e: latestMapingEntities){
+      Assert.assertEquals("version2", e.getTag());
+      Assert.assertEquals("oozie-site", e.getType());
+    }
+  }
+  
+  /**
+   * Test  
+   *
+   * When the last configuration of a given configuration type to be stored into the clusterconfig table is 
+   * for a configuration group, there is no corresponding entry generated in the clusterconfigmapping.
+   *
+   * Therefore, the getlatestconfiguration query should skip configuration groups stored in the clusterconfig table.
+   *
+   * Test to determine the latest configuration of a given type whose version_tag 
+   * exists in the clusterconfigmapping table.
+   *
+   * */
+  @Test
+  public void testGetLatestClusterConfigMappingByStackCG() throws Exception{
+    ClusterImpl cluster =
+        createMockBuilder(ClusterImpl.class).
+          addMockedMethod("getSessionManager").
+          addMockedMethod("getClusterName").
+          addMockedMethod("getSessionAttributes").
+          createMock();
+    
+    initClusterEntitiesWithConfigGroups();
+    ClusterEntity clusterEntity = clusterDAO.findByName("c1");
+    List<ClusterConfigMappingEntity> clusterConfigMappingEntities = clusterDAO.getClusterConfigMappingsByStack(clusterEntity.getClusterId(), HDP_01);
+    Collection<ClusterConfigMappingEntity> latestMapingEntities = cluster.getLatestConfigMapping(clusterConfigMappingEntities);
+    Assert.assertEquals(1, latestMapingEntities.size());
+    for(ClusterConfigMappingEntity e: latestMapingEntities){
+      Assert.assertEquals("version2", e.getTag());
+      Assert.assertEquals("oozie-site", e.getType());
+    }
+  }
+  
+  private void initClusterEntities() throws Exception{
+    String userName = "admin";
+    
+    ServiceConfigEntity oozieServiceConfigEntity = createServiceConfig("OOZIE", userName, 1L, 1L, System.currentTimeMillis(), null);
+    ClusterEntity  clusterEntity = oozieServiceConfigEntity.getClusterEntity();
+    
+    Long clusterId = clusterEntity.getClusterId();
+    
+    if(null == clusterId){
+      clusterId = 1L;
+      clusterEntity.setClusterId(clusterId);
+      clusterEntity = clusterDAO.merge(clusterEntity);
+    }
+    
+    StackEntity stackEntityHDP01 = stackDAO.find(HDP_01.getStackName(),HDP_01.getStackVersion());
+    StackEntity stackEntityHDP02 = stackDAO.find(HDP_02.getStackName(),HDP_02.getStackVersion());
+    
+    String oozieSite = "oozie-site";
+    
+    for (int i = 1; i < 6; i++){
+      ClusterConfigEntity entity = new ClusterConfigEntity();
+      entity.setClusterEntity(clusterEntity);
+      entity.setClusterId(clusterEntity.getClusterId());
+      entity.setType(oozieSite);
+      entity.setVersion(Long.valueOf(i));
+      entity.setTag("version"+i);
+      entity.setTimestamp(new Date().getTime());
+      if(i < 4)
+        entity.setStack(stackEntityHDP01);
+      else
+        entity.setStack(stackEntityHDP02);
+      entity.setData("");
+      clusterDAO.createConfig(entity);
+      clusterEntity.getClusterConfigEntities().add(entity);
+      clusterDAO.merge(clusterEntity);
+    }
+    
+    Collection<ClusterConfigMappingEntity> entities = clusterEntity.getConfigMappingEntities();
+    if(null == entities){
+      entities = new ArrayList<ClusterConfigMappingEntity>();
+      clusterEntity.setConfigMappingEntities(entities);
+    }  
+    
+    ClusterConfigMappingEntity e1 = new ClusterConfigMappingEntity();
+    e1.setClusterEntity(clusterEntity);
+    e1.setClusterId(clusterEntity.getClusterId());
+    e1.setCreateTimestamp(System.currentTimeMillis());
+    e1.setSelected(0);
+    e1.setUser(userName);
+    e1.setType(oozieSite);
+    e1.setTag("version1");
+    entities.add(e1);
+    clusterDAO.merge(clusterEntity);
+    
+    ClusterConfigMappingEntity e2 = new ClusterConfigMappingEntity();
+    e2.setClusterEntity(clusterEntity);
+    e2.setClusterId(clusterEntity.getClusterId());
+    e2.setCreateTimestamp(System.currentTimeMillis());
+    e2.setSelected(0);
+    e2.setUser(userName);
+    e2.setType(oozieSite);
+    e2.setTag("version2");
+    entities.add(e2);
+    clusterDAO.merge(clusterEntity);
+    
+    ClusterConfigMappingEntity e3 = new ClusterConfigMappingEntity();
+    e3.setClusterEntity(clusterEntity);
+    e3.setClusterId(clusterEntity.getClusterId());
+    e3.setCreateTimestamp(System.currentTimeMillis());
+    e3.setSelected(1);
+    e3.setUser(userName);
+    e3.setType(oozieSite);
+    e3.setTag("version4");
+    entities.add(e3);
+    clusterDAO.merge(clusterEntity);
+  } 
+  
+  private void initClusterEntitiesWithConfigGroups() throws Exception{
+    String userName = "admin";
+    
+    ServiceConfigEntity oozieServiceConfigEntity = createServiceConfig("OOZIE", userName, 1L, 1L, System.currentTimeMillis(), null);
+    ClusterEntity  clusterEntity = oozieServiceConfigEntity.getClusterEntity();
+    
+    Long clusterId = clusterEntity.getClusterId();
+    
+    if(null == clusterId){
+      clusterId = 1L;
+      clusterEntity.setClusterId(clusterId);
+      clusterEntity = clusterDAO.merge(clusterEntity);
+    }
+    
+    StackEntity stackEntityHDP01 = stackDAO.find(HDP_01.getStackName(),HDP_01.getStackVersion());
+    String oozieSite = "oozie-site";
+    
+    int count = 3;
+    for (int i = 1; i < count; i++){
+      ClusterConfigEntity entity = new ClusterConfigEntity();
+      entity.setClusterEntity(clusterEntity);
+      entity.setClusterId(clusterEntity.getClusterId());
+      entity.setType(oozieSite);
+      entity.setVersion(Long.valueOf(i));
+      entity.setTag("version"+i);
+      entity.setTimestamp(new Date().getTime());
+      entity.setStack(stackEntityHDP01);
+      entity.setData("");
+      clusterDAO.createConfig(entity);
+      clusterEntity.getClusterConfigEntities().add(entity);
+      clusterDAO.merge(clusterEntity);
+    }
+    
+    Collection<ClusterConfigMappingEntity> entities = clusterEntity.getConfigMappingEntities();
+    if(null == entities){
+      entities = new ArrayList<ClusterConfigMappingEntity>();
+      clusterEntity.setConfigMappingEntities(entities);
+    }  
+    
+    ClusterConfigMappingEntity e1 = new ClusterConfigMappingEntity();
+    e1.setClusterEntity(clusterEntity);
+    e1.setClusterId(clusterEntity.getClusterId());
+    e1.setCreateTimestamp(System.currentTimeMillis());
+    e1.setSelected(0);
+    e1.setUser(userName);
+    e1.setType(oozieSite);
+    e1.setTag("version1");
+    entities.add(e1);
+    clusterDAO.merge(clusterEntity);
+    
+    ClusterConfigMappingEntity e2 = new ClusterConfigMappingEntity();
+    e2.setClusterEntity(clusterEntity);
+    e2.setClusterId(clusterEntity.getClusterId());
+    e2.setCreateTimestamp(System.currentTimeMillis());
+    e2.setSelected(1);
+    e2.setUser(userName);
+    e2.setType(oozieSite);
+    e2.setTag("version2");
+    entities.add(e2);
+    clusterDAO.merge(clusterEntity);
+    
+    ConfigGroupEntity configGroupEntity = new ConfigGroupEntity();
+
+    ResourceTypeEntity resourceTypeEntity = resourceTypeDAO.findById(ResourceTypeEntity.CLUSTER_RESOURCE_TYPE);
+    if (resourceTypeEntity == null) {
+      resourceTypeEntity = new ResourceTypeEntity();
+      resourceTypeEntity.setId(ResourceTypeEntity.CLUSTER_RESOURCE_TYPE);
+      resourceTypeEntity.setName(ResourceTypeEntity.CLUSTER_RESOURCE_TYPE_NAME);
+      resourceTypeEntity = resourceTypeDAO.merge(resourceTypeEntity);
+    }
+
+    ResourceEntity resourceEntity = new ResourceEntity();
+    resourceEntity.setResourceType(resourceTypeEntity);
+
+    configGroupEntity.setClusterEntity(clusterEntity);
+    configGroupEntity.setClusterId(clusterEntity.getClusterId());
+    configGroupEntity.setGroupName("oozie_server");
+    configGroupEntity.setDescription("oozie server");
+    configGroupEntity.setTag("OOZIE");
+
+    ClusterConfigEntity configEntity = new ClusterConfigEntity();
+    configEntity.setType("oozie-site");
+    configEntity.setTag("version3");
+    configEntity.setData("someData");
+    configEntity.setAttributes("someAttributes");
+    configEntity.setStack(stackEntityHDP01);
+
+    List<ClusterConfigEntity> configEntities = new
+      ArrayList<ClusterConfigEntity>();
+    configEntities.add(configEntity);
+    
+    configGroupDAO.create(configGroupEntity);
+    
+    if (configEntities != null && !configEntities.isEmpty()) {
+      List<ConfigGroupConfigMappingEntity> configMappingEntities = new
+        ArrayList<ConfigGroupConfigMappingEntity>();
+
+      for (ClusterConfigEntity config : configEntities) {
+        config.setClusterEntity(clusterEntity);
+        config.setClusterId(clusterEntity.getClusterId());
+        clusterDAO.createConfig(config);
+
+        ConfigGroupConfigMappingEntity configMappingEntity = new
+          ConfigGroupConfigMappingEntity();
+        configMappingEntity.setClusterId(clusterEntity.getClusterId());
+        configMappingEntity.setClusterConfigEntity(config);
+        configMappingEntity.setConfigGroupEntity(configGroupEntity);
+        configMappingEntity.setConfigGroupId(configGroupEntity.getGroupId());
+        configMappingEntity.setVersionTag(config.getTag());
+        configMappingEntity.setConfigType(config.getType());
+        configMappingEntity.setTimestamp(System.currentTimeMillis());
+        configMappingEntities.add(configMappingEntity);
+        configGroupConfigMappingDAO.create(configMappingEntity);
+      }
+      
+      configGroupEntity.setConfigGroupConfigMappingEntities(configMappingEntities);
+      configGroupDAO.merge(configGroupEntity);
+    }
+  }
+}
\ No newline at end of file