You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ds...@apache.org on 2015/04/14 11:32:51 UTC
ambari git commit: AMBARI-10405 Some service components are missing
from API response and causes problems (dsen)
Repository: ambari
Updated Branches:
refs/heads/trunk 31b1700e4 -> 0d5883ff6
AMBARI-10405 Some service components are missing from API response and causes problems (dsen)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/0d5883ff
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0d5883ff
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0d5883ff
Branch: refs/heads/trunk
Commit: 0d5883ff6fb7c2b6aa7e7a52cfc0a907669953bc
Parents: 31b1700
Author: Dmytro Sen <ds...@apache.org>
Authored: Tue Apr 14 12:32:33 2015 +0300
Committer: Dmytro Sen <ds...@apache.org>
Committed: Tue Apr 14 12:32:33 2015 +0300
----------------------------------------------------------------------
.../ambari/server/controller/AmbariServer.java | 28 +--
.../server/controller/ControllerModule.java | 4 +-
.../controller/utilities/DatabaseChecker.java | 182 +++++++++++++++++++
.../server/state/ServiceComponentImpl.java | 16 +-
.../server/controller/AmbariServerTest.java | 47 -----
.../utilities/DatabaseCheckerTest.java | 91 ++++++++++
6 files changed, 291 insertions(+), 77 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0d5883ff/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 7ea96be..a24eb60 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
@@ -57,6 +57,7 @@ import org.apache.ambari.server.controller.internal.StackDefinedPropertyProvider
import org.apache.ambari.server.controller.internal.StackDependencyResourceProvider;
import org.apache.ambari.server.controller.internal.UserPrivilegeResourceProvider;
import org.apache.ambari.server.controller.internal.ViewPermissionResourceProvider;
+import org.apache.ambari.server.controller.utilities.DatabaseChecker;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.PersistenceType;
import org.apache.ambari.server.orm.dao.BlueprintDAO;
@@ -87,7 +88,6 @@ import org.apache.ambari.server.security.unsecured.rest.ConnectionInfo;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.utils.StageUtils;
-import org.apache.ambari.server.utils.VersionUtils;
import org.apache.ambari.server.view.ViewRegistry;
import org.apache.velocity.app.Velocity;
import org.eclipse.jetty.server.Connector;
@@ -209,7 +209,8 @@ public class AmbariServer {
server.setSessionIdManager(sessionIdManager);
Server serverForAgent = new Server();
- checkDBVersion();
+ DatabaseChecker.checkDBVersion();
+ DatabaseChecker.checkDBConsistency();
try {
ClassPathXmlApplicationContext parentSpringAppContext =
@@ -569,29 +570,6 @@ public class AmbariServer {
}
}
- protected void checkDBVersion() throws AmbariException {
- LOG.info("Checking DB store version");
- MetainfoEntity schemaVersionEntity = metainfoDAO.findByKey(Configuration.SERVER_VERSION_KEY);
- String schemaVersion = null;
- String serverVersion = null;
-
- if (schemaVersionEntity != null) {
- schemaVersion = schemaVersionEntity.getMetainfoValue();
- serverVersion = ambariMetaInfo.getServerVersion();
- }
-
- if (schemaVersionEntity==null || VersionUtils.compareVersions(schemaVersion, serverVersion, 3) != 0) {
- String error = "Current database store version is not compatible with " +
- "current server version"
- + ", serverVersion=" + serverVersion
- + ", schemaVersion=" + schemaVersion;
- LOG.warn(error);
- throw new AmbariException(error);
- }
-
- LOG.info("DB store version is compatible");
- }
-
public void stop() throws Exception {
try {
server.stop();
http://git-wip-us.apache.org/repos/asf/ambari/blob/0d5883ff/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 58b94d8..0c5e04a 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
@@ -65,6 +65,7 @@ import org.apache.ambari.server.controller.internal.MemberResourceProvider;
import org.apache.ambari.server.controller.internal.RepositoryVersionResourceProvider;
import org.apache.ambari.server.controller.internal.ServiceResourceProvider;
import org.apache.ambari.server.controller.spi.ResourceProvider;
+import org.apache.ambari.server.controller.utilities.DatabaseChecker;
import org.apache.ambari.server.orm.DBAccessor;
import org.apache.ambari.server.orm.DBAccessorImpl;
import org.apache.ambari.server.orm.PersistenceType;
@@ -315,6 +316,7 @@ public class ControllerModule extends AbstractModule {
bind(ViewInstanceHandlerList.class).to(AmbariHandlerList.class);
requestStaticInjection(ExecutionCommandWrapper.class);
+ requestStaticInjection(DatabaseChecker.class);
bindByAnnotation(null);
}
@@ -489,4 +491,4 @@ public class ControllerModule extends AbstractModule {
return beanDefinitions;
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/0d5883ff/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/DatabaseChecker.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/DatabaseChecker.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/DatabaseChecker.java
new file mode 100644
index 0000000..3bc4fa0
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/DatabaseChecker.java
@@ -0,0 +1,182 @@
+/**
+ * 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.controller.utilities;
+
+import com.google.gson.Gson;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+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.orm.dao.ClusterDAO;
+import org.apache.ambari.server.orm.dao.MetainfoDAO;
+import org.apache.ambari.server.orm.entities.ClusterEntity;
+import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
+import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
+import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
+import org.apache.ambari.server.orm.entities.MetainfoEntity;
+import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
+import org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity;
+import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.utils.VersionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collection;
+import java.util.List;
+
+public class DatabaseChecker {
+
+ static Logger LOG = LoggerFactory.getLogger(DatabaseChecker.class);
+
+ @Inject
+ static Injector injector;
+ static AmbariMetaInfo ambariMetaInfo;
+ static MetainfoDAO metainfoDAO;
+
+ public static void checkDBConsistency() throws AmbariException {
+ LOG.info("Checking DB consistency");
+
+ boolean checkPassed = true;
+ if (ambariMetaInfo == null) {
+ ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
+ }
+
+ ClusterDAO clusterDAO = injector.getInstance(ClusterDAO.class);
+ List<ClusterEntity> clusters = clusterDAO.findAll();
+ for (ClusterEntity clusterEntity: clusters) {
+ String desiredStackVersion = clusterEntity.getDesiredStackVersion();
+ StackId stackId = new Gson().fromJson(desiredStackVersion, StackId.class);
+
+ Collection<ClusterServiceEntity> serviceEntities =
+ clusterEntity.getClusterServiceEntities();
+ for (ClusterServiceEntity clusterServiceEntity : serviceEntities) {
+
+ ServiceDesiredStateEntity serviceDesiredStateEntity =
+ clusterServiceEntity.getServiceDesiredStateEntity();
+ if (serviceDesiredStateEntity == null) {
+ checkPassed = false;
+ LOG.error(String.format("ServiceDesiredStateEntity is null for " +
+ "ServiceComponentDesiredStateEntity, clusterName=%s, serviceName=%s ",
+ clusterEntity.getClusterName(), clusterServiceEntity.getServiceName()));
+ }
+ Collection<ServiceComponentDesiredStateEntity> scDesiredStateEntities =
+ clusterServiceEntity.getServiceComponentDesiredStateEntities();
+ if (scDesiredStateEntities == null ||
+ scDesiredStateEntities.isEmpty()) {
+ checkPassed = false;
+ LOG.error(String.format("serviceComponentDesiredStateEntities is null or empty for " +
+ "ServiceComponentDesiredStateEntity, clusterName=%s, serviceName=%s ",
+ clusterEntity.getClusterName(), clusterServiceEntity.getServiceName()));
+ } else {
+ for (ServiceComponentDesiredStateEntity scDesiredStateEnity : scDesiredStateEntities) {
+
+ Collection<HostComponentDesiredStateEntity> schDesiredStateEntities =
+ scDesiredStateEnity.getHostComponentDesiredStateEntities();
+ Collection<HostComponentStateEntity> schStateEntities =
+ scDesiredStateEnity.getHostComponentStateEntities();
+
+ ComponentInfo componentInfo = ambariMetaInfo.getComponent(
+ stackId.getStackName(), stackId.getStackVersion(),
+ scDesiredStateEnity.getServiceName(), scDesiredStateEnity.getComponentName());
+
+ boolean zeroCardinality = componentInfo.getCardinality() == null
+ || componentInfo.getCardinality().startsWith("0")
+ || scDesiredStateEnity.getComponentName().equals("SECONDARY_NAMENODE"); // cardinality 0 for NameNode HA
+
+ boolean componentCheckFailed = false;
+
+ if (schDesiredStateEntities == null) {
+ componentCheckFailed = true;
+ LOG.error(String.format("hostComponentDesiredStateEntities is null for " +
+ "ServiceComponentDesiredStateEntity, clusterName=%s, serviceName=%s, componentName=%s ",
+ clusterEntity.getClusterName(), scDesiredStateEnity.getServiceName(), scDesiredStateEnity.getComponentName()));
+ } else if (!zeroCardinality && schDesiredStateEntities.isEmpty()) {
+ componentCheckFailed = true;
+ LOG.error(String.format("hostComponentDesiredStateEntities is empty for " +
+ "ServiceComponentDesiredStateEntity, clusterName=%s, serviceName=%s, componentName=%s ",
+ clusterEntity.getClusterName(), scDesiredStateEnity.getServiceName(), scDesiredStateEnity.getComponentName()));
+ }
+
+ if (schStateEntities == null) {
+ componentCheckFailed = true;
+ LOG.error(String.format("hostComponentStateEntities is null for " +
+ "ServiceComponentDesiredStateEntity, clusterName=%s, serviceName=%s, componentName=%s ",
+ clusterEntity.getClusterName(), scDesiredStateEnity.getServiceName(), scDesiredStateEnity.getComponentName()));
+ } else if (!zeroCardinality && schStateEntities.isEmpty()) {
+ componentCheckFailed = true;
+ LOG.error(String.format("hostComponentStateEntities is empty for " +
+ "ServiceComponentDesiredStateEntity, clusterName=%s, serviceName=%s, componentName=%s ",
+ clusterEntity.getClusterName(), scDesiredStateEnity.getServiceName(), scDesiredStateEnity.getComponentName()));
+ }
+
+ if (!componentCheckFailed &&
+ schDesiredStateEntities.size() != schStateEntities.size()) {
+ checkPassed = false;
+ LOG.error(String.format("HostComponentStateEntities and HostComponentDesiredStateEntities " +
+ "tables must contain equal number of rows mapped to ServiceComponentDesiredStateEntity, " +
+ "(clusterName=%s, serviceName=%s, componentName=%s) ", clusterEntity.getClusterName(),
+ scDesiredStateEnity.getServiceName(), scDesiredStateEnity.getComponentName()));
+ }
+ checkPassed = checkPassed && !componentCheckFailed;
+ }
+ }
+ }
+ }
+ if (checkPassed) {
+ LOG.info("DB consistency check passed.");
+ } else {
+ LOG.error("DB consistency check failed.");
+ }
+ }
+
+ public static void checkDBVersion() throws AmbariException {
+
+ LOG.info("Checking DB store version");
+ if (ambariMetaInfo == null) {
+ ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
+ }
+ if (metainfoDAO == null) {
+ metainfoDAO = injector.getInstance(MetainfoDAO.class);
+ }
+
+ MetainfoEntity schemaVersionEntity = metainfoDAO.findByKey(Configuration.SERVER_VERSION_KEY);
+ String schemaVersion = null;
+ String serverVersion = null;
+
+ if (schemaVersionEntity != null) {
+ schemaVersion = schemaVersionEntity.getMetainfoValue();
+ serverVersion = ambariMetaInfo.getServerVersion();
+ }
+
+ if (schemaVersionEntity==null || VersionUtils.compareVersions(schemaVersion, serverVersion, 3) != 0) {
+ String error = "Current database store version is not compatible with " +
+ "current server version"
+ + ", serverVersion=" + serverVersion
+ + ", schemaVersion=" + schemaVersion;
+ LOG.warn(error);
+ throw new AmbariException(error);
+ }
+
+ LOG.info("DB store version is compatible");
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/0d5883ff/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
index 23246b4..73ed25e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
@@ -24,6 +24,7 @@ import java.util.Map.Entry;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import com.google.inject.ProvisionException;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ObjectNotFoundException;
import org.apache.ambari.server.ServiceComponentHostNotFoundException;
@@ -123,10 +124,17 @@ public class ServiceComponentImpl implements ServiceComponent {
pk.setHostId(hostComponentStateEntity.getHostId());
HostComponentDesiredStateEntity hostComponentDesiredStateEntity = hostComponentDesiredStateDAO.findByPK(pk);
-
- hostComponents.put(hostComponentStateEntity.getHostName(),
+ try {
+ hostComponents.put(hostComponentStateEntity.getHostName(),
serviceComponentHostFactory.createExisting(this,
- hostComponentStateEntity, hostComponentDesiredStateEntity));
+ hostComponentStateEntity, hostComponentDesiredStateEntity));
+ } catch(ProvisionException ex) {
+ StackId stackId = service.getCluster().getCurrentStackVersion();
+ LOG.error(String.format("Can not get host component info: stackName=%s, stackVersion=%s, serviceName=%s, componentName=%s, hostname=%s",
+ stackId.getStackName(), stackId.getStackVersion(),
+ service.getName(),serviceComponentDesiredStateEntity.getComponentName(), hostComponentStateEntity.getHostName()));
+ ex.printStackTrace();
+ }
}
StackId stackId = service.getDesiredStackVersion();
@@ -665,4 +673,4 @@ public class ServiceComponentImpl implements ServiceComponent {
return hostComponents.size();
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/0d5883ff/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java
index 3a0d3fd..484f398 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java
@@ -18,22 +18,15 @@
package org.apache.ambari.server.controller;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
-import static org.junit.Assert.fail;
import java.net.Authenticator;
import java.net.InetAddress;
import java.net.PasswordAuthentication;
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.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.dao.MetainfoDAO;
-import org.apache.ambari.server.orm.entities.MetainfoEntity;
import org.apache.velocity.app.Velocity;
import org.easymock.EasyMock;
import org.eclipse.jetty.servlet.ServletContextHandler;
@@ -45,7 +38,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Guice;
-import com.google.inject.Inject;
import com.google.inject.Injector;
public class AmbariServerTest {
@@ -53,8 +45,6 @@ public class AmbariServerTest {
private static final Logger log = LoggerFactory.getLogger(AmbariServerTest.class);
private Injector injector;
- @Inject
- private AmbariMetaInfo ambariMetaInfo;
@Before
public void setup() throws Exception {
@@ -68,43 +58,6 @@ public class AmbariServerTest {
}
@Test
- public void testCheckDBVersion_Valid() throws Exception {
- MetainfoDAO metainfoDAO = createMock(MetainfoDAO.class);
- MetainfoEntity metainfoEntity = new MetainfoEntity();
- String serverVersion = ambariMetaInfo.getServerVersion();
- metainfoEntity.setMetainfoName(Configuration.SERVER_VERSION_KEY);
- metainfoEntity.setMetainfoValue(serverVersion);
- expect(metainfoDAO.findByKey(Configuration.SERVER_VERSION_KEY)).
- andReturn(metainfoEntity);
- replay(metainfoDAO);
- AmbariServer ambariServer = new AmbariServer();
- ambariServer.metainfoDAO = metainfoDAO;
- ambariServer.ambariMetaInfo = ambariMetaInfo;
- ambariServer.checkDBVersion();
- }
-
- @Test
- public void testCheckDBVersion_Invalid() throws Exception {
- MetainfoDAO metainfoDAO = createMock(MetainfoDAO.class);
- MetainfoEntity metainfoEntity = new MetainfoEntity();
- metainfoEntity.setMetainfoName(Configuration.SERVER_VERSION_KEY);
- metainfoEntity.setMetainfoValue("0.0.0"); // Incompatible version
- expect(metainfoDAO.findByKey(Configuration.SERVER_VERSION_KEY)).
- andReturn(metainfoEntity);
- replay(metainfoDAO);
- AmbariServer ambariServer = new AmbariServer();
- ambariServer.metainfoDAO = metainfoDAO;
- ambariServer.ambariMetaInfo = ambariMetaInfo;
-
- try {
- ambariServer.checkDBVersion();
- fail();
- } catch(AmbariException e) {
- // Expected
- }
- }
-
- @Test
public void testVelocityLogger() throws Exception {
new AmbariServer();
Assert.assertEquals(AmbariServer.VELOCITY_LOG_CATEGORY, Velocity.getProperty("runtime.log.logsystem.log4j.logger"));
http://git-wip-us.apache.org/repos/asf/ambari/blob/0d5883ff/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/DatabaseCheckerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/DatabaseCheckerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/DatabaseCheckerTest.java
new file mode 100644
index 0000000..03d3661
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/DatabaseCheckerTest.java
@@ -0,0 +1,91 @@
+/**
+ * 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.controller.utilities;
+
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+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.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.dao.MetainfoDAO;
+import org.apache.ambari.server.orm.entities.MetainfoEntity;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.fail;
+
+public class DatabaseCheckerTest {
+ private Injector injector;
+
+ @Inject
+ private AmbariMetaInfo ambariMetaInfo;
+
+ @Before
+ public void setup() throws Exception {
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+ injector.injectMembers(this);
+ }
+
+ @After
+ public void teardown() throws AmbariException {
+ }
+
+ @Test
+ public void testCheckDBVersion_Valid() throws Exception {
+ MetainfoDAO metainfoDAO = createMock(MetainfoDAO.class);
+ MetainfoEntity metainfoEntity = new MetainfoEntity();
+ String serverVersion = ambariMetaInfo.getServerVersion();
+ metainfoEntity.setMetainfoName(Configuration.SERVER_VERSION_KEY);
+ metainfoEntity.setMetainfoValue(serverVersion);
+ expect(metainfoDAO.findByKey(Configuration.SERVER_VERSION_KEY)).
+ andReturn(metainfoEntity);
+ replay(metainfoDAO);
+ DatabaseChecker.metainfoDAO = metainfoDAO;
+ DatabaseChecker.ambariMetaInfo = ambariMetaInfo;
+ DatabaseChecker.checkDBVersion();
+ }
+
+ @Test
+ public void testCheckDBVersion_Invalid() throws Exception {
+ MetainfoDAO metainfoDAO = createMock(MetainfoDAO.class);
+ MetainfoEntity metainfoEntity = new MetainfoEntity();
+ metainfoEntity.setMetainfoName(Configuration.SERVER_VERSION_KEY);
+ metainfoEntity.setMetainfoValue("0.0.0"); // Incompatible version
+ expect(metainfoDAO.findByKey(Configuration.SERVER_VERSION_KEY)).
+ andReturn(metainfoEntity);
+ replay(metainfoDAO);
+ DatabaseChecker.metainfoDAO = metainfoDAO;
+ DatabaseChecker.ambariMetaInfo = ambariMetaInfo;
+
+ try {
+ DatabaseChecker.checkDBVersion();
+ fail();
+ } catch(AmbariException e) {
+ // Expected
+ }
+ }
+}