AMBARI-22325 Fix dependency injection for BlueprintV2Factory (benyoka)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/73050fca Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/73050fca Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/73050fca Branch: refs/heads/branch-feature-AMBARI-14714-blueprintv2 Commit: 73050fcac37cc8bac27c8e9b0597e1b1cb465607 Parents: f12e9c9 Author: Balazs Bence Sari <beny...@apache.org> Authored: Wed Dec 6 16:07:11 2017 +0100 Committer: Doroszlai, Attila <adorosz...@hortonworks.com> Committed: Fri Dec 8 20:24:25 2017 +0100 ---------------------------------------------------------------------- .../ambari/server/controller/AmbariServer.java | 10 +++---- .../server/controller/ControllerModule.java | 4 ++- .../server/controller/StackV2Factory.java | 29 +++++++++++-------- .../AbstractControllerResourceProvider.java | 1 + .../controller/internal/BaseClusterRequest.java | 10 +++---- .../internal/BlueprintV2ResourceProvider.java | 7 ++--- .../server/topology/BlueprintFactory.java | 5 ++-- .../server/topology/BlueprintV2Factory.java | 30 +++----------------- .../server/topology/BlueprintV2FactoryTest.java | 3 +- 9 files changed, 42 insertions(+), 57 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/73050fca/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 5b3d79e..89d66b9 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 @@ -62,7 +62,6 @@ import org.apache.ambari.server.configuration.ComponentSSLConfiguration; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.controller.internal.AbstractControllerResourceProvider; import org.apache.ambari.server.controller.internal.AmbariPrivilegeResourceProvider; -import org.apache.ambari.server.controller.internal.BaseClusterRequest; import org.apache.ambari.server.controller.internal.BlueprintResourceProvider; import org.apache.ambari.server.controller.internal.BlueprintV2ResourceProvider; import org.apache.ambari.server.controller.internal.ClusterPrivilegeResourceProvider; @@ -91,7 +90,6 @@ import org.apache.ambari.server.orm.dao.MetainfoDAO; import org.apache.ambari.server.orm.dao.PermissionDAO; import org.apache.ambari.server.orm.dao.PrincipalDAO; import org.apache.ambari.server.orm.dao.PrivilegeDAO; -import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; import org.apache.ambari.server.orm.dao.ResourceDAO; import org.apache.ambari.server.orm.dao.UserDAO; import org.apache.ambari.server.orm.dao.ViewInstanceDAO; @@ -928,15 +926,15 @@ public class AmbariServer { injector.getInstance(BlueprintDAO.class), injector.getInstance(SecurityConfigurationFactory.class), injector.getInstance(Gson.class), ambariMetaInfo); BlueprintV2ResourceProvider.init(injector.getInstance(BlueprintV2DAO.class), - injector.getInstance(SecurityConfigurationFactory.class), ambariMetaInfo); + injector.getInstance(SecurityConfigurationFactory.class), + ambariMetaInfo, + injector.getInstance(BlueprintV2Factory.class)); StackDependencyResourceProvider.init(ambariMetaInfo); ClusterResourceProvider.init(injector.getInstance(TopologyManager.class), injector.getInstance(TopologyRequestFactoryImpl.class), injector.getInstance(SecurityConfigurationFactory .class), injector.getInstance(Gson.class)); HostResourceProvider.setTopologyManager(injector.getInstance(TopologyManager.class)); BlueprintFactory.init(injector.getInstance(BlueprintDAO.class)); - BlueprintV2Factory.init(injector.getInstance(BlueprintV2DAO.class), injector.getInstance(RepositoryVersionDAO.class)); - BaseClusterRequest.init(injector.getInstance(AmbariManagementController.class)); AmbariContext.init(injector.getInstance(HostRoleCommandFactory.class)); PermissionResourceProvider.init(injector.getInstance(PermissionDAO.class)); @@ -1074,10 +1072,10 @@ public class AmbariServer { public static void main(String[] args) throws Exception { logStartup(); - Injector injector = Guice.createInjector(new ControllerModule(), new AuditLoggerModule(), new LdapModule()); AmbariServer server = null; try { + Injector injector = Guice.createInjector(new ControllerModule(), new AuditLoggerModule(), new LdapModule()); LOG.info("Getting the controller"); // check if this instance is the active instance http://git-wip-us.apache.org/repos/asf/ambari/blob/73050fca/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 f2ff181..6118e5c 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 @@ -166,6 +166,7 @@ import org.apache.ambari.server.state.scheduler.RequestExecutionImpl; import org.apache.ambari.server.state.stack.OsFamily; import org.apache.ambari.server.state.svccomphost.ServiceComponentHostImpl; import org.apache.ambari.server.topology.BlueprintFactory; +import org.apache.ambari.server.topology.BlueprintV2Factory; import org.apache.ambari.server.topology.PersistedState; import org.apache.ambari.server.topology.PersistedStateImpl; import org.apache.ambari.server.topology.SecurityConfigurationFactory; @@ -531,13 +532,14 @@ public class ControllerModule extends AbstractModule { bind(HostRoleCommandFactory.class).to(HostRoleCommandFactoryImpl.class); bind(SecurityHelper.class).toInstance(SecurityHelperImpl.getInstance()); bind(BlueprintFactory.class); + bind(BlueprintV2Factory.class); + bind(StackV2Factory.class); install(new FactoryModuleBuilder().implement(AmbariEvent.class, Names.named("userCreated"), UserCreatedEvent.class).build(AmbariEventFactory.class)); install(new FactoryModuleBuilder().implement(HookContext.class, PostUserCreationHookContext.class).build(HookContextFactory.class)); install(new FactoryModuleBuilder().implement(CollectionPersisterService.class, CsvFilePersisterService.class).build(CollectionPersisterServiceFactory.class)); install(new FactoryModuleBuilder().build(ConfigureClusterTaskFactory.class)); - } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/73050fca/ambari-server/src/main/java/org/apache/ambari/server/controller/StackV2Factory.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/StackV2Factory.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/StackV2Factory.java index 546c99a..0cd5ecd 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/StackV2Factory.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/StackV2Factory.java @@ -37,15 +37,15 @@ import org.apache.ambari.server.state.StackId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.inject.Inject; + public class StackV2Factory { private final static Logger LOG = LoggerFactory.getLogger(StackV2Factory.class); + private RepositoryVersionDAO repositoryVersionDAO; - private final AmbariManagementController controller; - private final RepositoryVersionDAO repositoryVersionDAO; - - public StackV2Factory(AmbariManagementController controller, RepositoryVersionDAO repositoryVersionDAO) { - this.controller = controller; + @Inject + public StackV2Factory(RepositoryVersionDAO repositoryVersionDAO) { this.repositoryVersionDAO = repositoryVersionDAO; } @@ -58,7 +58,7 @@ public class StackV2Factory { } public StackV2 create(String name, String version, String repositoryVersion) throws AmbariException { - Set<StackServiceResponse> stackServices = controller.getStackServices( + Set<StackServiceResponse> stackServices = getController().getStackServices( Collections.singleton(new StackServiceRequest(name, version, null))); StackData stackData = new StackData(name, version); @@ -97,7 +97,7 @@ public class StackV2Factory { private void getComponentInfos(StackData stackData) { stackData.componentService.forEach( (componentName, serviceName) -> { try { - ComponentInfo componentInfo = controller.getAmbariMetaInfo().getComponent(stackData.stackName, stackData.stackVersion, serviceName, componentName); + ComponentInfo componentInfo = getController().getAmbariMetaInfo().getComponent(stackData.stackName, stackData.stackVersion, serviceName, componentName); if (null != componentInfo) { stackData.componentInfos.put(componentName, componentInfo); } else { @@ -127,9 +127,9 @@ public class StackV2Factory { stackData.serviceConfigurations.put(service, mapServiceConfig); stackData.requiredServiceConfigurations.put(service, mapRequiredServiceConfig); - Set<ReadOnlyConfigurationResponse> serviceConfigs = controller.getStackConfigurations( + Set<ReadOnlyConfigurationResponse> serviceConfigs = getController().getStackConfigurations( Collections.singleton(new StackConfigurationRequest(stackData.stackName, stackData.stackVersion, service, null))); - Set<ReadOnlyConfigurationResponse> stackLevelConfigs = controller.getStackLevelConfigurations( + Set<ReadOnlyConfigurationResponse> stackLevelConfigs = getController().getStackLevelConfigurations( Collections.singleton(new StackLevelConfigurationRequest(stackData.stackName, stackData.stackVersion, null))); serviceConfigs.addAll(stackLevelConfigs); @@ -160,7 +160,7 @@ public class StackV2Factory { } private void parseStackConfigurations (StackData stackData) throws AmbariException { - Set<ReadOnlyConfigurationResponse> stackLevelConfigs = controller.getStackLevelConfigurations( + Set<ReadOnlyConfigurationResponse> stackLevelConfigs = getController().getStackLevelConfigurations( Collections.singleton(new StackLevelConfigurationRequest(stackData.stackName, stackData.stackVersion, null))); for (ReadOnlyConfigurationResponse config : stackLevelConfigs) { @@ -185,7 +185,7 @@ public class StackV2Factory { private void parseComponents(StackData stackData, String service) throws AmbariException{ Collection<String> componentSet = new HashSet<>(); - Set<StackServiceComponentResponse> components = controller.getStackComponents( + Set<StackServiceComponentResponse> components = getController().getStackComponents( Collections.singleton(new StackServiceComponentRequest(stackData.stackName, stackData.stackVersion, service, null))); // stack service components @@ -204,7 +204,7 @@ public class StackV2Factory { // populate component dependencies //todo: remove usage of AmbariMetaInfo - Collection<DependencyInfo> componentDependencies = controller.getAmbariMetaInfo().getComponentDependencies( + Collection<DependencyInfo> componentDependencies = getController().getAmbariMetaInfo().getComponentDependencies( stackData.stackName, stackData.stackVersion, service, componentName); if (componentDependencies != null && ! componentDependencies.isEmpty()) { @@ -260,4 +260,9 @@ public class StackV2Factory { final Map<String, Map<String, StackV2.ConfigProperty>> stackConfigurations = new HashMap<>(); final Map<String, ComponentInfo> componentInfos = new HashMap<>(); } + + private AmbariManagementController getController() { + return AmbariServer.getController(); + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/73050fca/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java index 5104354..843d36b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java @@ -36,6 +36,7 @@ import org.apache.ambari.server.state.Cluster; public abstract class AbstractControllerResourceProvider extends AbstractAuthorizedResourceProvider { private static ResourceProviderFactory resourceProviderFactory; + /** * The management controller to delegate to. */ http://git-wip-us.apache.org/repos/asf/ambari/blob/73050fca/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseClusterRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseClusterRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseClusterRequest.java index ade7295..b575a92 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseClusterRequest.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseClusterRequest.java @@ -26,10 +26,10 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; +import org.apache.ambari.server.StaticallyInject; import org.apache.ambari.server.api.predicate.InvalidQueryException; import org.apache.ambari.server.api.predicate.QueryLexer; import org.apache.ambari.server.api.predicate.Token; -import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.controller.spi.Resource; import org.apache.ambari.server.controller.spi.ResourceProvider; import org.apache.ambari.server.controller.utilities.ClusterControllerHelper; @@ -41,9 +41,12 @@ import org.apache.ambari.server.topology.SecurityConfiguration; import org.apache.ambari.server.topology.Service; import org.apache.ambari.server.topology.TopologyRequest; +import com.google.inject.Inject; + /** * Provides common cluster request functionality. */ +@StaticallyInject public abstract class BaseClusterRequest implements TopologyRequest { /** * Support for controlling whether Install and Start tasks are created on @@ -51,6 +54,7 @@ public abstract class BaseClusterRequest implements TopologyRequest { */ public static final String PROVISION_ACTION_PROPERTY = "provision_action"; + @Inject private static BlueprintV2Factory blueprintFactory; /** @@ -70,10 +74,6 @@ public abstract class BaseClusterRequest implements TopologyRequest { protected SecurityConfiguration securityConfiguration; protected Collection<Service> serviceConfigs; - public static void init(AmbariManagementController controller) { - setBlueprintFactory(BlueprintV2Factory.create(controller)); - } - @Override public Long getClusterId() { return clusterId; http://git-wip-us.apache.org/repos/asf/ambari/blob/73050fca/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintV2ResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintV2ResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintV2ResourceProvider.java index 41de5b5..93c58e7 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintV2ResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintV2ResourceProvider.java @@ -113,7 +113,7 @@ public class BlueprintV2ResourceProvider extends AbstractControllerResourceProvi /** * Used to create Blueprint instances */ - private BlueprintV2Factory blueprintFactory; + private static BlueprintV2Factory blueprintFactory; /** * Used to create SecurityConfiguration instances @@ -137,9 +137,7 @@ public class BlueprintV2ResourceProvider extends AbstractControllerResourceProvi BlueprintV2ResourceProvider(Set<String> propertyIds, Map<Resource.Type, String> keyPropertyIds, AmbariManagementController controller) { - super(propertyIds, keyPropertyIds, controller); - blueprintFactory = BlueprintV2Factory.create(controller); } /** @@ -150,10 +148,11 @@ public class BlueprintV2ResourceProvider extends AbstractControllerResourceProvi * @param metaInfo */ public static void init(BlueprintV2DAO dao, SecurityConfigurationFactory - securityFactory, AmbariMetaInfo metaInfo) { + securityFactory, AmbariMetaInfo metaInfo, BlueprintV2Factory blueprintFactory) { blueprintDAO = dao; securityConfigurationFactory = securityFactory; ambariMetaInfo = metaInfo; + BlueprintV2ResourceProvider.blueprintFactory = blueprintFactory; } // ----- ResourceProvider ------------------------------------------------ http://git-wip-us.apache.org/repos/asf/ambari/blob/73050fca/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintFactory.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintFactory.java index 8d94803..a54385c 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintFactory.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintFactory.java @@ -26,6 +26,8 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import javax.annotation.Nullable; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ObjectNotFoundException; import org.apache.ambari.server.controller.AmbariManagementController; @@ -81,9 +83,8 @@ public class BlueprintFactory { this.stackFactory = stackFactory; } - public Blueprint getBlueprint(String blueprintName) throws NoSuchStackException { + public @Nullable Blueprint getBlueprint(String blueprintName) throws NoSuchStackException { BlueprintEntity entity = blueprintDAO.findByName(blueprintName); - //todo: just return null? return entity == null ? null : new BlueprintImpl(entity); } http://git-wip-us.apache.org/repos/asf/ambari/blob/73050fca/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java index 99fbd87..eea2771 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java @@ -25,12 +25,10 @@ import java.util.Optional; import java.util.stream.Collectors; import org.apache.ambari.server.AmbariException; -import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.controller.StackV2; import org.apache.ambari.server.controller.StackV2Factory; import org.apache.ambari.server.controller.utilities.PropertyHelper; import org.apache.ambari.server.orm.dao.BlueprintV2DAO; -import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; import org.apache.ambari.server.orm.entities.BlueprintV2Entity; import org.apache.ambari.server.stack.NoSuchStackException; import org.apache.ambari.server.state.StackId; @@ -71,29 +69,19 @@ public class BlueprintV2Factory { // protected static final String SETTINGS_PROPERTY_ID = "settings"; - private static BlueprintV2DAO blueprintDAO; - private static RepositoryVersionDAO repositoryVersionDAO; + private BlueprintV2DAO blueprintDAO; private StackV2Factory stackFactory; private ObjectMapper objectMapper; - protected BlueprintV2Factory() { - createObjectMapper(); - } - - protected BlueprintV2Factory(StackV2Factory stackFactory) { + @Inject + public BlueprintV2Factory(StackV2Factory stackFactory, BlueprintV2DAO blueprintDAO) { this.stackFactory = stackFactory; + this.blueprintDAO = blueprintDAO; createObjectMapper(); } - public static BlueprintV2Factory create(AmbariManagementController controller) { - return new BlueprintV2Factory(new StackV2Factory(controller, repositoryVersionDAO)); - } - - public static BlueprintV2Factory create(StackV2Factory factory) { - return new BlueprintV2Factory(factory); - } public BlueprintV2 getBlueprint(String blueprintName) throws NoSuchStackException, NoSuchBlueprintException, IOException { BlueprintV2Entity entity = @@ -202,14 +190,4 @@ public class BlueprintV2Factory { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } - /** - * Static initialization. - * - * @param blueprintV2DAO blueprint data access object - */ - @Inject - public static void init(BlueprintV2DAO blueprintV2DAO, RepositoryVersionDAO repoVersionDAO) { - blueprintDAO = blueprintV2DAO; - repositoryVersionDAO = repoVersionDAO; - } } http://git-wip-us.apache.org/repos/asf/ambari/blob/73050fca/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintV2FactoryTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintV2FactoryTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintV2FactoryTest.java index ab9adea..341e1df 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintV2FactoryTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintV2FactoryTest.java @@ -28,6 +28,7 @@ import java.util.Map; import org.apache.ambari.server.controller.StackV2; import org.apache.ambari.server.controller.StackV2Factory; +import org.apache.ambari.server.orm.dao.BlueprintV2DAO; import org.apache.ambari.server.state.StackId; import org.junit.Before; import org.junit.BeforeClass; @@ -63,7 +64,7 @@ public class BlueprintV2FactoryTest { new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>()); }); - blueprintFactory = BlueprintV2Factory.create(stackFactory); + blueprintFactory = new BlueprintV2Factory(stackFactory, mock(BlueprintV2DAO.class)); blueprintFactory.setPrettyPrintJson(true); }