You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2015/06/30 20:00:24 UTC
[1/2] ambari git commit: AMBARI-12222. Added Hive Service after
Installing Bits and Cluster Version did not transition to OUT_OF_SYNC
(dlysnichenko)
Repository: ambari
Updated Branches:
refs/heads/branch-2.1 e01774a09 -> 58fdd3715
refs/heads/trunk c74443d9f -> 41d7716db
AMBARI-12222. Added Hive Service after Installing Bits and Cluster Version did not transition to OUT_OF_SYNC (dlysnichenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/41d7716d
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/41d7716d
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/41d7716d
Branch: refs/heads/trunk
Commit: 41d7716dbf98259dcb714531f3015e9c0e2d64f3
Parents: c74443d
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Tue Jun 30 20:41:58 2015 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Tue Jun 30 20:59:47 2015 +0300
----------------------------------------------------------------------
.../upgrade/HostVersionOutOfSyncListener.java | 41 +++++++--------
.../HostVersionOutOfSyncListenerTest.java | 53 ++++++++++++++++----
2 files changed, 59 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/41d7716d/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
index b850774..9a72012 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
@@ -37,6 +37,7 @@ import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
@@ -98,8 +99,6 @@ public class HostVersionOutOfSyncListener {
List<HostVersionEntity> hostVersionEntities =
hostVersionDAO.get().findByClusterAndHost(cluster.getClusterName(), event.getHostName());
- StackId currentStackId = cluster.getCurrentStackVersion();
-
for (HostVersionEntity hostVersionEntity : hostVersionEntities) {
StackEntity hostStackEntity = hostVersionEntity.getRepositoryVersion().getStack();
StackId hostStackId = new StackId(hostStackEntity.getStackName(), hostStackEntity.getStackVersion());
@@ -115,11 +114,10 @@ public class HostVersionOutOfSyncListener {
continue;
}
- if (currentStackId.equals(hostStackId)
- && hostVersionEntity.getState().equals(RepositoryVersionState.INSTALLED)) {
+ if (hostVersionEntity.getState().equals(RepositoryVersionState.INSTALLED)) {
hostVersionEntity.setState(RepositoryVersionState.OUT_OF_SYNC);
hostVersionDAO.get().merge(hostVersionEntity);
- cluster.recalculateClusterVersionState(currentStackId,
+ cluster.recalculateClusterVersionState(hostStackId,
hostVersionEntity.getRepositoryVersion().getVersion());
}
}
@@ -137,8 +135,7 @@ public class HostVersionOutOfSyncListener {
try {
Cluster cluster = clusters.get().getClusterById(event.getClusterId());
- Set<String> changedRepositoryVersions = new HashSet<String>();
- StackId currentStackId = cluster.getCurrentStackVersion();
+ Set<RepositoryVersionEntity> changedRepositoryVersions = new HashSet<RepositoryVersionEntity>();
Map<String, ServiceComponent> serviceComponents = cluster.getService(event.getServiceName()).getServiceComponents();
// Determine hosts that become OUT_OF_SYNC when adding components for new service
Map<String, List<ServiceComponent>> affectedHosts =
@@ -155,9 +152,7 @@ public class HostVersionOutOfSyncListener {
List<HostVersionEntity> hostVersionEntities =
hostVersionDAO.get().findByClusterAndHost(cluster.getClusterName(), hostName);
for (HostVersionEntity hostVersionEntity : hostVersionEntities) {
- StackEntity hostStackEntity = hostVersionEntity.getRepositoryVersion().getStack();
- StackId hostStackId = new StackId(hostStackEntity.getStackName(), hostStackEntity.getStackVersion());
-
+ RepositoryVersionEntity repositoryVersion = hostVersionEntity.getRepositoryVersion();
// If added components do not advertise version, it makes no sense to mark version OUT_OF_SYNC
// We perform check per-stack version, because component may be not versionAdvertised in current
// stack, but become versionAdvertised in some future (installed, but not yet upgraded to) stack
@@ -165,8 +160,8 @@ public class HostVersionOutOfSyncListener {
String serviceName = event.getServiceName();
for (ServiceComponent comp : affectedHosts.get(hostName)) {
String componentName = comp.getName();
- ComponentInfo component = ami.get().getComponent(hostStackId.getStackName(),
- hostStackId.getStackVersion(), serviceName, componentName);
+ ComponentInfo component = ami.get().getComponent(repositoryVersion.getStackName(),
+ repositoryVersion.getStackVersion(), serviceName, componentName);
if (component.isVersionAdvertised()) {
hasChangedComponentsWithVersions = true;
}
@@ -175,16 +170,16 @@ public class HostVersionOutOfSyncListener {
continue;
}
- if (currentStackId.equals(hostStackId)
- && hostVersionEntity.getState().equals(RepositoryVersionState.INSTALLED)) {
+ if (hostVersionEntity.getState().equals(RepositoryVersionState.INSTALLED)) {
hostVersionEntity.setState(RepositoryVersionState.OUT_OF_SYNC);
hostVersionDAO.get().merge(hostVersionEntity);
- changedRepositoryVersions.add(hostVersionEntity.getRepositoryVersion().getVersion());
+ changedRepositoryVersions.add(repositoryVersion);
}
}
}
- for (String version : changedRepositoryVersions) {
- cluster.recalculateClusterVersionState(currentStackId, version);
+ for (RepositoryVersionEntity repositoryVersion : changedRepositoryVersions) {
+ StackId stackId = new StackId(repositoryVersion.getStackName(), repositoryVersion.getStackVersion());
+ cluster.recalculateClusterVersionState(stackId, repositoryVersion.getVersion());
}
} catch (AmbariException e) {
LOG.error("Can not update hosts about out of sync", e);
@@ -200,25 +195,23 @@ public class HostVersionOutOfSyncListener {
try {
Cluster cluster = clusters.get().getClusterById(event.getClusterId());
- StackId currentStackId = cluster.getCurrentStackVersion();
- Set<String> changedRepositoryVersions = new HashSet<String>();
Collection<ClusterVersionEntity> allClusterVersions = cluster.getAllClusterVersions();
for (ClusterVersionEntity clusterVersion : allClusterVersions) {
if (clusterVersion.getState() != RepositoryVersionState.CURRENT) { // Current version is taken care of automatically
String hostName = event.getHostName();
HostEntity hostEntity = hostDAO.get().findByName(hostName);
+ RepositoryVersionEntity repositoryVersion = clusterVersion.getRepositoryVersion();
HostVersionEntity missingHostVersion = new HostVersionEntity(hostEntity,
- clusterVersion.getRepositoryVersion(), RepositoryVersionState.OUT_OF_SYNC);
+ repositoryVersion, RepositoryVersionState.OUT_OF_SYNC);
hostVersionDAO.get().create(missingHostVersion);
- changedRepositoryVersions.add(clusterVersion.getRepositoryVersion().getVersion());
+ StackId stackId = new StackId(repositoryVersion.getStackName(), repositoryVersion.getStackVersion());
+ cluster.recalculateClusterVersionState(stackId, repositoryVersion.getVersion());
}
}
- for (String version : changedRepositoryVersions) {
- cluster.recalculateClusterVersionState(currentStackId, version);
- }
} catch (AmbariException e) {
LOG.error("Can not update hosts about out of sync", e);
}
}
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/41d7716d/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 90e0b53..8cda98e 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
@@ -70,6 +70,7 @@ import com.google.inject.persist.PersistService;
public class HostVersionOutOfSyncListenerTest {
private static final Logger LOG = LoggerFactory.getLogger(HostVersionOutOfSyncListenerTest.class);
private final String stackId = "HDP-2.2.0";
+ private final String yetAnotherStackId = "HDP-2.1.1";
private Injector injector;
@@ -177,6 +178,32 @@ public class HostVersionOutOfSyncListenerTest {
}
}
+ /***
+ * Adds yet another repo version to existing cluster
+ * Shared between several test cases.
+ * @param INSTALLED_VERSION Version to add as INSTALLED
+ * @param stackId Stack Id to use
+ * @throws AmbariException
+ */
+ private void addRepoVersion(String INSTALLED_VERSION, StackId stackId) throws AmbariException {
+ // Register and install new version
+ RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(stackId,
+ INSTALLED_VERSION);
+ HostVersionEntity hv2 = helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.INSTALLED);
+ c1.recalculateAllClusterVersionStates();
+ checkStackVersionState(stackId.getStackId(), INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
+
+ // Add new host and verify that it has all host versions present
+ List<HostVersionEntity> h2Versions = hostVersionDAO.findAll();
+
+ // Check before adding service
+ for (HostVersionEntity hostVersionEntity : h2Versions) {
+ if (hostVersionEntity.getRepositoryVersion().getVersion().equals(INSTALLED_VERSION)) {
+ assertEquals(hostVersionEntity.getState(), RepositoryVersionState.INSTALLED);
+ }
+ }
+ }
+
/**
* When a service is added to a cluster, all non-CURRENT host versions on
* all affected hosts (where host new components are installed)
@@ -185,9 +212,12 @@ public class HostVersionOutOfSyncListenerTest {
@Test
public void testOnServiceEvent() throws AmbariException {
String INSTALLED_VERSION = "1.0-1000";
+ String INSTALLED_VERSION_2 = "2.0-2000";
StackId stackId = new StackId(this.stackId);
+ StackId yaStackId = new StackId(this.yetAnotherStackId);
createClusterAndHosts(INSTALLED_VERSION, stackId);
+ addRepoVersion(INSTALLED_VERSION_2, yaStackId);
//Add HDFS service
@@ -209,20 +239,18 @@ public class HostVersionOutOfSyncListenerTest {
List<HostVersionEntity> hostVersions = hostVersionDAO.findAll();
- boolean atLeastOneOutOfSync = false;
checkStackVersionState(stackId.getStackId(), INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
+ checkStackVersionState(yaStackId.getStackId(), INSTALLED_VERSION_2, RepositoryVersionState.INSTALLED);
for (HostVersionEntity hostVersionEntity : hostVersions) {
- if (hostVersionEntity.getRepositoryVersion().getVersion().equals(INSTALLED_VERSION)) {
+ if (hostVersionEntity.getRepositoryVersion().getVersion().equals(INSTALLED_VERSION) ||
+ hostVersionEntity.getRepositoryVersion().getVersion().equals(INSTALLED_VERSION_2)) {
if (changedHosts.contains(hostVersionEntity.getHostName())) {
assertEquals(hostVersionEntity.getState(), RepositoryVersionState.OUT_OF_SYNC);
- atLeastOneOutOfSync = true;
} else {
assertEquals(hostVersionEntity.getState(), RepositoryVersionState.INSTALLED);
}
}
}
-
- assertTrue(atLeastOneOutOfSync);
}
@@ -269,14 +297,17 @@ public class HostVersionOutOfSyncListenerTest {
/**
* When a new service is added to a cluster with components, all INSTALLED host versions on
* all affected hosts (where host new components are installed)
- * should transition to OUT_OF_SYNC state
+ * should transition to OUT_OF_SYNC state.
*/
@Test
public void testOnServiceComponentEvent() throws AmbariException {
String INSTALLED_VERSION = "1.0-1000";
+ String INSTALLED_VERSION_2 = "2.0-2000";
StackId stackId = new StackId(this.stackId);
+ StackId yaStackId = new StackId(this.yetAnotherStackId);
createClusterAndHosts(INSTALLED_VERSION, stackId);
+ addRepoVersion(INSTALLED_VERSION_2, yaStackId);
//Add ZOOKEEPER_CLIENT component
List<String> hostList = new ArrayList<String>();
@@ -294,20 +325,16 @@ public class HostVersionOutOfSyncListenerTest {
checkStackVersionState(stackId.getStackId(), INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
List<HostVersionEntity> hostVersions = hostVersionDAO.findAll();
- boolean atLeastOneOutOfSync = false;
for (HostVersionEntity hostVersionEntity : hostVersions) {
RepositoryVersionEntity repoVersion = hostVersionEntity.getRepositoryVersion();
- if (repoVersion.getVersion().equals(INSTALLED_VERSION)) {
+ if (repoVersion.getVersion().equals(INSTALLED_VERSION) || repoVersion.getVersion().equals(INSTALLED_VERSION_2)) {
if (changedHosts.contains(hostVersionEntity.getHostName())) {
assertEquals(hostVersionEntity.getState(), RepositoryVersionState.OUT_OF_SYNC);
- atLeastOneOutOfSync = true;
} else {
assertEquals(hostVersionEntity.getState(), RepositoryVersionState.INSTALLED);
}
}
}
-
- assertTrue(atLeastOneOutOfSync);
}
@@ -323,7 +350,9 @@ public class HostVersionOutOfSyncListenerTest {
h1.setState(HostState.HEALTHY);
StackId stackId = new StackId(this.stackId);
+ StackId yaStackId = new StackId(this.yetAnotherStackId);
RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(stackId,"1.0-1000");
+ RepositoryVersionEntity repositoryVersionEntity2 = helper.getOrCreateRepositoryVersion(stackId,"2.0-2000");
c1.createClusterVersion(stackId, "1.0-1000", "admin", RepositoryVersionState.INSTALLING);
c1.setCurrentStackVersion(stackId);
c1.recalculateAllClusterVersionStates();
@@ -331,8 +360,10 @@ public class HostVersionOutOfSyncListenerTest {
checkStackVersionState(stackId.getStackId(), "1.0-2086", RepositoryVersionState.CURRENT);
HostVersionEntity hv1 = helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.INSTALLED);
+ HostVersionEntity hv2 = helper.createHostVersion("h1", repositoryVersionEntity2, RepositoryVersionState.INSTALLED);
c1.recalculateAllClusterVersionStates();
checkStackVersionState(stackId.getStackId(), "1.0-1000", RepositoryVersionState.INSTALLED);
+ checkStackVersionState(stackId.getStackId(), "2.0-2000", RepositoryVersionState.INSTALLED);
checkStackVersionState(stackId.getStackId(), "1.0-2086", RepositoryVersionState.CURRENT);
// Add new host and verify that it has all host versions present
[2/2] ambari git commit: AMBARI-12222. Added Hive Service after
Installing Bits and Cluster Version did not transition to OUT_OF_SYNC
(dlysnichenko)
Posted by dm...@apache.org.
AMBARI-12222. Added Hive Service after Installing Bits and Cluster Version did not transition to OUT_OF_SYNC (dlysnichenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/58fdd371
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/58fdd371
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/58fdd371
Branch: refs/heads/branch-2.1
Commit: 58fdd3715bf5bdaa2b4c9ce658a53c9bf6280bed
Parents: e01774a
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Tue Jun 30 20:41:58 2015 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Tue Jun 30 20:59:59 2015 +0300
----------------------------------------------------------------------
.../upgrade/HostVersionOutOfSyncListener.java | 41 +++++++--------
.../HostVersionOutOfSyncListenerTest.java | 53 ++++++++++++++++----
2 files changed, 59 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/58fdd371/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
index b850774..9a72012 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListener.java
@@ -37,6 +37,7 @@ import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
@@ -98,8 +99,6 @@ public class HostVersionOutOfSyncListener {
List<HostVersionEntity> hostVersionEntities =
hostVersionDAO.get().findByClusterAndHost(cluster.getClusterName(), event.getHostName());
- StackId currentStackId = cluster.getCurrentStackVersion();
-
for (HostVersionEntity hostVersionEntity : hostVersionEntities) {
StackEntity hostStackEntity = hostVersionEntity.getRepositoryVersion().getStack();
StackId hostStackId = new StackId(hostStackEntity.getStackName(), hostStackEntity.getStackVersion());
@@ -115,11 +114,10 @@ public class HostVersionOutOfSyncListener {
continue;
}
- if (currentStackId.equals(hostStackId)
- && hostVersionEntity.getState().equals(RepositoryVersionState.INSTALLED)) {
+ if (hostVersionEntity.getState().equals(RepositoryVersionState.INSTALLED)) {
hostVersionEntity.setState(RepositoryVersionState.OUT_OF_SYNC);
hostVersionDAO.get().merge(hostVersionEntity);
- cluster.recalculateClusterVersionState(currentStackId,
+ cluster.recalculateClusterVersionState(hostStackId,
hostVersionEntity.getRepositoryVersion().getVersion());
}
}
@@ -137,8 +135,7 @@ public class HostVersionOutOfSyncListener {
try {
Cluster cluster = clusters.get().getClusterById(event.getClusterId());
- Set<String> changedRepositoryVersions = new HashSet<String>();
- StackId currentStackId = cluster.getCurrentStackVersion();
+ Set<RepositoryVersionEntity> changedRepositoryVersions = new HashSet<RepositoryVersionEntity>();
Map<String, ServiceComponent> serviceComponents = cluster.getService(event.getServiceName()).getServiceComponents();
// Determine hosts that become OUT_OF_SYNC when adding components for new service
Map<String, List<ServiceComponent>> affectedHosts =
@@ -155,9 +152,7 @@ public class HostVersionOutOfSyncListener {
List<HostVersionEntity> hostVersionEntities =
hostVersionDAO.get().findByClusterAndHost(cluster.getClusterName(), hostName);
for (HostVersionEntity hostVersionEntity : hostVersionEntities) {
- StackEntity hostStackEntity = hostVersionEntity.getRepositoryVersion().getStack();
- StackId hostStackId = new StackId(hostStackEntity.getStackName(), hostStackEntity.getStackVersion());
-
+ RepositoryVersionEntity repositoryVersion = hostVersionEntity.getRepositoryVersion();
// If added components do not advertise version, it makes no sense to mark version OUT_OF_SYNC
// We perform check per-stack version, because component may be not versionAdvertised in current
// stack, but become versionAdvertised in some future (installed, but not yet upgraded to) stack
@@ -165,8 +160,8 @@ public class HostVersionOutOfSyncListener {
String serviceName = event.getServiceName();
for (ServiceComponent comp : affectedHosts.get(hostName)) {
String componentName = comp.getName();
- ComponentInfo component = ami.get().getComponent(hostStackId.getStackName(),
- hostStackId.getStackVersion(), serviceName, componentName);
+ ComponentInfo component = ami.get().getComponent(repositoryVersion.getStackName(),
+ repositoryVersion.getStackVersion(), serviceName, componentName);
if (component.isVersionAdvertised()) {
hasChangedComponentsWithVersions = true;
}
@@ -175,16 +170,16 @@ public class HostVersionOutOfSyncListener {
continue;
}
- if (currentStackId.equals(hostStackId)
- && hostVersionEntity.getState().equals(RepositoryVersionState.INSTALLED)) {
+ if (hostVersionEntity.getState().equals(RepositoryVersionState.INSTALLED)) {
hostVersionEntity.setState(RepositoryVersionState.OUT_OF_SYNC);
hostVersionDAO.get().merge(hostVersionEntity);
- changedRepositoryVersions.add(hostVersionEntity.getRepositoryVersion().getVersion());
+ changedRepositoryVersions.add(repositoryVersion);
}
}
}
- for (String version : changedRepositoryVersions) {
- cluster.recalculateClusterVersionState(currentStackId, version);
+ for (RepositoryVersionEntity repositoryVersion : changedRepositoryVersions) {
+ StackId stackId = new StackId(repositoryVersion.getStackName(), repositoryVersion.getStackVersion());
+ cluster.recalculateClusterVersionState(stackId, repositoryVersion.getVersion());
}
} catch (AmbariException e) {
LOG.error("Can not update hosts about out of sync", e);
@@ -200,25 +195,23 @@ public class HostVersionOutOfSyncListener {
try {
Cluster cluster = clusters.get().getClusterById(event.getClusterId());
- StackId currentStackId = cluster.getCurrentStackVersion();
- Set<String> changedRepositoryVersions = new HashSet<String>();
Collection<ClusterVersionEntity> allClusterVersions = cluster.getAllClusterVersions();
for (ClusterVersionEntity clusterVersion : allClusterVersions) {
if (clusterVersion.getState() != RepositoryVersionState.CURRENT) { // Current version is taken care of automatically
String hostName = event.getHostName();
HostEntity hostEntity = hostDAO.get().findByName(hostName);
+ RepositoryVersionEntity repositoryVersion = clusterVersion.getRepositoryVersion();
HostVersionEntity missingHostVersion = new HostVersionEntity(hostEntity,
- clusterVersion.getRepositoryVersion(), RepositoryVersionState.OUT_OF_SYNC);
+ repositoryVersion, RepositoryVersionState.OUT_OF_SYNC);
hostVersionDAO.get().create(missingHostVersion);
- changedRepositoryVersions.add(clusterVersion.getRepositoryVersion().getVersion());
+ StackId stackId = new StackId(repositoryVersion.getStackName(), repositoryVersion.getStackVersion());
+ cluster.recalculateClusterVersionState(stackId, repositoryVersion.getVersion());
}
}
- for (String version : changedRepositoryVersions) {
- cluster.recalculateClusterVersionState(currentStackId, version);
- }
} catch (AmbariException e) {
LOG.error("Can not update hosts about out of sync", e);
}
}
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/58fdd371/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 90e0b53..8cda98e 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
@@ -70,6 +70,7 @@ import com.google.inject.persist.PersistService;
public class HostVersionOutOfSyncListenerTest {
private static final Logger LOG = LoggerFactory.getLogger(HostVersionOutOfSyncListenerTest.class);
private final String stackId = "HDP-2.2.0";
+ private final String yetAnotherStackId = "HDP-2.1.1";
private Injector injector;
@@ -177,6 +178,32 @@ public class HostVersionOutOfSyncListenerTest {
}
}
+ /***
+ * Adds yet another repo version to existing cluster
+ * Shared between several test cases.
+ * @param INSTALLED_VERSION Version to add as INSTALLED
+ * @param stackId Stack Id to use
+ * @throws AmbariException
+ */
+ private void addRepoVersion(String INSTALLED_VERSION, StackId stackId) throws AmbariException {
+ // Register and install new version
+ RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(stackId,
+ INSTALLED_VERSION);
+ HostVersionEntity hv2 = helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.INSTALLED);
+ c1.recalculateAllClusterVersionStates();
+ checkStackVersionState(stackId.getStackId(), INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
+
+ // Add new host and verify that it has all host versions present
+ List<HostVersionEntity> h2Versions = hostVersionDAO.findAll();
+
+ // Check before adding service
+ for (HostVersionEntity hostVersionEntity : h2Versions) {
+ if (hostVersionEntity.getRepositoryVersion().getVersion().equals(INSTALLED_VERSION)) {
+ assertEquals(hostVersionEntity.getState(), RepositoryVersionState.INSTALLED);
+ }
+ }
+ }
+
/**
* When a service is added to a cluster, all non-CURRENT host versions on
* all affected hosts (where host new components are installed)
@@ -185,9 +212,12 @@ public class HostVersionOutOfSyncListenerTest {
@Test
public void testOnServiceEvent() throws AmbariException {
String INSTALLED_VERSION = "1.0-1000";
+ String INSTALLED_VERSION_2 = "2.0-2000";
StackId stackId = new StackId(this.stackId);
+ StackId yaStackId = new StackId(this.yetAnotherStackId);
createClusterAndHosts(INSTALLED_VERSION, stackId);
+ addRepoVersion(INSTALLED_VERSION_2, yaStackId);
//Add HDFS service
@@ -209,20 +239,18 @@ public class HostVersionOutOfSyncListenerTest {
List<HostVersionEntity> hostVersions = hostVersionDAO.findAll();
- boolean atLeastOneOutOfSync = false;
checkStackVersionState(stackId.getStackId(), INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
+ checkStackVersionState(yaStackId.getStackId(), INSTALLED_VERSION_2, RepositoryVersionState.INSTALLED);
for (HostVersionEntity hostVersionEntity : hostVersions) {
- if (hostVersionEntity.getRepositoryVersion().getVersion().equals(INSTALLED_VERSION)) {
+ if (hostVersionEntity.getRepositoryVersion().getVersion().equals(INSTALLED_VERSION) ||
+ hostVersionEntity.getRepositoryVersion().getVersion().equals(INSTALLED_VERSION_2)) {
if (changedHosts.contains(hostVersionEntity.getHostName())) {
assertEquals(hostVersionEntity.getState(), RepositoryVersionState.OUT_OF_SYNC);
- atLeastOneOutOfSync = true;
} else {
assertEquals(hostVersionEntity.getState(), RepositoryVersionState.INSTALLED);
}
}
}
-
- assertTrue(atLeastOneOutOfSync);
}
@@ -269,14 +297,17 @@ public class HostVersionOutOfSyncListenerTest {
/**
* When a new service is added to a cluster with components, all INSTALLED host versions on
* all affected hosts (where host new components are installed)
- * should transition to OUT_OF_SYNC state
+ * should transition to OUT_OF_SYNC state.
*/
@Test
public void testOnServiceComponentEvent() throws AmbariException {
String INSTALLED_VERSION = "1.0-1000";
+ String INSTALLED_VERSION_2 = "2.0-2000";
StackId stackId = new StackId(this.stackId);
+ StackId yaStackId = new StackId(this.yetAnotherStackId);
createClusterAndHosts(INSTALLED_VERSION, stackId);
+ addRepoVersion(INSTALLED_VERSION_2, yaStackId);
//Add ZOOKEEPER_CLIENT component
List<String> hostList = new ArrayList<String>();
@@ -294,20 +325,16 @@ public class HostVersionOutOfSyncListenerTest {
checkStackVersionState(stackId.getStackId(), INSTALLED_VERSION, RepositoryVersionState.INSTALLED);
List<HostVersionEntity> hostVersions = hostVersionDAO.findAll();
- boolean atLeastOneOutOfSync = false;
for (HostVersionEntity hostVersionEntity : hostVersions) {
RepositoryVersionEntity repoVersion = hostVersionEntity.getRepositoryVersion();
- if (repoVersion.getVersion().equals(INSTALLED_VERSION)) {
+ if (repoVersion.getVersion().equals(INSTALLED_VERSION) || repoVersion.getVersion().equals(INSTALLED_VERSION_2)) {
if (changedHosts.contains(hostVersionEntity.getHostName())) {
assertEquals(hostVersionEntity.getState(), RepositoryVersionState.OUT_OF_SYNC);
- atLeastOneOutOfSync = true;
} else {
assertEquals(hostVersionEntity.getState(), RepositoryVersionState.INSTALLED);
}
}
}
-
- assertTrue(atLeastOneOutOfSync);
}
@@ -323,7 +350,9 @@ public class HostVersionOutOfSyncListenerTest {
h1.setState(HostState.HEALTHY);
StackId stackId = new StackId(this.stackId);
+ StackId yaStackId = new StackId(this.yetAnotherStackId);
RepositoryVersionEntity repositoryVersionEntity = helper.getOrCreateRepositoryVersion(stackId,"1.0-1000");
+ RepositoryVersionEntity repositoryVersionEntity2 = helper.getOrCreateRepositoryVersion(stackId,"2.0-2000");
c1.createClusterVersion(stackId, "1.0-1000", "admin", RepositoryVersionState.INSTALLING);
c1.setCurrentStackVersion(stackId);
c1.recalculateAllClusterVersionStates();
@@ -331,8 +360,10 @@ public class HostVersionOutOfSyncListenerTest {
checkStackVersionState(stackId.getStackId(), "1.0-2086", RepositoryVersionState.CURRENT);
HostVersionEntity hv1 = helper.createHostVersion("h1", repositoryVersionEntity, RepositoryVersionState.INSTALLED);
+ HostVersionEntity hv2 = helper.createHostVersion("h1", repositoryVersionEntity2, RepositoryVersionState.INSTALLED);
c1.recalculateAllClusterVersionStates();
checkStackVersionState(stackId.getStackId(), "1.0-1000", RepositoryVersionState.INSTALLED);
+ checkStackVersionState(stackId.getStackId(), "2.0-2000", RepositoryVersionState.INSTALLED);
checkStackVersionState(stackId.getStackId(), "1.0-2086", RepositoryVersionState.CURRENT);
// Add new host and verify that it has all host versions present