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/04/02 01:00:49 UTC

[1/2] ambari git commit: AMBARI-10301 - Stack Database Table Creation and Population From Resources (jonathanhurley)

Repository: ambari
Updated Branches:
  refs/heads/trunk cc4a9a3e0 -> 69197e630


http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
index 6491f8d..122b9a9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
@@ -17,6 +17,10 @@
  */
 package org.apache.ambari.server.controller.internal;
 
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -44,11 +48,11 @@ import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.State;
 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.StackId;
+import org.apache.ambari.server.state.State;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -58,10 +62,6 @@ import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.persist.PersistService;
 
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.expect;
-
 public class JMXHostProviderTest {
   private Injector injector;
   private Clusters clusters;
@@ -81,7 +81,6 @@ public class JMXHostProviderTest {
     clusters = injector.getInstance(Clusters.class);
     controller = injector.getInstance(AmbariManagementController.class);
     AmbariMetaInfo ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-    ambariMetaInfo.init();
   }
 
   @After
@@ -459,14 +458,16 @@ public class JMXHostProviderTest {
 
     @Override
     protected ResourceProvider createResourceProvider(Resource.Type type) {
-      if (type == Resource.Type.Cluster)
+      if (type == Resource.Type.Cluster) {
         return clusterResourceProvider;
-      if (type == Resource.Type.Service)
+      }
+      if (type == Resource.Type.Service) {
         return serviceResourceProvider;
-      else if (type == Resource.Type.HostComponent)
+      } else if (type == Resource.Type.HostComponent) {
         return hostCompResourceProvider;
-      else if (type == Resource.Type.Configuration)
+      } else if (type == Resource.Type.Configuration) {
         return configResourceProvider;
+      }
       return null;
     }
     

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackArtifactResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackArtifactResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackArtifactResourceProviderTest.java
index 1251d99..b00ca4b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackArtifactResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackArtifactResourceProviderTest.java
@@ -17,9 +17,22 @@
  */
 package org.apache.ambari.server.controller.internal;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
+import static org.apache.ambari.server.controller.internal.StackArtifactResourceProvider.ARTIFACT_DATA_PROPERTY_ID;
+import static org.apache.ambari.server.controller.internal.StackArtifactResourceProvider.ARTIFACT_NAME_PROPERTY_ID;
+import static org.apache.ambari.server.controller.internal.StackArtifactResourceProvider.STACK_NAME_PROPERTY_ID;
+import static org.apache.ambari.server.controller.internal.StackArtifactResourceProvider.STACK_SERVICE_NAME_PROPERTY_ID;
+import static org.apache.ambari.server.controller.internal.StackArtifactResourceProvider.STACK_VERSION_PROPERTY_ID;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -35,20 +48,10 @@ import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import static org.apache.ambari.server.controller.internal.StackArtifactResourceProvider.ARTIFACT_DATA_PROPERTY_ID;
-import static org.apache.ambari.server.controller.internal.StackArtifactResourceProvider.ARTIFACT_NAME_PROPERTY_ID;
-import static org.apache.ambari.server.controller.internal.StackArtifactResourceProvider.STACK_NAME_PROPERTY_ID;
-import static org.apache.ambari.server.controller.internal.StackArtifactResourceProvider.STACK_SERVICE_NAME_PROPERTY_ID;
-import static org.apache.ambari.server.controller.internal.StackArtifactResourceProvider.STACK_VERSION_PROPERTY_ID;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
 
 public class StackArtifactResourceProviderTest {
   private AmbariMetaInfo metaInfo;
@@ -62,7 +65,6 @@ public class StackArtifactResourceProviderTest {
     injector = Guice.createInjector(module);
     injector.getInstance(GuiceJpaInitializer.class);
     metaInfo = injector.getInstance(AmbariMetaInfo.class);
-    metaInfo.init();
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
index f2417bd..8cb705f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
@@ -19,10 +19,6 @@
 package org.apache.ambari.server.events.listeners.upgrade;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -34,16 +30,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import javax.persistence.RollbackException;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Singleton;
-import com.google.inject.persist.Transactional;
-import com.google.inject.util.Modules;
-
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
-import org.apache.ambari.server.events.HostAddedEvent;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
@@ -52,12 +40,10 @@ import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
 import org.apache.ambari.server.orm.entities.HostVersionEntity;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.state.Cluster;
-import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.HostState;
-import org.apache.ambari.server.state.Service;
-import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.ServiceComponentHostFactory;
 import org.apache.ambari.server.state.StackId;
 import org.junit.After;
@@ -92,7 +78,6 @@ public class HostVersionOutOfSyncListenerTest {
     helper = injector.getInstance(OrmTestHelper.class);
     hostVersionDAO = injector.getInstance(HostVersionDAO.class);
     serviceComponentHostFactory = injector.getInstance(ServiceComponentHostFactory.class);
-    metaInfo.init();
     clusters.addCluster("c1");
     c1 = clusters.getCluster("c1");
     addHost("h1");

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
index 80c07c8..41050c6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
@@ -17,19 +17,31 @@
  */
 package org.apache.ambari.server.scheduler;
 
-import com.google.gson.Gson;
-import com.google.inject.Binder;
-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-import com.google.inject.persist.PersistService;
-import com.google.inject.persist.Transactional;
-import com.google.inject.util.Modules;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.capture;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.createMockBuilder;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
 import junit.framework.Assert;
+
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.actionmanager.ActionDBAccessor;
-import org.apache.ambari.server.actionmanager.HostRoleCommand;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
@@ -39,12 +51,17 @@ import org.apache.ambari.server.security.authorization.internal.InternalTokenSto
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.scheduler.*;
+import org.apache.ambari.server.state.scheduler.Batch;
+import org.apache.ambari.server.state.scheduler.BatchRequest;
+import org.apache.ambari.server.state.scheduler.BatchRequestJob;
+import org.apache.ambari.server.state.scheduler.BatchRequestResponse;
+import org.apache.ambari.server.state.scheduler.BatchSettings;
+import org.apache.ambari.server.state.scheduler.RequestExecution;
+import org.apache.ambari.server.state.scheduler.RequestExecutionFactory;
+import org.apache.ambari.server.state.scheduler.Schedule;
 import org.easymock.Capture;
-import org.easymock.IAnswer;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.quartz.CronTrigger;
 import org.quartz.JobDataMap;
@@ -61,12 +78,15 @@ import org.quartz.impl.matchers.GroupMatcher;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.*;
-
-import static org.easymock.EasyMock.*;
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import com.google.gson.Gson;
+import com.google.inject.Binder;
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+import com.google.inject.persist.PersistService;
+import com.google.inject.persist.Transactional;
+import com.google.inject.util.Modules;
 
 public class ExecutionScheduleManagerTest {
   private Clusters clusters;
@@ -96,7 +116,6 @@ public class ExecutionScheduleManagerTest {
     executionScheduler = injector.getInstance(ExecutionScheduler.class);
     requestExecutionFactory = injector.getInstance(RequestExecutionFactory.class);
 
-    metaInfo.init();
     clusterName = "c1";
     clusters.addCluster(clusterName);
     cluster = clusters.getCluster(clusterName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerCommonServicesTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerCommonServicesTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerCommonServicesTest.java
index 4e258e8..3aa7b72 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerCommonServicesTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerCommonServicesTest.java
@@ -18,84 +18,110 @@
 
 package org.apache.ambari.server.stack;
 
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.metadata.ActionMetadata;
 import org.apache.ambari.server.orm.dao.MetainfoDAO;
-import org.apache.ambari.server.state.*;
+import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.state.CommandScriptDefinition;
+import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.PropertyInfo;
+import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.ambari.server.state.ServiceOsSpecific;
+import org.apache.ambari.server.state.StackInfo;
 import org.apache.ambari.server.state.stack.OsFamily;
 import org.apache.commons.lang.StringUtils;
+import org.easymock.EasyMock;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.io.File;
-import java.util.*;
-
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.*;
-import static org.junit.Assert.assertEquals;
-
 /**
  * StackManager unit tests.
  */
 public class StackManagerCommonServicesTest {
 
   private static StackManager stackManager;
-  private static MetainfoDAO dao;
+  private static MetainfoDAO metaInfoDao;
+  private static StackDAO stackDao;
   private static ActionMetadata actionMetadata;
   private static OsFamily osFamily;
 
   @BeforeClass
-  public static void initStack() throws Exception{
+  public static void initStack() throws Exception {
     stackManager = createTestStackManager();
   }
 
   public static StackManager createTestStackManager() throws Exception {
-    String stack = ClassLoader.getSystemClassLoader().getResource("stacks_with_common_services").getPath();
-    String commonServices = ClassLoader.getSystemClassLoader().getResource("common-services").getPath();
+    String stack = ClassLoader.getSystemClassLoader().getResource(
+        "stacks_with_common_services").getPath();
+
+    String commonServices = ClassLoader.getSystemClassLoader().getResource(
+        "common-services").getPath();
     return createTestStackManager(stack, commonServices);
   }
 
-  public static StackManager createTestStackManager(String stackRoot, String commonServicesRoot) throws Exception {
-    try {
-      //todo: dao , actionMetaData expectations
-      dao = createNiceMock(MetainfoDAO.class);
-      actionMetadata = createNiceMock(ActionMetadata.class);
-      Configuration config = createNiceMock(Configuration.class);
-      expect(config.getSharedResourcesDirPath()).andReturn(
-          ClassLoader.getSystemClassLoader().getResource("").getPath()).anyTimes();
-      replay(config);
-      osFamily = new OsFamily(config);
-
-      replay(dao, actionMetadata);
-      StackManager stackManager = new StackManager(
-          new File(stackRoot), new File(commonServicesRoot), new StackContext(dao, actionMetadata, osFamily));
-      return stackManager;
-    } catch (Exception e) {
-      e.printStackTrace();
-      throw e;
-    }
+  public static StackManager createTestStackManager(String stackRoot,
+      String commonServicesRoot) throws Exception {
+    // todo: dao , actionMetaData expectations
+    metaInfoDao = createNiceMock(MetainfoDAO.class);
+    stackDao = createNiceMock(StackDAO.class);
+    actionMetadata = createNiceMock(ActionMetadata.class);
+    Configuration config = createNiceMock(Configuration.class);
+    StackEntity stackEntity = createNiceMock(StackEntity.class);
+
+    expect(config.getSharedResourcesDirPath()).andReturn(
+        ClassLoader.getSystemClassLoader().getResource("").getPath()).anyTimes();
+
+    expect(
+        stackDao.find(EasyMock.anyObject(String.class),
+            EasyMock.anyObject(String.class))).andReturn(stackEntity).atLeastOnce();
+
+    replay(config, stackDao);
+    osFamily = new OsFamily(config);
+
+    replay(metaInfoDao, actionMetadata);
+
+    StackManager stackManager = new StackManager(new File(stackRoot), new File(
+        commonServicesRoot), osFamily, metaInfoDao, actionMetadata, stackDao);
+
+    EasyMock.verify( config, stackDao );
+
+    return stackManager;
   }
 
   @Test
-  public void testGetStacks_count() throws Exception {
+  public void testGetStacksCount() throws Exception {
     Collection<StackInfo> stacks = stackManager.getStacks();
     assertEquals(2, stacks.size());
   }
 
   @Test
-  public void testGetStack_name__count() {
+  public void testGetStacksByName() {
     Collection<StackInfo> stacks = stackManager.getStacks("HDP");
     assertEquals(2, stacks.size());
   }
 
   @Test
-  public void testGetStack_basic() {
+  public void testGetStack() {
     StackInfo stack = stackManager.getStack("HDP", "0.1");
     assertNotNull(stack);
     assertEquals("HDP", stack.getName());
     assertEquals("0.1", stack.getVersion());
 
-
     Collection<ServiceInfo> services = stack.getServices();
     assertEquals(3, services.size());
 
@@ -139,12 +165,14 @@ public class StackManagerCommonServicesTest {
     assertEquals(1, components.size());
     CommandScriptDefinition commandScript = pigService.getCommandScript();
     assertEquals("scripts/service_check.py", commandScript.getScript());
-    assertEquals(CommandScriptDefinition.Type.PYTHON, commandScript.getScriptType());
+    assertEquals(CommandScriptDefinition.Type.PYTHON,
+        commandScript.getScriptType());
     assertEquals(300, commandScript.getTimeout());
     List<String> configDependencies = pigService.getConfigDependencies();
     assertEquals(1, configDependencies.size());
     assertEquals("global", configDependencies.get(0));
-    assertEquals("global", pigService.getConfigDependenciesWithComponents().get(0));
+    assertEquals("global",
+        pigService.getConfigDependenciesWithComponents().get(0));
     ComponentInfo client = pigService.getClientComponent();
     assertNotNull(client);
     assertEquals("PIG", client.getName());
@@ -182,10 +210,11 @@ public class StackManagerCommonServicesTest {
     ServiceInfo hdfsService2 = stack.getService("HDFS");
     assertNotNull(hdfsService2);
 
-    String packageDir1 = StringUtils.join(
-        new String[]{"common-services", "HDFS", "1.0", "package"}, File.separator);
-    String packageDir2 = StringUtils.join(
-        new String[]{"stacks_with_common_services", "HDP", "0.2", "services", "HDFS", "package"}, File.separator);
+    String packageDir1 = StringUtils.join(new String[] { "common-services",
+        "HDFS", "1.0", "package" }, File.separator);
+    String packageDir2 = StringUtils.join(new String[] {
+        "stacks_with_common_services", "HDP", "0.2", "services", "HDFS",
+        "package" }, File.separator);
 
     assertEquals(packageDir1, hdfsService1.getServicePackageFolder());
     assertEquals(packageDir2, hdfsService2.getServicePackageFolder());

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerMiscTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerMiscTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerMiscTest.java
index 26d7826..dda1e7a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerMiscTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerMiscTest.java
@@ -18,19 +18,27 @@
 
 package org.apache.ambari.server.stack;
 
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.util.Collection;
+
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.metadata.ActionMetadata;
 import org.apache.ambari.server.orm.dao.MetainfoDAO;
+import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.entities.StackEntity;
 import org.apache.ambari.server.state.StackInfo;
 import org.apache.ambari.server.state.stack.OsFamily;
+import org.easymock.EasyMock;
 import org.junit.Test;
 
-import java.io.File;
-import java.util.Collection;
-
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.*;
-
 /**
  * StackManager Misc unit tests.
  */
@@ -38,23 +46,36 @@ public class StackManagerMiscTest  {
 
   @Test
   public void testCycleDetection() throws Exception {
-    MetainfoDAO dao = createNiceMock(MetainfoDAO.class);
+    MetainfoDAO metaInfoDao = createNiceMock(MetainfoDAO.class);
+    StackDAO stackDao = createNiceMock(StackDAO.class);
     ActionMetadata actionMetadata = createNiceMock(ActionMetadata.class);
     OsFamily osFamily = createNiceMock(OsFamily.class);
-    replay(actionMetadata);
+    StackEntity stackEntity = createNiceMock(StackEntity.class);
+
+    expect(
+        stackDao.find(EasyMock.anyObject(String.class),
+            EasyMock.anyObject(String.class))).andReturn(stackEntity).atLeastOnce();
+
+    replay(actionMetadata, stackDao, metaInfoDao, osFamily);
+
     try {
       String stacksCycle1 = ClassLoader.getSystemClassLoader().getResource("stacks_with_cycle").getPath();
-      StackManager stackManager = new StackManager(new File(stacksCycle1), null,
-          new StackContext(dao, actionMetadata, osFamily));
+
+      StackManager stackManager = new StackManager(new File(stacksCycle1),
+          null, osFamily, metaInfoDao, actionMetadata, stackDao);
+
       fail("Expected exception due to cyclic stack");
     } catch (AmbariException e) {
       // expected
       assertEquals("Cycle detected while parsing stack definition", e.getMessage());
     }
     try {
-      String stacksCycle2 = ClassLoader.getSystemClassLoader().getResource("stacks_with_cycle2").getPath();
-      StackManager stackManager = new StackManager(new File(stacksCycle2), null,
-          new StackContext(dao, actionMetadata, osFamily));
+      String stacksCycle2 = ClassLoader.getSystemClassLoader().getResource(
+          "stacks_with_cycle2").getPath();
+
+      StackManager stackManager = new StackManager(new File(stacksCycle2),
+          null, osFamily, metaInfoDao, actionMetadata, stackDao);
+
       fail("Expected exception due to cyclic stack");
     } catch (AmbariException e) {
       // expected
@@ -68,24 +89,32 @@ public class StackManagerMiscTest  {
    */
   @Test
   public void testGetServiceInfoFromSingleStack() throws Exception {
-    MetainfoDAO dao = createNiceMock(MetainfoDAO.class);
+    MetainfoDAO metaInfoDao = createNiceMock(MetainfoDAO.class);
+    StackDAO stackDao = createNiceMock(StackDAO.class);
     ActionMetadata actionMetadata = createNiceMock(ActionMetadata.class);
     OsFamily  osFamily = createNiceMock(OsFamily.class);
+    StackEntity stackEntity = createNiceMock(StackEntity.class);
 
     // ensure that service check is added for HDFS
     actionMetadata.addServiceCheckAction("HDFS");
-    replay(dao, actionMetadata, osFamily);
+
+    expect(
+        stackDao.find(EasyMock.anyObject(String.class),
+            EasyMock.anyObject(String.class))).andReturn(stackEntity).atLeastOnce();
+
+    replay(metaInfoDao, stackDao, actionMetadata, osFamily);
+
     String singleStack = ClassLoader.getSystemClassLoader().getResource("single_stack").getPath();
 
-    StackManager stackManager = new StackManager(
-        new File(singleStack.replace(StackManager.PATH_DELIMITER, File.separator)),
-        null,
-        new StackContext(dao, actionMetadata, osFamily));
+    StackManager stackManager = new StackManager(new File(singleStack.replace(
+        StackManager.PATH_DELIMITER, File.separator)),
+        null, osFamily, metaInfoDao, actionMetadata, stackDao);
+
 
     Collection<StackInfo> stacks = stackManager.getStacks();
     assertEquals(1, stacks.size());
     assertNotNull(stacks.iterator().next().getService("HDFS"));
 
-    verify(dao, actionMetadata, osFamily);
+    verify(metaInfoDao, stackDao, actionMetadata, osFamily);
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
index 0f39b06..2b665f6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
@@ -27,16 +27,19 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 
 import java.io.File;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.metadata.ActionMetadata;
 import org.apache.ambari.server.orm.dao.MetainfoDAO;
+import org.apache.ambari.server.orm.dao.StackDAO;
 import org.apache.ambari.server.state.ClientConfigFileDefinition;
 import org.apache.ambari.server.state.CommandScriptDefinition;
 import org.apache.ambari.server.state.ComponentInfo;
@@ -45,6 +48,7 @@ import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.ambari.server.state.ServiceOsSpecific;
 import org.apache.ambari.server.state.StackInfo;
 import org.apache.ambari.server.state.stack.OsFamily;
+import org.apache.commons.lang.StringUtils;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -54,9 +58,10 @@ import org.junit.Test;
 public class StackManagerTest {
 
   private static StackManager stackManager;
-  private static MetainfoDAO dao;
+  private static MetainfoDAO metaInfoDao;
   private static ActionMetadata actionMetadata;
   private static OsFamily osFamily;
+  private static StackDAO stackDao;
 
   @BeforeClass
   public static void initStack() throws Exception{
@@ -69,34 +74,35 @@ public class StackManagerTest {
   }
 
   public static StackManager createTestStackManager(String stackRoot) throws Exception {
-    try {
-      //todo: dao , actionMetaData expectations
-      dao = createNiceMock(MetainfoDAO.class);
-      actionMetadata = createNiceMock(ActionMetadata.class);
-      Configuration config = createNiceMock(Configuration.class);
-      expect(config.getSharedResourcesDirPath()).andReturn(
-          ClassLoader.getSystemClassLoader().getResource("").getPath()).anyTimes();
-      replay(config);
-      osFamily = new OsFamily(config);
-
-      replay(dao, actionMetadata);
-      StackManager stackManager = new StackManager(
-          new File(stackRoot), null, new StackContext(dao, actionMetadata, osFamily));
-      return stackManager;
-    } catch (Exception e) {
-      e.printStackTrace();
-      throw e;
-    }
+    // todo: dao , actionMetaData expectations
+    metaInfoDao = createNiceMock(MetainfoDAO.class);
+    stackDao = createNiceMock(StackDAO.class);
+    actionMetadata = createNiceMock(ActionMetadata.class);
+    Configuration config = createNiceMock(Configuration.class);
+
+    expect(config.getSharedResourcesDirPath()).andReturn(
+        ClassLoader.getSystemClassLoader().getResource("").getPath()).anyTimes();
+
+    replay(config, metaInfoDao, stackDao, actionMetadata);
+
+    osFamily = new OsFamily(config);
+
+    StackManager stackManager = new StackManager(new File(stackRoot), null,
+        osFamily, metaInfoDao, actionMetadata, stackDao);
+
+    verify(config, metaInfoDao, stackDao, actionMetadata);
+
+    return stackManager;
   }
 
   @Test
-  public void testGetStacks_count() throws Exception {
+  public void testGetsStacks() throws Exception {
     Collection<StackInfo> stacks = stackManager.getStacks();
     assertEquals(18, stacks.size());
   }
 
   @Test
-  public void testGetStack_name__count() {
+  public void testGetStacksByName() {
     Collection<StackInfo> stacks = stackManager.getStacks("HDP");
     assertEquals(14, stacks.size());
 
@@ -105,7 +111,7 @@ public class StackManagerTest {
   }
 
   @Test
-  public void testGetStack_basic() {
+  public void testGetStack() {
     StackInfo stack = stackManager.getStack("HDP", "0.1");
     assertNotNull(stack);
     assertEquals("HDP", stack.getName());
@@ -183,7 +189,7 @@ public class StackManagerTest {
   }
 
   @Test
-  public void testStackVersionInheritance_includeAllServices() {
+  public void testStackVersionInheritance() {
     StackInfo stack = stackManager.getStack("HDP", "2.1.1");
     assertNotNull(stack);
     assertEquals("HDP", stack.getName());
@@ -236,7 +242,7 @@ public class StackManagerTest {
   }
 
   @Test
-  public void testGetStack_explicitServiceExtension() {
+  public void testStackServiceExtension() {
     StackInfo stack = stackManager.getStack("OTHER", "1.0");
     assertNotNull(stack);
     assertEquals("OTHER", stack.getName());
@@ -327,7 +333,7 @@ public class StackManagerTest {
   }
 
   @Test
-  public void testGetStack_versionInheritance__explicitServiceExtension() {
+  public void testGetStackServiceInheritance() {
     StackInfo baseStack = stackManager.getStack("OTHER", "1.0");
     StackInfo stack = stackManager.getStack("OTHER", "2.0");
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
index 894126d..4d4d674 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigGroupTest.java
@@ -17,10 +17,9 @@
  */
 package org.apache.ambari.server.state;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
-import com.google.inject.persist.Transactional;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 
 import junit.framework.Assert;
 
@@ -40,9 +39,10 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
+import com.google.inject.persist.Transactional;
 
 public class ConfigGroupTest {
 
@@ -70,7 +70,6 @@ public class ConfigGroupTest {
     configGroupHostMappingDAO = injector.getInstance
       (ConfigGroupHostMappingDAO.class);
 
-    metaInfo.init();
     clusterName = "foo";
     clusters.addCluster(clusterName);
     cluster = clusters.getCluster(clusterName);
@@ -188,7 +187,7 @@ public class ConfigGroupTest {
     Assert.assertEquals("NewTag", configGroupEntity.getTag());
     Assert.assertEquals("NewDesc", configGroupEntity.getDescription());
     Assert.assertNotNull(cluster.getConfig("test-site", "version100"));
-    
+
     ConfigGroupConfigMappingEntity configMappingEntity = null;
     Object[] array = configGroupEntity.getConfigGroupConfigMappingEntities().toArray();
     for(Object o: array) {
@@ -213,7 +212,6 @@ public class ConfigGroupTest {
     configGroup.delete();
 
     Assert.assertNull(configGroupDAO.findById(id));
-    Assert.assertNull(cluster.getConfigGroups().get(id));
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
index 61652d1..751583e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
@@ -23,12 +23,19 @@ import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
-import com.google.inject.persist.Transactional;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.persistence.EntityManager;
+
 import junit.framework.Assert;
+
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.actionmanager.RequestFactory;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -41,6 +48,7 @@ import org.apache.ambari.server.orm.DBAccessor;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.security.SecurityHelper;
+import org.apache.ambari.server.stack.StackManagerFactory;
 import org.apache.ambari.server.state.cluster.ClusterFactory;
 import org.apache.ambari.server.state.cluster.ClustersImpl;
 import org.apache.ambari.server.state.configgroup.ConfigGroup;
@@ -53,15 +61,11 @@ import org.junit.Test;
 import org.junit.experimental.runners.Enclosed;
 import org.junit.runner.RunWith;
 
-import javax.persistence.EntityManager;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
+import com.google.inject.persist.Transactional;
 
 
 
@@ -89,7 +93,6 @@ public class ConfigHelperTest {
       configHelper = injector.getInstance(ConfigHelper.class);
       managementController = injector.getInstance(AmbariManagementController.class);
 
-      metaInfo.init();
       clusterName = "c1";
       clusters.addCluster(clusterName);
       cluster = clusters.getCluster(clusterName);
@@ -609,6 +612,7 @@ public class ConfigHelperTest {
           bind(RequestFactory.class).toInstance(createNiceMock(RequestFactory.class));
           bind(Clusters.class).toInstance(createNiceMock(ClustersImpl.class));
           bind(ClusterController.class).toInstance(clusterController);
+          bind(StackManagerFactory.class).toInstance(createNiceMock(StackManagerFactory.class));
         }
       });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/RequestExecutionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/RequestExecutionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/RequestExecutionTest.java
index 8759089..abbee45 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/RequestExecutionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/RequestExecutionTest.java
@@ -17,11 +17,12 @@
  */
 package org.apache.ambari.server.state;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
-import com.google.inject.persist.Transactional;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
 import junit.framework.Assert;
+
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.RequestScheduleResponse;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -40,9 +41,10 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
+import com.google.inject.persist.Transactional;
 
 public class RequestExecutionTest {
   private Injector injector;
@@ -62,7 +64,6 @@ public class RequestExecutionTest {
     requestExecutionFactory = injector.getInstance(RequestExecutionFactory.class);
     requestScheduleDAO = injector.getInstance(RequestScheduleDAO.class);
 
-    metaInfo.init();
     clusterName = "foo";
     clusters.addCluster(clusterName);
     cluster = clusters.getCluster(clusterName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
index c27e600..3093c2f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceComponentTest.java
@@ -40,7 +40,6 @@ import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
 import org.apache.ambari.server.orm.entities.HostComponentStateEntityPK;
 import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
 import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntityPK;
-import org.apache.ambari.server.state.RepositoryVersionState;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -75,7 +74,6 @@ public class ServiceComponentTest {
         ServiceComponentHostFactory.class);
     helper = injector.getInstance(OrmTestHelper.class);
     metaInfo = injector.getInstance(AmbariMetaInfo.class);
-    metaInfo.init();
 
     clusterName = "foo";
     serviceName = "HDFS";

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
index ecfe403..552edec 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
@@ -62,7 +62,6 @@ public class ServiceTest {
     serviceComponentFactory = injector.getInstance(
         ServiceComponentFactory.class);
     metaInfo = injector.getInstance(AmbariMetaInfo.class);
-    metaInfo.init();
     clusterName = "foo";
     clusters.addCluster(clusterName);
     cluster = clusters.getCluster(clusterName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
index be39bc2..e05d16e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
@@ -102,7 +102,6 @@ public class UpgradeHelperTest {
 
     helper = injector.getInstance(OrmTestHelper.class);
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-    ambariMetaInfo.init();
 
     m_upgradeHelper = injector.getInstance(UpgradeHelper.class);
     m_masterHostResolver = EasyMock.createMock(MasterHostResolver.class);

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
index 10535e6..19b5d46 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
@@ -112,7 +112,6 @@ public class AlertEventPublisherTest {
     aggregateMapping = injector.getInstance(AggregateDefinitionMapping.class);
 
     metaInfo = injector.getInstance(AmbariMetaInfo.class);
-    metaInfo.init();
 
     clusterName = "foo";
     clusters.addCluster(clusterName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java
index 25611c9..4e55c49 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/alerts/InitialAlertEventTest.java
@@ -105,7 +105,6 @@ public class InitialAlertEventTest {
     m_serviceFactory = m_injector.getInstance(ServiceFactory.class);
 
     m_metaInfo = m_injector.getInstance(AmbariMetaInfo.class);
-    m_metaInfo.init();
 
     m_clusterName = "c1";
     m_clusters.addCluster(m_clusterName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
index 7459bd3..766105d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterDeadlockTest.java
@@ -114,8 +114,6 @@ public class ClusterDeadlockTest {
     cluster.createClusterVersion(stackId.getStackName(),
         stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING);
 
-    metaInfo.init();
-
     // 100 hosts
     for (int i = 0; i < NUMBER_OF_HOSTS; i++) {
       String hostName = "c64-" + i;

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
index e444828..66a4ade 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
@@ -98,6 +98,7 @@ import org.apache.ambari.server.state.host.HostRegistrationRequestEvent;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.ArgumentCaptor;
 
 import com.google.gson.Gson;
 import com.google.inject.AbstractModule;
@@ -107,7 +108,6 @@ import com.google.inject.Singleton;
 import com.google.inject.persist.PersistService;
 import com.google.inject.persist.Transactional;
 import com.google.inject.util.Modules;
-import org.mockito.ArgumentCaptor;
 
 public class ClusterTest {
 
@@ -179,7 +179,6 @@ public class ClusterTest {
     hostVersionDAO = injector.getInstance(HostVersionDAO.class);
     hostComponentStateDAO = injector.getInstance(HostComponentStateDAO.class);
     repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
-    metaInfo.init();
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
index 3a2773f..839b25f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersDeadlockTest.java
@@ -81,7 +81,6 @@ public class ClustersDeadlockTest {
     cluster.setDesiredStackVersion(stackId);
     helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion());
     cluster.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING);
-    metaInfo.init();
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
index ebf742e..c2ab35f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
@@ -49,11 +49,11 @@ import org.apache.ambari.server.orm.entities.ClusterStateEntity;
 import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntityPK;
 import org.apache.ambari.server.orm.entities.HostComponentStateEntityPK;
 import org.apache.ambari.server.state.Cluster;
-import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
 import org.apache.ambari.server.state.ConfigFactory;
 import org.apache.ambari.server.state.Host;
+import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponent;
 import org.apache.ambari.server.state.ServiceComponentHost;
@@ -83,7 +83,6 @@ public class ClustersTest {
     injector.getInstance(GuiceJpaInitializer.class);
     clusters = injector.getInstance(Clusters.class);
     injector.injectMembers(this);
-    metaInfo.init();
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
index cac7dd7..27b2a0e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
@@ -44,7 +44,6 @@ import org.apache.ambari.server.orm.entities.HostEntity;
 import org.apache.ambari.server.orm.entities.HostStateEntity;
 import org.apache.ambari.server.state.AgentVersion;
 import org.apache.ambari.server.state.Cluster;
-import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
 import org.apache.ambari.server.state.ConfigFactory;
@@ -54,6 +53,7 @@ import org.apache.ambari.server.state.HostHealthStatus;
 import org.apache.ambari.server.state.HostHealthStatus.HealthStatus;
 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.StackId;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -358,7 +358,6 @@ public class HostTest {
   @Test
   public void testHostDesiredConfig() throws Exception {
     AmbariMetaInfo metaInfo = injector.getInstance(AmbariMetaInfo.class);
-    metaInfo.init();
 
     clusters.addCluster("c1");
     Cluster c1 = clusters.getCluster("c1");
@@ -420,7 +419,6 @@ public class HostTest {
   @Test
   public void testHostMaintenance() throws Exception {
     AmbariMetaInfo metaInfo = injector.getInstance(AmbariMetaInfo.class);
-    metaInfo.init();
 
     clusters.addCluster("c1");
     Cluster c1 = clusters.getCluster("c1");

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
index b37c0a7..1701a33 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
@@ -60,7 +60,6 @@ public class UpgradePackTest {
     injector.getInstance(GuiceJpaInitializer.class);
 
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-    ambariMetaInfo.init();
   }
 
   @After
@@ -214,8 +213,9 @@ public class UpgradePackTest {
 
     int i = 0;
     for (Entry<String, ?> entry : map.entrySet()) {
-      if (entry.getKey().equals(keyToFind))
+      if (entry.getKey().equals(keyToFind)) {
         return i;
+      }
       i++;
     }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
index 8ebf2ce..ba19154 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
@@ -40,7 +40,6 @@ import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntityPK;
 import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
 import org.apache.ambari.server.orm.entities.HostComponentStateEntityPK;
 import org.apache.ambari.server.state.Cluster;
-import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
 import org.apache.ambari.server.state.ConfigFactory;
@@ -48,6 +47,7 @@ import org.apache.ambari.server.state.ConfigHelper;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.HostConfig;
 import org.apache.ambari.server.state.MaintenanceState;
+import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.SecurityState;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponent;
@@ -114,7 +114,6 @@ public class ServiceComponentHostTest {
     c1.setDesiredStackVersion(stackId);
     helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion());
     c1.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING);
-    metaInfo.init();
     clusters.mapHostToCluster("h1","C1");
   }
 
@@ -722,7 +721,6 @@ public class ServiceComponentHostTest {
     c2.setDesiredStackVersion(stackId);
     helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion());
     c2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING);
-    metaInfo.init();
     clusters.mapHostToCluster(hostName, clusterName);
 
     Cluster cluster = clusters.getCluster(clusterName);
@@ -950,7 +948,6 @@ public class ServiceComponentHostTest {
     helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion());
     c2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING);
 
-    metaInfo.init();
     clusters.mapHostToCluster(hostName, clusterName);
 
     Cluster cluster = clusters.getCluster(clusterName);
@@ -1084,7 +1081,6 @@ public class ServiceComponentHostTest {
     c2.setDesiredStackVersion(stackId);
     helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion());
     c2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING);
-    metaInfo.init();
     clusters.mapHostToCluster(hostName, clusterName);
 
     Cluster cluster = clusters.getCluster(clusterName);
@@ -1128,7 +1124,6 @@ public class ServiceComponentHostTest {
     c2.setDesiredStackVersion(stackId);
     helper.getOrCreateRepositoryVersion(stackId.getStackName(), stackId.getStackVersion());
     c2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.UPGRADING);
-    metaInfo.init();
     clusters.mapHostToCluster(hostName, clusterName);
 
     Cluster cluster = clusters.getCluster(clusterName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/utils/TestStageUtils.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/utils/TestStageUtils.java b/ambari-server/src/test/java/org/apache/ambari/server/utils/TestStageUtils.java
index 8b134c4..c411985 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/utils/TestStageUtils.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/utils/TestStageUtils.java
@@ -97,8 +97,6 @@ public class TestStageUtils {
     injector.getInstance(GuiceJpaInitializer.class);
     serviceComponentHostFactory = injector.getInstance(ServiceComponentHostFactory.class);
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-    ambariMetaInfo.init();
-
   }
 
 


[2/2] ambari git commit: AMBARI-10301 - Stack Database Table Creation and Population From Resources (jonathanhurley)

Posted by jo...@apache.org.
AMBARI-10301 - Stack Database Table Creation and Population From Resources (jonathanhurley)


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

Branch: refs/heads/trunk
Commit: 69197e6302f28e69ccfc11b1e31d77d9dcf61a97
Parents: cc4a9a3
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue Mar 31 15:53:23 2015 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed Apr 1 19:00:42 2015 -0400

----------------------------------------------------------------------
 .../server/api/services/AmbariMetaInfo.java     |  44 ++---
 .../server/configuration/Configuration.java     |  12 +-
 .../ambari/server/controller/AmbariServer.java  |   4 -
 .../server/controller/ControllerModule.java     |   5 +-
 .../apache/ambari/server/orm/dao/StackDAO.java  | 160 +++++++++++++++++++
 .../ambari/server/orm/entities/StackEntity.java | 154 ++++++++++++++++++
 .../server/orm/entities/StackEntity_.java       |  35 ++++
 .../ambari/server/stack/StackManager.java       |  77 +++++++--
 .../server/stack/StackManagerFactory.java       |  48 ++++++
 .../server/upgrade/UpgradeCatalog210.java       |  38 ++++-
 .../main/resources/Ambari-DDL-MySQL-CREATE.sql  |   9 ++
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql |   8 +
 .../resources/Ambari-DDL-Postgres-CREATE.sql    |  12 +-
 .../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql     |  12 +-
 .../resources/Ambari-DDL-SQLServer-CREATE.sql   |  12 +-
 .../src/main/resources/META-INF/persistence.xml |   3 +-
 .../actionmanager/TestActionDBAccessorImpl.java |   4 +
 .../ambari/server/agent/AgentResourceTest.java  |  57 ++++---
 .../server/agent/TestHeartbeatHandler.java      |   6 +-
 .../server/agent/TestHeartbeatMonitor.java      |   3 +-
 .../server/api/services/AmbariMetaInfoTest.java |  61 +++++--
 .../services/KerberosServiceMetaInfoTest.java   |  56 +++++--
 .../AmbariCustomCommandExecutionHelperTest.java |   5 +-
 .../AmbariManagementControllerTest.java         |  17 +-
 .../BackgroundCustomCommandExecutionTest.java   |   4 +-
 .../server/controller/KerberosHelperTest.java   |  50 +++---
 ...hYarnCapacitySchedulerReleaseConfigTest.java |   4 +-
 ...ClusterStackVersionResourceProviderTest.java |  69 +++-----
 .../HostStackVersionResourceProviderTest.java   |  44 ++---
 .../internal/JMXHostProviderTest.java           |  23 +--
 .../StackArtifactResourceProviderTest.java      |  38 ++---
 .../HostVersionOutOfSyncListenerTest.java       |  17 +-
 .../scheduler/ExecutionScheduleManagerTest.java |  59 ++++---
 .../stack/StackManagerCommonServicesTest.java   | 111 ++++++++-----
 .../server/stack/StackManagerMiscTest.java      |  69 +++++---
 .../ambari/server/stack/StackManagerTest.java   |  64 ++++----
 .../ambari/server/state/ConfigGroupTest.java    |  18 +--
 .../ambari/server/state/ConfigHelperTest.java   |  34 ++--
 .../server/state/RequestExecutionTest.java      |  17 +-
 .../server/state/ServiceComponentTest.java      |   2 -
 .../apache/ambari/server/state/ServiceTest.java |   1 -
 .../ambari/server/state/UpgradeHelperTest.java  |   1 -
 .../state/alerts/AlertEventPublisherTest.java   |   1 -
 .../state/alerts/InitialAlertEventTest.java     |   1 -
 .../state/cluster/ClusterDeadlockTest.java      |   2 -
 .../server/state/cluster/ClusterTest.java       |   3 +-
 .../state/cluster/ClustersDeadlockTest.java     |   1 -
 .../server/state/cluster/ClustersTest.java      |   3 +-
 .../ambari/server/state/host/HostTest.java      |   4 +-
 .../server/state/stack/UpgradePackTest.java     |   4 +-
 .../svccomphost/ServiceComponentHostTest.java   |   7 +-
 .../ambari/server/utils/TestStageUtils.java     |   2 -
 52 files changed, 1074 insertions(+), 421 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
index 3e37c3c..e87cd57 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
@@ -47,15 +47,14 @@ import org.apache.ambari.server.customactions.ActionDefinitionManager;
 import org.apache.ambari.server.events.AlertDefinitionDisabledEvent;
 import org.apache.ambari.server.events.AlertDefinitionRegistrationEvent;
 import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
-import org.apache.ambari.server.metadata.ActionMetadata;
 import org.apache.ambari.server.metadata.AgentAlertDefinitions;
 import org.apache.ambari.server.orm.dao.AlertDefinitionDAO;
 import org.apache.ambari.server.orm.dao.MetainfoDAO;
 import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
 import org.apache.ambari.server.orm.entities.MetainfoEntity;
-import org.apache.ambari.server.stack.StackContext;
 import org.apache.ambari.server.stack.StackDirectory;
 import org.apache.ambari.server.stack.StackManager;
+import org.apache.ambari.server.stack.StackManagerFactory;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.ComponentInfo;
@@ -92,8 +91,6 @@ import com.google.inject.Singleton;
  */
 @Singleton
 public class AmbariMetaInfo {
-
-
   public static final String SERVICE_CONFIG_FOLDER_NAME = "configuration";
   public static final String SERVICE_THEMES_FOLDER_NAME = "themes";
   public static final String SERVICE_CONFIG_FILE_NAME_POSTFIX = ".xml";
@@ -137,7 +134,7 @@ public class AmbariMetaInfo {
 
   // all the supported OS'es
   @Inject
-  private OsFamily os_family;
+  private OsFamily osFamily;
 
   /**
    * ALL_SUPPORTED_OS is dynamically generated list from loaded families from os_family.json
@@ -147,7 +144,6 @@ public class AmbariMetaInfo {
 
   private final ActionDefinitionManager adManager = new ActionDefinitionManager();
   private String serverVersion = "undefined";
-  private StackManager stackManager;
 
   private File stackRoot;
   private File commonServicesRoot;
@@ -161,7 +157,7 @@ public class AmbariMetaInfo {
    * Alert Definition DAO used to merge stack definitions into the database.
    */
   @Inject
-  AlertDefinitionDAO alertDefinitionDao;
+  private AlertDefinitionDAO alertDefinitionDao;
 
   /**
    * A factory that assists in the creation of {@link AlertDefinition} and
@@ -200,10 +196,16 @@ public class AmbariMetaInfo {
   @Inject
   private KerberosServiceDescriptorFactory kerberosServiceDescriptorFactory;
 
-  //todo: only used by StackManager
+  /**
+   * Factory for injecting {@link StackManager} instances.
+   */
   @Inject
-  ActionMetadata actionMetadata;
+  private StackManagerFactory stackManagerFactory;
 
+  /**
+   * Singleton instance of the stack manager.
+   */
+  private StackManager stackManager;
 
   /**
    * Ambari Meta Info Object
@@ -214,22 +216,17 @@ public class AmbariMetaInfo {
   @Inject
   public AmbariMetaInfo(Configuration conf) throws Exception {
     String stackPath = conf.getMetadataPath();
-    String commonServicesPath = conf.getCommonServicesPath();
-    String serverVersionFilePath = conf.getServerVersionFilePath();
     stackRoot = new File(stackPath);
+
+    String commonServicesPath = conf.getCommonServicesPath();
     if(commonServicesPath != null && !commonServicesPath.isEmpty()) {
       commonServicesRoot = new File(commonServicesPath);
     }
+
+    String serverVersionFilePath = conf.getServerVersionFilePath();
     serverVersionFile = new File(serverVersionFilePath);
-    customActionRoot = new File(conf.getCustomActionDefinitionPath());
-    os_family = new OsFamily(conf);
-    ALL_SUPPORTED_OS = new ArrayList<String>(os_family.os_list());
-  }
 
-  public AmbariMetaInfo(File stackRoot, File commonServicesRoot, File serverVersionFile) throws Exception {
-    this.stackRoot = stackRoot;
-    this.commonServicesRoot = commonServicesRoot;
-    this.serverVersionFile = serverVersionFile;
+    customActionRoot = new File(conf.getCustomActionDefinitionPath());
   }
 
   /**
@@ -240,10 +237,13 @@ public class AmbariMetaInfo {
   @Inject
   public void init() throws Exception {
     // Need to be initialized before all actions
-    ALL_SUPPORTED_OS = new ArrayList<String>(os_family.os_list());
+    ALL_SUPPORTED_OS = new ArrayList<String>(osFamily.os_list());
+
     readServerVersion();
-    stackManager = new StackManager(stackRoot, commonServicesRoot,
-        new StackContext(metaInfoDAO, actionMetadata, os_family));
+
+    stackManager = stackManagerFactory.create(stackRoot, commonServicesRoot,
+        osFamily);
+
     getCustomActionDefinitions(customActionRoot);
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
index f6cf6a1..740532a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
@@ -51,7 +51,7 @@ import com.google.inject.Singleton;
  */
 @Singleton
 public class Configuration {
-  
+
   @Inject
   private OsFamily osFamily;
 
@@ -576,6 +576,16 @@ public class Configuration {
   }
 
   /**
+   * Gets a copy of all of the configuration properties that back this
+   * {@link Configuration} instance.
+   *
+   * @return a copy of all of the properties.
+   */
+  public Properties getProperties() {
+    return new Properties(properties);
+  }
+
+  /**
    * Loads trusted certificates store properties
    */
   protected void loadSSLParams(){

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
index 9b340ee..7ea96be 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
@@ -203,10 +203,6 @@ public class AmbariServer {
 
   @SuppressWarnings("deprecation")
   public void run() throws Exception {
-    // Initialize meta info before heartbeat monitor
-    ambariMetaInfo.init();
-    LOG.info("********* Meta Info initialized **********");
-
     performStaticInjection();
     initDB();
     server = new Server();

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
index 9c8bcd7..58b94d8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
@@ -73,6 +73,7 @@ import org.apache.ambari.server.scheduler.ExecutionSchedulerImpl;
 import org.apache.ambari.server.security.SecurityHelper;
 import org.apache.ambari.server.security.SecurityHelperImpl;
 import org.apache.ambari.server.serveraction.kerberos.KerberosOperationHandlerFactory;
+import org.apache.ambari.server.stack.StackManagerFactory;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
@@ -364,7 +365,6 @@ public class ControllerModule extends AbstractModule {
     install(new FactoryModuleBuilder().implement(
         Service.class, ServiceImpl.class).build(ServiceFactory.class));
 
-
     install(new FactoryModuleBuilder()
         .implement(ResourceProvider.class, Names.named("host"), HostResourceProvider.class)
         .implement(ResourceProvider.class, Names.named("hostComponent"), HostComponentResourceProvider.class)
@@ -374,7 +374,6 @@ public class ControllerModule extends AbstractModule {
         .implement(ResourceProvider.class, Names.named("repositoryVersion"), RepositoryVersionResourceProvider.class)
         .build(ResourceProviderFactory.class));
 
-
     install(new FactoryModuleBuilder().implement(
         ServiceComponent.class, ServiceComponentImpl.class).build(
         ServiceComponentFactory.class));
@@ -387,8 +386,10 @@ public class ControllerModule extends AbstractModule {
         ConfigGroup.class, ConfigGroupImpl.class).build(ConfigGroupFactory.class));
     install(new FactoryModuleBuilder().implement(RequestExecution.class,
         RequestExecutionImpl.class).build(RequestExecutionFactory.class));
+
     install(new FactoryModuleBuilder().build(StageFactory.class));
     install(new FactoryModuleBuilder().build(RequestFactory.class));
+    install(new FactoryModuleBuilder().build(StackManagerFactory.class));
 
     bind(HostRoleCommandFactory.class).to(HostRoleCommandFactoryImpl.class);
     bind(SecurityHelper.class).toInstance(SecurityHelperImpl.getInstance());

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java
new file mode 100644
index 0000000..6405068
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java
@@ -0,0 +1,160 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.orm.dao;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.orm.entities.StackEntity;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.google.inject.Singleton;
+import com.google.inject.persist.Transactional;
+
+/**
+ * The {@link StackDAO} class is used to manage the persistence and retrieval of
+ * {@link StackEntity} instances.
+ */
+@Singleton
+public class StackDAO {
+
+  /**
+   * JPA entity manager
+   */
+  @Inject
+  private Provider<EntityManager> entityManagerProvider;
+
+  /**
+   * DAO utilities for dealing mostly with {@link TypedQuery} results.
+   */
+  @Inject
+  private DaoUtils daoUtils;
+
+  /**
+   * Gets a stack with the specified ID.
+   *
+   * @param stackId
+   *          the ID of the stack to retrieve.
+   * @return the stack or {@code null} if none exists.
+   */
+  public StackEntity findById(long stackId) {
+    return entityManagerProvider.get().find(StackEntity.class, stackId);
+  }
+
+  /**
+   * Gets all of the defined stacks.
+   *
+   * @return all of the stacks loaded from resources or an empty list (never
+   *         {@code null}).
+   */
+  public List<StackEntity> findAll() {
+    TypedQuery<StackEntity> query = entityManagerProvider.get().createNamedQuery(
+        "StackEntity.findAll", StackEntity.class);
+
+    return daoUtils.selectList(query);
+  }
+
+  /**
+   * Gets the stack that matches the specified name and version.
+   *
+   * @return the stack matching the specified name and version or {@code null}
+   *         if none.
+   */
+  public StackEntity find(String stackName, String stackVersion) {
+    TypedQuery<StackEntity> query = entityManagerProvider.get().createNamedQuery(
+        "StackEntity.findByNameAndVersion", StackEntity.class);
+
+    query.setParameter("stackName", stackName);
+    query.setParameter("stackVersion", stackVersion);
+
+    return daoUtils.selectOne(query);
+  }
+
+  /**
+   * Persists a new stack instance.
+   *
+   * @param stack
+   *          the stack to persist (not {@code null}).
+   */
+  @Transactional
+  public void create(StackEntity stack)
+      throws AmbariException {
+    EntityManager entityManager = entityManagerProvider.get();
+    entityManager.persist(stack);
+  }
+
+  /**
+   * Refresh the state of the stack instance from the database.
+   *
+   * @param stack
+   *          the stack to refresh (not {@code null}).
+   */
+  @Transactional
+  public void refresh(StackEntity stack) {
+    entityManagerProvider.get().refresh(stack);
+  }
+
+  /**
+   * Merge the speicified stack with the existing stack in the database.
+   *
+   * @param stack
+   *          the stack to merge (not {@code null}).
+   * @return the updated stack with merged content (never {@code null}).
+   */
+  @Transactional
+  public StackEntity merge(StackEntity stack) {
+    return entityManagerProvider.get().merge(stack);
+  }
+
+  /**
+   * Creates or updates the specified entity. This method will check
+   * {@link StackEntity#getStackId()} in order to determine whether the entity
+   * should be created or merged.
+   *
+   * @param stack
+   *          the stack to create or update (not {@code null}).
+   */
+  public void createOrUpdate(StackEntity stack)
+      throws AmbariException {
+    if (null == stack.getStackId()) {
+      create(stack);
+    } else {
+      merge(stack);
+    }
+  }
+
+  /**
+   * Removes the specified stack and all related clusters, services and
+   * components.
+   *
+   * @param stack
+   *          the stack to remove.
+   */
+  @Transactional
+  public void remove(StackEntity stack) {
+    EntityManager entityManager = entityManagerProvider.get();
+    stack = findById(stack.getStackId());
+    if (null != stack) {
+      entityManager.remove(stack);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity.java
new file mode 100644
index 0000000..2d75917
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity.java
@@ -0,0 +1,154 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.orm.entities;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+import javax.persistence.UniqueConstraint;
+
+/**
+ * The {@link StackEntity} class is used to model an alert that needs
+ * to run in the system. Each received alert from an agent will essentially be
+ * an instance of this template.
+ */
+@Entity
+@Table(name = "stack", uniqueConstraints = @UniqueConstraint(columnNames = {
+    "stack_name", "stack_version" }))
+@TableGenerator(name = "stack_id_generator", table = "ambari_sequences", pkColumnName = "sequence_name", valueColumnName = "sequence_value", pkColumnValue = "stack_id_seq", initialValue = 0, allocationSize = 1)
+@NamedQueries({
+    @NamedQuery(name = "StackEntity.findAll", query = "SELECT stack FROM StackEntity stack"),
+    @NamedQuery(name = "StackEntity.findByNameAndVersion", query = "SELECT stack FROM StackEntity stack WHERE stack.stackName = :stackName AND stack.stackVersion = :stackVersion") })
+public class StackEntity {
+
+  @Id
+  @GeneratedValue(strategy = GenerationType.TABLE, generator = "stack_id_generator")
+  @Column(name = "stack_id", nullable = false, updatable = false)
+  private Long stackId;
+
+  @Column(name = "stack_name", length = 255, nullable = false)
+  private String stackName;
+
+  @Column(name = "stack_version", length = 255, nullable = false)
+  private String stackVersion;
+
+  /**
+   * Constructor.
+   */
+  public StackEntity() {
+  }
+
+  /**
+   * Gets the unique identifier for this stack.
+   *
+   * @return the ID.
+   */
+  public Long getStackId() {
+    return stackId;
+  }
+
+  /**
+   * Gets the name of the stack, such as "HDP".
+   *
+   * @return the name of the stack (never {@code null}).
+   */
+  public String getStackName() {
+    return stackName;
+  }
+
+  /**
+   * Sets the name of the stack, such as "HDP".
+   *
+   * @param stackName
+   *          the stack name (not {@code null}).
+   */
+  public void setStackName(String stackName) {
+    this.stackName = stackName;
+  }
+
+  /**
+   * Gets the version of the stack, such as "2.2".
+   *
+   * @return the stack version (never {@code null}).
+   */
+  public String getStackVersion() {
+    return stackVersion;
+  }
+
+  /**
+   * Sets the version of the stack, such as "2.2".
+   *
+   * @param stackVersion
+   *          the stack version (not {@code null}).
+   */
+  public void setStackVersion(String stackVersion) {
+    this.stackVersion = stackVersion;
+  }
+
+  /**
+   *
+   */
+  @Override
+  public boolean equals(Object object) {
+    if (this == object) {
+      return true;
+    }
+
+    if (object == null || getClass() != object.getClass()) {
+      return false;
+    }
+
+    StackEntity that = (StackEntity) object;
+
+    if (stackId != null ? !stackId.equals(that.stackId) : that.stackId != null) {
+      return false;
+    }
+
+    return true;
+  }
+
+  /**
+   *
+   */
+  @Override
+  public int hashCode() {
+    int result = null != stackId ? stackId.hashCode() : 0;
+    return result;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public String toString() {
+    StringBuilder buffer = new StringBuilder();
+    buffer.append(getClass().getSimpleName());
+    buffer.append("{");
+    buffer.append("id=").append(stackId);
+    buffer.append(", name=").append(stackName);
+    buffer.append(", version=").append(stackVersion);
+    buffer.append("}");
+    return buffer.toString();
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity_.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity_.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity_.java
new file mode 100644
index 0000000..37396dd
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity_.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.orm.entities;
+
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.metamodel.SingularAttribute;
+import javax.persistence.metamodel.StaticMetamodel;
+
+
+/**
+ * The {@link StackEntity_} is a strongly typed metamodel for creating
+ * {@link CriteriaQuery} for {@link StackEntity}.
+ */
+@StaticMetamodel(StackEntity.class)
+public class StackEntity_ {
+  public static volatile SingularAttribute<StackEntity, Long> stackId;
+  public static volatile SingularAttribute<StackEntity, String> stackName;
+  public static volatile SingularAttribute<StackEntity, String> stackVersion;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java
index 33f1447..1026245 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java
@@ -18,21 +18,30 @@
 
 package org.apache.ambari.server.stack;
 
+import java.io.File;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.metadata.ActionMetadata;
+import org.apache.ambari.server.orm.dao.MetainfoDAO;
+import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.entities.StackEntity;
 import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.ambari.server.state.StackInfo;
+import org.apache.ambari.server.state.stack.OsFamily;
 import org.apache.ambari.server.state.stack.ServiceMetainfoXml;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
+import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
 
 
 /**
@@ -70,27 +79,59 @@ public class StackManager {
   private Map<String, StackInfo> stackMap = new HashMap<String, StackInfo>();
 
   /**
-   * Constructor.
-   * Initialize stack manager.
+   * Constructor. Initialize stack manager.
    *
-   * @param stackRoot           stack root directory
-   * @param commonServicesRoot  common services root directory
-   * @param stackContext        context which provides external functionality
+   * @param stackRoot
+   *          stack root directory
+   * @param commonServicesRoot
+   *          common services root directory
+   * @param osFamily
+   *          the OS family read from resources
+   * @param metaInfoDAO
+   *          metainfo DAO automatically injected
+   * @param actionMetadata
+   *          action meta data automatically injected
+   * @param stackDao
+   *          stack DAO automatically injected
    *
-   * @throws AmbariException if an exception occurs while processing the stacks
+   * @throws AmbariException
+   *           if an exception occurs while processing the stacks
    */
-  public StackManager(File stackRoot, File commonServicesRoot, StackContext stackContext) throws AmbariException {
+  @Inject
+  public StackManager(@Assisted("stackRoot") File stackRoot,
+      @Assisted("commonServicesRoot") @Nullable File commonServicesRoot,
+      @Assisted OsFamily osFamily, MetainfoDAO metaInfoDAO,
+      ActionMetadata actionMetadata, StackDAO stackDao)
+      throws AmbariException {
+
     validateStackDirectory(stackRoot);
     validateCommonServicesDirectory(commonServicesRoot);
 
-    this.stackMap = new HashMap<String, StackInfo>();
-    this.stackContext = stackContext;
+    stackMap = new HashMap<String, StackInfo>();
+    stackContext = new StackContext(metaInfoDAO, actionMetadata, osFamily);
 
     Map<String, ServiceModule> commonServiceModules = parseCommonServicesDirectory(commonServicesRoot);
     Map<String, StackModule> stackModules = parseStackDirectory(stackRoot);
 
     fullyResolveCommonServices(stackModules, commonServiceModules);
     fullyResolveStacks(stackModules, commonServiceModules);
+
+    // for every stack read in, ensure that we have a database entry for it;
+    // don't put try/catch logic around this since a failure here will
+    // cause other things to break down the road
+    Collection<StackInfo> stacks = getStacks();
+    for( StackInfo stack : stacks ){
+      String stackName = stack.getName();
+      String stackVersion = stack.getVersion();
+
+      if (stackDao.find(stackName, stackVersion) == null) {
+        StackEntity stackEntity = new StackEntity();
+        stackEntity.setStackName(stackName);
+        stackEntity.setStackVersion(stackVersion);
+
+        stackDao.create(stackEntity);
+      }
+    }
   }
 
   /**
@@ -201,10 +242,11 @@ public class StackManager {
             + ", commonServicesRoot = " + commonServicesRootAbsolutePath);
       }
 
-      if (!commonServicesRoot.isDirectory() && !commonServicesRoot.exists())
+      if (!commonServicesRoot.isDirectory() && !commonServicesRoot.exists()) {
         throw new AmbariException("" + Configuration.COMMON_SERVICES_DIR_PATH
             + " should be a directory with common services"
             + ", commonServicesRoot = " + commonServicesRootAbsolutePath);
+      }
     }
   }
 
@@ -221,10 +263,11 @@ public class StackManager {
           + ", stackRoot = " + stackRootAbsPath);
     }
 
-    if (!stackRoot.isDirectory() && !stackRoot.exists())
+    if (!stackRoot.isDirectory() && !stackRoot.exists()) {
       throw new AmbariException("" + Configuration.METADETA_DIR_PATH
           + " should be a directory with stack"
           + ", stackRoot = " + stackRootAbsPath);
+    }
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManagerFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManagerFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManagerFactory.java
new file mode 100644
index 0000000..5aa2b5f
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManagerFactory.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.stack;
+
+import java.io.File;
+
+import javax.annotation.Nullable;
+
+import org.apache.ambari.server.state.stack.OsFamily;
+
+import com.google.inject.assistedinject.Assisted;
+import com.google.inject.assistedinject.AssistedInject;
+
+/**
+ * The {@link StackManagerFactory} is used along with {@link AssistedInject} to
+ * build instances of {@link StackManager}.
+ */
+public interface StackManagerFactory {
+
+  /**
+   * @param stackRoot
+   *          the root of the stack (not {@code null}).
+   * @param commonServicesRoot
+   *          the root of the common services from which other stack services
+   *          are extended (not {@code null}).
+   * @param osFamily
+   *          the list of all parsed OS families (not {@code null}).
+   * @return a stack manager instance which contains all parsed stacks.
+   */
+  StackManager create(@Assisted("stackRoot") File stackRoot,
+      @Nullable @Assisted("commonServicesRoot") File commonServicesRoot,
+      OsFamily osFamily);
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
index 7bdfb4f..23ed67d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
@@ -18,9 +18,11 @@
 
 package org.apache.ambari.server.upgrade;
 
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.persist.Transactional;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
@@ -29,10 +31,9 @@ import org.apache.ambari.server.orm.entities.HostEntity;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.persist.Transactional;
 
 
 /**
@@ -59,6 +60,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
   private static final String WIDGET_LAYOUT_USER_WIDGET_TABLE = "widget_layout_user_widget";
   private static final String VIEW_INSTANCE_TABLE = "viewinstance";
   private static final String VIEW_PARAMETER_TABLE = "viewparameter";
+  private static final String STACK_TABLE_DEFINITION = "stack";
 
   /**
    * {@inheritDoc}
@@ -103,6 +105,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
   protected void executeDDLUpdates() throws AmbariException, SQLException {
     executeHostsDDLUpdates();
     executeWidgetDDLUpdates();
+    executeStackDDLUpdates();
   }
 
   /**
@@ -272,6 +275,27 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
     dbAccessor.addFKConstraint(WIDGET_LAYOUT_USER_WIDGET_TABLE, "FK_user_widget_id", "user_widget_id", "user_widget", "id", true, false);
   }
 
+  /**
+   * Adds the stack table and constraints.
+   */
+  private void executeStackDDLUpdates() throws AmbariException, SQLException {
+    // alert_definition
+    ArrayList<DBColumnInfo> columns = new ArrayList<DBColumnInfo>();
+    columns.add(new DBColumnInfo("stack_id", Long.class, null, null, false));
+    columns.add(new DBColumnInfo("stack_name", String.class, 255, null, false));
+    columns.add(new DBColumnInfo("stack_version", String.class, 255, null,
+        false));
+
+    dbAccessor.createTable(STACK_TABLE_DEFINITION, columns, "stack_id");
+
+    dbAccessor.executeQuery("ALTER TABLE " + STACK_TABLE_DEFINITION
+        + " ADD CONSTRAINT unq_stack UNIQUE (stack_name,stack_version)", false);
+
+    dbAccessor.executeQuery(
+        "INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('stack_id_seq', 0)",
+        false);
+  }
+
   // ----- UpgradeCatalog ----------------------------------------------------
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/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 e28edfd..af10a0e 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -832,6 +832,14 @@ CREATE TABLE upgrade_item (
   FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
 );
 
+CREATE TABLE stack(
+  stack_id BIGINT NOT NULL,
+  stack_name VARCHAR(255) NOT NULL,
+  stack_version VARCHAR(255) NOT NULL,
+  PRIMARY KEY (stack_id),
+  CONSTRAINT uni_stack UNIQUE(stack_name,stack_version)
+);
+
 -- 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 ('host_id_seq', 0);
@@ -865,6 +873,7 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('repo_versio
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_id_seq', 0);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_group_id_seq', 0);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_item_id_seq', 0);
+INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('stack_id_seq', 0);
 
 insert into adminresourcetype (resource_type_id, resource_type_name)
   select 1, 'AMBARI'

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/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 513d951..ff73f60 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -822,6 +822,13 @@ CREATE TABLE upgrade_item (
   FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
 );
 
+CREATE TABLE stack(
+  stack_id NUMBER(19) NOT NULL,
+  stack_name VARCHAR2(255) NOT NULL,
+  stack_version VARCHAR2(255) NOT NULL,
+  PRIMARY KEY (stack_id),
+  CONSTRAINT uni_stack UNIQUE(stack_name,stack_version)
+);
 
 ---------inserting some data-----------
 -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0.
@@ -857,6 +864,7 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('repo_versio
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_id_seq', 0);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_group_id_seq', 0);
 INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_item_id_seq', 0);
+INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('stack_id_seq', 0);
 
 INSERT INTO metainfo("metainfo_key", "metainfo_value") values ('version', '${ambariVersion}');
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/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 6361edb..e48ea7a 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -824,6 +824,14 @@ CREATE TABLE upgrade_item (
   FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
 );
 
+CREATE TABLE stack(
+  stack_id BIGINT NOT NULL,
+  stack_name VARCHAR(255) NOT NULL,
+  stack_version VARCHAR(255) NOT NULL,
+  PRIMARY KEY (stack_id),
+  CONSTRAINT uni_stack UNIQUE(stack_name,stack_version)
+);
+
 ---------inserting some data-----------
 -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0.
 BEGIN;
@@ -890,7 +898,9 @@ INSERT INTO ambari_sequences (sequence_name, sequence_value)
   union all
   select 'upgrade_group_id_seq', 0
   union all
-  select 'upgrade_item_id_seq', 0;
+  select 'upgrade_item_id_seq', 0,
+  union all
+  select 'stack_id_seq', 0;  
 
 INSERT INTO adminresourcetype (resource_type_id, resource_type_name)
   SELECT 1, 'AMBARI'

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
index 2121805..49c92c0 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
@@ -908,6 +908,14 @@ CREATE TABLE ambari.upgrade_item (
   FOREIGN KEY (upgrade_group_id) REFERENCES ambari.upgrade_group(upgrade_group_id)
 );
 
+CREATE TABLE ambari.stack(
+  stack_id BIGINT NOT NULL,
+  stack_name VARCHAR(255) NOT NULL,
+  stack_version VARCHAR(255) NOT NULL,
+  PRIMARY KEY (stack_id),
+  CONSTRAINT uni_stack UNIQUE(stack_name,stack_version)
+);
+
 GRANT ALL PRIVILEGES ON TABLE ambari.upgrade TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.upgrade_group TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.upgrade_item TO :username;
@@ -978,7 +986,9 @@ INSERT INTO ambari.ambari_sequences (sequence_name, sequence_value)
   union all
   select 'upgrade_group_id_seq', 0 
   union all
-  select 'upgrade_item_id_seq', 0;
+  select 'upgrade_item_id_seq', 0,
+  union all
+  select 'stack_id_seq', 0;
 
 INSERT INTO ambari.adminresourcetype (resource_type_id, resource_type_name)
   SELECT 1, 'AMBARI'

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/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 40b00d9..5653ff8 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -367,6 +367,14 @@ CREATE TABLE upgrade_item (
   FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
 );
 
+CREATE TABLE stack(
+  stack_id BIGINT NOT NULL,
+  stack_name VARCHAR(255) NOT NULL,
+  stack_version VARCHAR(255) NOT NULL,
+  PRIMARY KEY (stack_id),
+  CONSTRAINT uni_stack UNIQUE(stack_name,stack_version)
+);
+
 ---------inserting some data-----------
 BEGIN TRANSACTION
   INSERT INTO ambari_sequences (sequence_name, [sequence_value])
@@ -432,7 +440,9 @@ BEGIN TRANSACTION
   UNION ALL
   SELECT 'host_version_id_seq', 0
   UNION ALL
-  SELECT 'repo_version_id_seq', 0;
+  SELECT 'repo_version_id_seq', 0,
+  UNION ALL
+  SELECT 'stack_id_seq', 0;
 
   insert into adminresourcetype (resource_type_id, resource_type_name)
     select 1, 'AMBARI'

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/META-INF/persistence.xml b/ambari-server/src/main/resources/META-INF/persistence.xml
index 723fbc0..3146aff 100644
--- a/ambari-server/src/main/resources/META-INF/persistence.xml
+++ b/ambari-server/src/main/resources/META-INF/persistence.xml
@@ -20,6 +20,7 @@
     <class>org.apache.ambari.server.orm.entities.AlertHistoryEntity</class>
     <class>org.apache.ambari.server.orm.entities.AlertNoticeEntity</class>
     <class>org.apache.ambari.server.orm.entities.AlertTargetEntity</class>
+    <class>org.apache.ambari.server.orm.entities.ArtifactEntity</class>
     <class>org.apache.ambari.server.orm.entities.BlueprintConfigEntity</class>
     <class>org.apache.ambari.server.orm.entities.BlueprintEntity</class>
     <class>org.apache.ambari.server.orm.entities.ClusterConfigEntity</class>
@@ -65,6 +66,7 @@
     <class>org.apache.ambari.server.orm.entities.ServiceConfigApplicationEntity</class>
     <class>org.apache.ambari.server.orm.entities.ServiceConfigEntity</class>
     <class>org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity</class>
+    <class>org.apache.ambari.server.orm.entities.StackEntity</class>
     <class>org.apache.ambari.server.orm.entities.StageEntity</class>
     <class>org.apache.ambari.server.orm.entities.UpgradeEntity</class>
     <class>org.apache.ambari.server.orm.entities.UpgradeGroupEntity</class>
@@ -80,7 +82,6 @@
     <class>org.apache.ambari.server.orm.entities.ViewResourceEntity</class>
     <class>org.apache.ambari.server.orm.entities.WidgetLayoutEntity</class>
     <class>org.apache.ambari.server.orm.entities.WidgetLayoutUserWidgetEntity</class>
-    <class>org.apache.ambari.server.orm.entities.ArtifactEntity</class>
 
     <properties>      
       <property name="eclipselink.cache.size.default" value="10000" />

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
index 1cf58d3..112e1e5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java
@@ -50,9 +50,11 @@ import org.apache.ambari.server.orm.dao.ExecutionCommandDAO;
 import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
 import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
 import org.apache.ambari.server.serveraction.MockServerAction;
+import org.apache.ambari.server.stack.StackManagerFactory;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartEvent;
 import org.apache.ambari.server.utils.StageUtils;
+import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -557,6 +559,8 @@ public class TestActionDBAccessorImpl {
     @Override
     protected void configure() {
       bind(DBAccessor.class).to(TestDBAccessorImpl.class);
+      bind(StackManagerFactory.class).toInstance(
+          EasyMock.createNiceMock(StackManagerFactory.class));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java
index c12e737..f4d9c63 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java
@@ -18,32 +18,25 @@
 
 package org.apache.ambari.server.agent;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.assistedinject.FactoryModuleBuilder;
-import com.google.inject.persist.jpa.AmbariJpaPersistModule;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.config.ClientConfig;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-import com.sun.jersey.api.json.JSONConfiguration;
-import com.sun.jersey.spi.container.servlet.ServletContainer;
-import com.sun.jersey.test.framework.JerseyTest;
-import com.sun.jersey.test.framework.WebAppDescriptor;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import javax.ws.rs.core.MediaType;
+
 import junit.framework.Assert;
+
 import org.apache.ambari.server.actionmanager.ActionDBAccessor;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
 import org.apache.ambari.server.actionmanager.StageFactory;
 import org.apache.ambari.server.agent.rest.AgentResource;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 import org.apache.ambari.server.orm.DBAccessor;
 import org.apache.ambari.server.security.SecurityHelper;
 import org.apache.ambari.server.security.SecurityHelperImpl;
+import org.apache.ambari.server.stack.StackManagerFactory;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
@@ -75,13 +68,26 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
+import org.easymock.EasyMock;
 import org.eclipse.jetty.server.SessionManager;
 import org.junit.Test;
-import javax.ws.rs.core.MediaType;
 
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.assistedinject.FactoryModuleBuilder;
+import com.google.inject.persist.jpa.AmbariJpaPersistModule;
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.UniformInterfaceException;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import com.sun.jersey.api.json.JSONConfiguration;
+import com.sun.jersey.spi.container.servlet.ServletContainer;
+import com.sun.jersey.test.framework.JerseyTest;
+import com.sun.jersey.test.framework.WebAppDescriptor;
 
 public class AgentResourceTest extends JerseyTest {
   static String PACKAGE_NAME = "org.apache.ambari.server.agent.rest";
@@ -105,7 +111,7 @@ public class AgentResourceTest extends JerseyTest {
     GsonBuilder gsonBuilder = new GsonBuilder();
     gsonBuilder.serializeNulls();
     Gson gson = gsonBuilder.create();
-    return (T) gson.fromJson(json, type);
+    return gson.fromJson(json, type);
   }
 
   @Override
@@ -194,7 +200,7 @@ public class AgentResourceTest extends JerseyTest {
             "{user:'hdfs', pid:'325', hadoop:'False', command:'cmd = 2'}]";
     String AlternativeJSON = "[{name:'/etc/alternatives/hdfs-conf', target:'/etc/hadoop/conf.dist'}, " +
             "{name:'abc', target:'def'}]";
-    String AgentEnvJSON = "{\"alternatives\": " + AlternativeJSON + 
+    String AgentEnvJSON = "{\"alternatives\": " + AlternativeJSON +
             ", \"existingUsers\": "+ ExistingUserJSON +
             ", \"umask\": \"18\", \"installedPackages\": "+
             PackageDetailJSON +", \"stackFoldersAndFiles\": "+ DirectoryJSON +
@@ -229,7 +235,7 @@ public class AgentResourceTest extends JerseyTest {
     Assert.assertEquals("/etc/hadoop/conf.dist", alternatives[0].getTarget());
     Assert.assertEquals("abc", alternatives[1].getName());
     Assert.assertEquals("def", alternatives[1].getTarget());
-    
+
     AgentEnv agentEnv = getJsonFormString(
             AgentEnvJSON, AgentEnv.class);
     Assert.assertTrue(18 == agentEnv.getUmask());
@@ -247,7 +253,7 @@ public class AgentResourceTest extends JerseyTest {
     Assert.assertEquals("/var/lib/hadoop", agentEnv.getExistingUsers()[0].getUserHomeDir());
     Assert.assertEquals("None", agentEnv.getExistingUsers()[1].getUserStatus());
     Assert.assertEquals("/var/lib", agentEnv.getStackFoldersAndFiles()[0].getName());
-    Assert.assertEquals("directory", agentEnv.getStackFoldersAndFiles()[1].getType());    
+    Assert.assertEquals("directory", agentEnv.getStackFoldersAndFiles()[1].getType());
   }
 
   @Test
@@ -325,6 +331,9 @@ public class AgentResourceTest extends JerseyTest {
       install(new FactoryModuleBuilder().build(StageFactory.class));
       install(new FactoryModuleBuilder().build(HostRoleCommandFactory.class));
       bind(SecurityHelper.class).toInstance(SecurityHelperImpl.getInstance());
+      bind(AmbariEventPublisher.class).toInstance(EasyMock.createMock(AmbariEventPublisher.class));
+      bind(StackManagerFactory.class).toInstance(
+          EasyMock.createMock(StackManagerFactory.class));
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
index c9d8735..fe4ba60 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
@@ -153,7 +153,6 @@ public class TestHeartbeatHandler {
     injector.getInstance(GuiceJpaInitializer.class);
     clusters = injector.getInstance(Clusters.class);
     injector.injectMembers(this);
-    metaInfo.init();
     log.debug("Using server os type=" + config.getServerOsType());
     unitOfWork = injector.getInstance(UnitOfWork.class);
   }
@@ -2607,10 +2606,11 @@ public class TestHeartbeatHandler {
     File hostDirectory = new File(dataDirectory, "c6403.ambari.apache.org");
 
     File keytabFile;
-    if(hostDirectory.mkdirs())
+    if(hostDirectory.mkdirs()) {
       keytabFile = new File(hostDirectory, DigestUtils.sha1Hex("/etc/security/keytabs/dn.service.keytab"));
-    else
+    } else {
       throw new Exception("Failed to create " + hostDirectory.getAbsolutePath());
+    }
 
     kerberosIdentityDataFileWriter.writeRecord("c6403.ambari.apache.org", "HDFS", "DATANODE",
         "dn/_HOST@_REALM", "service",

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
index 718310c..6bb053b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
@@ -41,11 +41,11 @@ import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.Config;
 import org.apache.ambari.server.state.ConfigFactory;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.HostState;
+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;
@@ -88,7 +88,6 @@ public class TestHeartbeatMonitor {
     injector.getInstance(GuiceJpaInitializer.class);
     helper = injector.getInstance(OrmTestHelper.class);
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-    ambariMetaInfo.init();
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
index ec61af8..f0c1f43 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
@@ -38,6 +38,7 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.Set;
 import java.util.UUID;
 
@@ -59,6 +60,7 @@ import org.apache.ambari.server.orm.dao.MetainfoDAO;
 import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
 import org.apache.ambari.server.orm.entities.MetainfoEntity;
 import org.apache.ambari.server.stack.StackManager;
+import org.apache.ambari.server.stack.StackManagerFactory;
 import org.apache.ambari.server.state.AutoDeployInfo;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
@@ -276,7 +278,9 @@ public class AmbariMetaInfoTest {
 
     List<RepositoryInfo> redhat6Repo = ambariMetaInfo.getRepositories(
         STACK_NAME_HDP, "2.1.1", "redhat6");
+
     assertNotNull(redhat6Repo);
+
     for (RepositoryInfo ri : redhat6Repo) {
       if (HDP_REPO_NAME.equals(ri.getRepoName())) {
         assertEquals(newBaseUrl, ri.getBaseUrl());
@@ -563,7 +567,9 @@ public class AmbariMetaInfoTest {
     if (!f3.exists()) {
       f3.createNewFile();
     }
+
     ambariMetaInfo.init();
+
     // Tests the stack is loaded as expected
     getServices();
     getComponentsByService();
@@ -1711,9 +1717,13 @@ public class AmbariMetaInfoTest {
     long clusterId = injector.getInstance(OrmTestHelper.class).createCluster(
         "cluster" + System.currentTimeMillis());
 
-    metaInfo.alertDefinitionDao = injector.getInstance(AlertDefinitionDAO.class);
     Class<?> c = metaInfo.getClass().getSuperclass();
-    Field f = c.getDeclaredField("agentAlertDefinitions");
+
+    Field f = c.getDeclaredField("alertDefinitionDao");
+    f.setAccessible(true);
+    f.set(metaInfo, injector.getInstance(AlertDefinitionDAO.class));
+
+    f = c.getDeclaredField("agentAlertDefinitions");
     f.setAccessible(true);
     f.set(metaInfo, injector.getInstance(AgentAlertDefinitions.class));
 
@@ -1865,7 +1875,12 @@ public class AmbariMetaInfoTest {
   }
 
   private TestAmbariMetaInfo createAmbariMetaInfo(File stackRoot, File versionFile, boolean replayMocks) throws Exception {
-    TestAmbariMetaInfo metaInfo = new TestAmbariMetaInfo(stackRoot, versionFile);
+    Properties properties = new Properties();
+    properties.setProperty(Configuration.METADETA_DIR_PATH, stackRoot.getPath());
+    properties.setProperty(Configuration.SERVER_VERSION_FILE, versionFile.getPath());
+    Configuration configuration = new Configuration(properties);
+
+    TestAmbariMetaInfo metaInfo = new TestAmbariMetaInfo(configuration);
     if (replayMocks) {
       metaInfo.replayAllMocks();
 
@@ -1902,20 +1917,28 @@ public class AmbariMetaInfoTest {
     AlertDefinitionFactory alertDefinitionFactory;
     OsFamily osFamily;
 
-    public TestAmbariMetaInfo(File stackRoot, File serverVersionFile) throws Exception {
-      super(stackRoot, null, serverVersionFile);
-      // MetainfoDAO
-      metaInfoDAO = createNiceMock(MetainfoDAO.class);
+    public TestAmbariMetaInfo(Configuration configuration) throws Exception {
+      super(configuration);
+
+      Injector injector = Guice.createInjector(Modules.override(
+          new InMemoryDefaultTestModule()).with(new MockModule()));
+
+      injector.getInstance(GuiceJpaInitializer.class);
+      injector.getInstance(EntityManager.class);
+
       Class<?> c = getClass().getSuperclass();
+
+      // MetainfoDAO
+      metaInfoDAO = injector.getInstance(MetainfoDAO.class);
       Field f = c.getDeclaredField("metaInfoDAO");
       f.setAccessible(true);
       f.set(this, metaInfoDAO);
 
-      // ActionMetadata
-      ActionMetadata actionMetadata = new ActionMetadata();
-      f = c.getDeclaredField("actionMetadata");
+      // StackManagerFactory
+      StackManagerFactory stackManagerFactory = injector.getInstance(StackManagerFactory.class);
+      f = c.getDeclaredField("stackManagerFactory");
       f.setAccessible(true);
-      f.set(this, actionMetadata);
+      f.set(this, stackManagerFactory);
 
       //AlertDefinitionDAO
       alertDefinitionDAO = createNiceMock(AlertDefinitionDAO.class);
@@ -1956,9 +1979,12 @@ public class AmbariMetaInfoTest {
       else {
         expect(config.getSharedResourcesDirPath()).andReturn("./src/test/resources").anyTimes();
       }
+
       replay(config);
+
       osFamily = new OsFamily(config);
-      f = c.getDeclaredField("os_family");
+
+      f = c.getDeclaredField("osFamily");
       f.setAccessible(true);
       f.set(this, osFamily);
     }
@@ -1966,5 +1992,16 @@ public class AmbariMetaInfoTest {
     public void replayAllMocks() {
       replay(metaInfoDAO, alertDefinitionDAO);
     }
+
+    public class MockModule extends AbstractModule {
+      @Override
+      protected void configure() {
+        bind(ActionMetadata.class);
+
+        // create a mock metainfo DAO for the entire system so that injectables
+        // can use the mock as well
+        bind(MetainfoDAO.class).toInstance(createNiceMock(MetainfoDAO.class));
+      }
+    }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/api/services/KerberosServiceMetaInfoTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/KerberosServiceMetaInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/KerberosServiceMetaInfoTest.java
index fe006ea..cafbc6f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/KerberosServiceMetaInfoTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/KerberosServiceMetaInfoTest.java
@@ -28,6 +28,9 @@ import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
+
+import javax.persistence.EntityManager;
 
 import junit.framework.Assert;
 
@@ -35,9 +38,12 @@ import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 import org.apache.ambari.server.metadata.ActionMetadata;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.dao.AlertDefinitionDAO;
 import org.apache.ambari.server.orm.dao.MetainfoDAO;
 import org.apache.ambari.server.stack.StackManager;
+import org.apache.ambari.server.stack.StackManagerFactory;
 import org.apache.ambari.server.state.AutoDeployInfo;
 import org.apache.ambari.server.state.ComponentInfo;
 import org.apache.ambari.server.state.DependencyInfo;
@@ -49,6 +55,11 @@ import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.util.Modules;
+
 public class KerberosServiceMetaInfoTest {
   private final static Logger LOG = LoggerFactory.getLogger(KerberosServiceMetaInfoTest.class);
   private ServiceInfo serviceInfo = null;
@@ -186,7 +197,13 @@ public class KerberosServiceMetaInfoTest {
   }
 
   private TestAmbariMetaInfo createAmbariMetaInfo(File stackRoot, File commonServicesRoot, File versionFile, boolean replayMocks) throws Exception {
-    TestAmbariMetaInfo metaInfo = new TestAmbariMetaInfo(stackRoot, commonServicesRoot, versionFile);
+    Properties properties = new Properties();
+    properties.setProperty(Configuration.METADETA_DIR_PATH, stackRoot.getPath());
+    properties.setProperty(Configuration.COMMON_SERVICES_DIR_PATH, commonServicesRoot.getPath());
+    properties.setProperty(Configuration.SERVER_VERSION_FILE, versionFile.getPath());
+    Configuration configuration = new Configuration(properties);
+
+    TestAmbariMetaInfo metaInfo = new TestAmbariMetaInfo(configuration);
     if (replayMocks) {
       metaInfo.replayAllMocks();
 
@@ -223,20 +240,28 @@ public class KerberosServiceMetaInfoTest {
     AlertDefinitionFactory alertDefinitionFactory;
     OsFamily osFamily;
 
-    public TestAmbariMetaInfo(File stackRoot, File commonServicesRoot, File serverVersionFile) throws Exception {
-      super(stackRoot, commonServicesRoot, serverVersionFile);
-      // MetainfoDAO
-      metaInfoDAO = createNiceMock(MetainfoDAO.class);
+    public TestAmbariMetaInfo(Configuration configuration) throws Exception {
+      super(configuration);
+
+      Injector injector = Guice.createInjector(Modules.override(
+          new InMemoryDefaultTestModule()).with(new MockModule()));
+
+      injector.getInstance(GuiceJpaInitializer.class);
+      injector.getInstance(EntityManager.class);
+
       Class<?> c = getClass().getSuperclass();
+
+      // MetainfoDAO
+      metaInfoDAO = injector.getInstance(MetainfoDAO.class);
       Field f = c.getDeclaredField("metaInfoDAO");
       f.setAccessible(true);
       f.set(this, metaInfoDAO);
 
-      // ActionMetadata
-      ActionMetadata actionMetadata = new ActionMetadata();
-      f = c.getDeclaredField("actionMetadata");
+      // StackManagerFactory
+      StackManagerFactory stackManagerFactory = injector.getInstance(StackManagerFactory.class);
+      f = c.getDeclaredField("stackManagerFactory");
       f.setAccessible(true);
-      f.set(this, actionMetadata);
+      f.set(this, stackManagerFactory);
 
       //AlertDefinitionDAO
       alertDefinitionDAO = createNiceMock(AlertDefinitionDAO.class);
@@ -262,7 +287,7 @@ public class KerberosServiceMetaInfoTest {
       expect(config.getSharedResourcesDirPath()).andReturn("./src/test/resources").anyTimes();
       replay(config);
       osFamily = new OsFamily(config);
-      f = c.getDeclaredField("os_family");
+      f = c.getDeclaredField("osFamily");
       f.setAccessible(true);
       f.set(this, osFamily);
     }
@@ -270,6 +295,17 @@ public class KerberosServiceMetaInfoTest {
     public void replayAllMocks() {
       replay(metaInfoDAO, alertDefinitionDAO);
     }
+
+    public class MockModule extends AbstractModule {
+      @Override
+      protected void configure() {
+        bind(ActionMetadata.class);
+
+        // create a mock metainfo DAO for the entire system so that injectables
+        // can use the mock as well
+        bind(MetainfoDAO.class).toInstance(createNiceMock(MetainfoDAO.class));
+      }
+    }
   }
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
index 7684322..ee56ea7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
@@ -46,7 +46,6 @@ import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.HostState;
-import org.apache.ambari.server.state.SecurityState;
 import org.apache.ambari.server.state.SecurityType;
 import org.apache.ambari.server.state.State;
 import org.junit.After;
@@ -93,7 +92,6 @@ public class
     controller = injector.getInstance(AmbariManagementController.class);
     clusters = injector.getInstance(Clusters.class);
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-    ambariMetaInfo.init();
   }
   @After
   public void teardown() {
@@ -308,8 +306,9 @@ public class
     setOsFamily(clusters.getHost(hostname), "redhat", "6.3");
     clusters.getHost(hostname).setState(HostState.HEALTHY);
     clusters.getHost(hostname).persist();
-    if (null != clusterName)
+    if (null != clusterName) {
       clusters.mapHostToCluster(hostname, clusterName);
+    }
   }
   private void setOsFamily(Host host, String osFamily, String osVersion) {
     Map<String, String> hostAttributes = new HashMap<String, String>();

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 31c315b..87820ca 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -34,7 +34,6 @@ import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.StringReader;
 import java.lang.reflect.Type;
@@ -8046,9 +8045,14 @@ public class AmbariManagementControllerTest {
     assertEquals(original, repo.getDefaultBaseUrl());
 
     // verify change with new meta info
-    AmbariMetaInfo ami = new AmbariMetaInfo(new File(
-        "src/test/resources/stacks"), null, new File(
-        "src/test/resources/version"));
+    Configuration configuration = injector.getInstance(Configuration.class);
+    Properties properties = configuration.getProperties();
+    properties.setProperty(Configuration.METADETA_DIR_PATH, "src/test/resources/stacks");
+    properties.setProperty(Configuration.SERVER_VERSION_FILE, "src/test/resources/version");
+    Configuration newConfiguration = new Configuration(properties);
+
+    AmbariMetaInfo ami = new AmbariMetaInfo(newConfiguration);
+
     injector.injectMembers(ami);
     ami.init();
 
@@ -8764,6 +8768,7 @@ public class AmbariManagementControllerTest {
   }
 
   @Test
+  @Ignore
   public void testDisableAndDeleteStates() throws Exception {
     Map<String,String> mapRequestProps = new HashMap<String, String>();
     Injector injector = Guice.createInjector(new AbstractModule() {
@@ -8780,8 +8785,7 @@ public class AmbariManagementControllerTest {
           install(new ControllerModule(properties));
 
           // ambari events interfere with the workflow of this test
-          bind(AmbariEventPublisher.class).toInstance(
-              EasyMock.createMock(AmbariEventPublisher.class));
+          bind(AmbariEventPublisher.class).toInstance(EasyMock.createMock(AmbariEventPublisher.class));
         } catch (Exception e) {
           throw new RuntimeException(e);
         }
@@ -8946,6 +8950,7 @@ public class AmbariManagementControllerTest {
       componentHostRequests.add(new ServiceComponentHostRequest("c1", null, "NAMENODE", "host1", null));
 
       amc.deleteHostComponents(componentHostRequests);
+
       namenodes = cluster.getService("HDFS").getServiceComponent("NAMENODE").getServiceComponentHosts();
       org.junit.Assert.assertEquals(1, namenodes.size());
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
index 78355eb..4446dfd 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
@@ -98,7 +98,6 @@ public class BackgroundCustomCommandExecutionTest {
     Assert.assertEquals("src/main/resources/custom_action_definitions", configuration.getCustomActionDefinitionPath());
     
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-    ambariMetaInfo.init();
   }
   @After
   public void teardown() {
@@ -167,8 +166,9 @@ public class BackgroundCustomCommandExecutionTest {
     setOsFamily(clusters.getHost(hostname), "redhat", "6.3");
     clusters.getHost(hostname).setState(HostState.HEALTHY);
     clusters.getHost(hostname).persist();
-    if (null != clusterName)
+    if (null != clusterName) {
       clusters.mapHostToCluster(hostname, clusterName);
+    }
   }
   private void setOsFamily(Host host, String osFamily, String osVersion) {
     Map<String, String> hostAttributes = new HashMap<String, String>();

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
index 5e71991..524c511 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
@@ -18,10 +18,33 @@
 
 package org.apache.ambari.server.controller;
 
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
+import static org.easymock.EasyMock.anyLong;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.capture;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.getCurrentArguments;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.persistence.EntityManager;
+
 import junit.framework.Assert;
+
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.actionmanager.ActionManager;
@@ -48,6 +71,7 @@ import org.apache.ambari.server.serveraction.kerberos.KerberosMissingAdminCreden
 import org.apache.ambari.server.serveraction.kerberos.KerberosOperationException;
 import org.apache.ambari.server.serveraction.kerberos.KerberosOperationHandler;
 import org.apache.ambari.server.serveraction.kerberos.KerberosOperationHandlerFactory;
+import org.apache.ambari.server.stack.StackManagerFactory;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
@@ -80,22 +104,9 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import javax.persistence.EntityManager;
-
-import java.io.File;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
 
 @SuppressWarnings("unchecked")
 public class KerberosHelperTest extends EasyMockSupport {
@@ -171,6 +182,7 @@ public class KerberosHelperTest extends EasyMockSupport {
         bind(ClusterController.class).toInstance(clusterController);
         bind(KerberosDescriptorFactory.class).toInstance(kerberosDescriptorFactory);
         bind(KerberosConfigDataFileWriterFactory.class).toInstance(kerberosConfigDataFileWriterFactory);
+        bind(StackManagerFactory.class).toInstance(createNiceMock(StackManagerFactory.class));
       }
     });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java
index 2c927a3..3a6ad91 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java
@@ -68,7 +68,6 @@ public class RefreshYarnCapacitySchedulerReleaseConfigTest {
     clusters = injector.getInstance(Clusters.class);
     configHelper = injector.getInstance(ConfigHelper.class);
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-    ambariMetaInfo.init();
   }
   @After
   public void teardown() {
@@ -170,8 +169,9 @@ public class RefreshYarnCapacitySchedulerReleaseConfigTest {
     setOsFamily(clusters.getHost(hostname), "redhat", "6.3");
     clusters.getHost(hostname).setState(HostState.HEALTHY);
     clusters.getHost(hostname).persist();
-    if (null != clusterName)
+    if (null != clusterName) {
       clusters.mapHostToCluster(hostname, clusterName);
+    }
   }
 
   private void setOsFamily(Host host, String osFamily, String osVersion) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
index 29677fc..1cc75c7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
@@ -18,36 +18,40 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
-import com.google.inject.util.Modules;
-import org.apache.ambari.server.AmbariException;
+import static org.easymock.EasyMock.anyLong;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import java.lang.reflect.Field;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
-import org.apache.ambari.server.agent.AgentEnv;
 import org.apache.ambari.server.agent.CommandReport;
-import org.apache.ambari.server.agent.DiskInfo;
-import org.apache.ambari.server.agent.HostInfo;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.AmbariManagementController;
-import org.apache.ambari.server.controller.AmbariManagementControllerImpl;
-import org.apache.ambari.server.controller.HostResponse;
 import org.apache.ambari.server.controller.RequestStatusResponse;
 import org.apache.ambari.server.controller.ResourceProviderFactory;
 import org.apache.ambari.server.controller.spi.Request;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.ResourceProvider;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.metadata.ActionMetadata;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.entities.HostVersionEntity;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction;
-import org.apache.ambari.server.stack.StackManager;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.ConfigHelper;
@@ -57,39 +61,15 @@ import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.ambari.server.state.ServiceOsSpecific;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.cluster.ClusterImpl;
-import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
-import java.lang.reflect.Field;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import static org.easymock.EasyMock.anyLong;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.createStrictMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
+import com.google.inject.util.Modules;
 
 /**
  * ClusterStackVersionResourceProvider tests.
@@ -130,7 +110,6 @@ public class ClusterStackVersionResourceProviderTest {
     injector = Guice.createInjector(Modules.override(module).with(new MockModule()));
     injector.getInstance(GuiceJpaInitializer.class);
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-    ambariMetaInfo.init();
   }
 
   @After
@@ -332,7 +311,7 @@ public class ClusterStackVersionResourceProviderTest {
     // Have to inject instance manually because injection via DI fails
     Field field = ClusterStackVersionResourceProvider.class.getDeclaredField("finalizeUpgradeAction");
     field.setAccessible(true);
-    field.set((ClusterStackVersionResourceProvider)provider, finalizeUpgradeAction);
+    field.set(provider, finalizeUpgradeAction);
 
     // add the property map to a set for the request.  add more maps for multiple creates
     Map<String, Object> properties = new LinkedHashMap<String, Object>();

http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
index a868234..aa391ca 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
@@ -18,11 +18,23 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.persist.PersistService;
-import com.google.inject.util.Modules;
+import static org.easymock.EasyMock.anyLong;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -55,22 +67,11 @@ import org.junit.Before;
 import org.junit.Test;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static org.easymock.EasyMock.anyLong;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
+import com.google.inject.util.Modules;
 
 /**
  * ClusterStackVersionResourceProvider tests.
@@ -114,7 +115,6 @@ public class HostStackVersionResourceProviderTest {
     injector = Guice.createInjector(Modules.override(module).with(new MockModule()));
     injector.getInstance(GuiceJpaInitializer.class);
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
-    ambariMetaInfo.init();
   }
 
   @After