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/05/07 07:45:45 UTC

ambari git commit: AMBARI-10818. Hit re-install when performing an RU - UI seems to have stuck at installing even though the request has completed (dlysnichenko)

Repository: ambari
Updated Branches:
  refs/heads/trunk 807b3c2df -> ac1ba0e4f


AMBARI-10818. Hit re-install when performing an RU - UI seems to have stuck at installing even though the request has completed (dlysnichenko)


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

Branch: refs/heads/trunk
Commit: ac1ba0e4f2595e4dc109f3aa5a0ae06f47f4c012
Parents: 807b3c2
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Thu May 7 08:44:32 2015 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Thu May 7 08:44:32 2015 +0300

----------------------------------------------------------------------
 .../DistributeRepositoriesActionListener.java   | 163 ++++++++++---------
 .../server/agent/TestHeartbeatHandler.java      |   3 +
 2 files changed, 89 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ac1ba0e4/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
index 5600ef1..21e3a48 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java
@@ -19,6 +19,7 @@ package org.apache.ambari.server.events.listeners.upgrade;
 
 import java.util.List;
 
+import com.google.inject.persist.UnitOfWork;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.EagerSingleton;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
@@ -67,6 +68,9 @@ public class DistributeRepositoriesActionListener {
   @Inject
   private RepositoryVersionDAO repoVersionDAO;
 
+  @Inject
+  private UnitOfWork unitOfWork;
+
 
   /**
    * Constructor.
@@ -85,96 +89,101 @@ public class DistributeRepositoriesActionListener {
       return;
     }
 
-    if (LOG.isDebugEnabled()) {
-      LOG.debug(event.toString());
-    }
+    try {
+      unitOfWork.begin();
+      if (LOG.isDebugEnabled()) {
+        LOG.debug(event.toString());
+      }
 
-    RepositoryVersionState newHostState = RepositoryVersionState.INSTALL_FAILED;
-    Long clusterId = event.getClusterId();
-    if (clusterId == null) {
-      LOG.error("Distribute Repositories expected a cluster Id for host " + event.getHostname());
-      return;
-    }
+      RepositoryVersionState newHostState = RepositoryVersionState.INSTALL_FAILED;
+      Long clusterId = event.getClusterId();
+      if (clusterId == null) {
+        LOG.error("Distribute Repositories expected a cluster Id for host " + event.getHostname());
+        return;
+      }
+
+      String repositoryVersion = null;
+
+      if (event.getCommandReport() == null) {
+        LOG.error("Command report is null, marking action as INSTALL_FAILED");
+      } else {
+        // Parse structured output
+        try {
+          DistributeRepositoriesStructuredOutput structuredOutput = StageUtils.getGson().fromJson(
+                  event.getCommandReport().getStructuredOut(),
+                  DistributeRepositoriesStructuredOutput.class);
 
-    String repositoryVersion = null;
-
-    if (event.getCommandReport() == null) {
-      LOG.error("Command report is null, marking action as INSTALL_FAILED");
-    } else {
-      // Parse structured output
-      try {
-        DistributeRepositoriesStructuredOutput structuredOutput = StageUtils.getGson().fromJson(
-                event.getCommandReport().getStructuredOut(),
-                DistributeRepositoriesStructuredOutput.class);
-
-        repositoryVersion = structuredOutput.getInstalledRepositoryVersion();
-
-        if (event.getCommandReport().getStatus().equals(HostRoleStatus.COMPLETED.toString())) {
-          newHostState = RepositoryVersionState.INSTALLED;
-
-          if (null != structuredOutput.getActualVersion() &&
-              null != structuredOutput.getInstalledRepositoryVersion() &&
-              null != structuredOutput.getStackId() &&
-              !structuredOutput.getActualVersion().equals(structuredOutput.getInstalledRepositoryVersion())) {
-
-            // !!! getInstalledRepositoryVersion() from the agent is the one
-            // entered in the UI.  getActualVersion() is computed.
-
-            StackId stackId = new StackId(structuredOutput.getStackId());
-            RepositoryVersionEntity version = repoVersionDAO.findByStackAndVersion(
-                stackId, structuredOutput.getInstalledRepositoryVersion());
-
-            if (null != version) {
-              LOG.info("Repository version {} was found, but {} is the actual value",
-                  structuredOutput.getInstalledRepositoryVersion(),
-                  structuredOutput.getActualVersion());
-              // !!! the entered version is not correct
-              version.setVersion(structuredOutput.getActualVersion());
-              repoVersionDAO.merge(version);
-              repositoryVersion = structuredOutput.getActualVersion();
-            } else {
-              // !!! extra check that the actual version is correct
-              stackId = new StackId(structuredOutput.getStackId());
-              version = repoVersionDAO.findByStackAndVersion(stackId,
-                  structuredOutput.getActualVersion());
-
-              LOG.debug("Repository version {} was not found, check for {}.  Found={}",
-                  structuredOutput.getInstalledRepositoryVersion(),
-                  structuredOutput.getActualVersion(),
-                  Boolean.valueOf(null != version));
+          repositoryVersion = structuredOutput.getInstalledRepositoryVersion();
+
+          if (event.getCommandReport().getStatus().equals(HostRoleStatus.COMPLETED.toString())) {
+            newHostState = RepositoryVersionState.INSTALLED;
+
+            if (null != structuredOutput.getActualVersion() &&
+                    null != structuredOutput.getInstalledRepositoryVersion() &&
+                    null != structuredOutput.getStackId() &&
+                    !structuredOutput.getActualVersion().equals(structuredOutput.getInstalledRepositoryVersion())) {
+
+              // !!! getInstalledRepositoryVersion() from the agent is the one
+              // entered in the UI.  getActualVersion() is computed.
+
+              StackId stackId = new StackId(structuredOutput.getStackId());
+              RepositoryVersionEntity version = repoVersionDAO.findByStackAndVersion(
+                      stackId, structuredOutput.getInstalledRepositoryVersion());
 
               if (null != version) {
+                LOG.info("Repository version {} was found, but {} is the actual value",
+                        structuredOutput.getInstalledRepositoryVersion(),
+                        structuredOutput.getActualVersion());
+                // !!! the entered version is not correct
+                version.setVersion(structuredOutput.getActualVersion());
+                repoVersionDAO.merge(version);
                 repositoryVersion = structuredOutput.getActualVersion();
+              } else {
+                // !!! extra check that the actual version is correct
+                stackId = new StackId(structuredOutput.getStackId());
+                version = repoVersionDAO.findByStackAndVersion(stackId,
+                        structuredOutput.getActualVersion());
+
+                LOG.debug("Repository version {} was not found, check for {}.  Found={}",
+                        structuredOutput.getInstalledRepositoryVersion(),
+                        structuredOutput.getActualVersion(),
+                        Boolean.valueOf(null != version));
+
+                if (null != version) {
+                  repositoryVersion = structuredOutput.getActualVersion();
+                }
               }
             }
           }
+        } catch (JsonSyntaxException e) {
+          LOG.error("Can not parse structured output %s", e);
         }
-      } catch (JsonSyntaxException e) {
-        LOG.error("Can not parse structured output %s", e);
       }
-    }
 
-    List<HostVersionEntity> hostVersions = hostVersionDAO.get().findByHost(event.getHostname());
-    // We have to iterate over all host versions. Otherwise server-side command aborts (that do not
-    // provide exact host stack version info) would be ignored
-    for (HostVersionEntity hostVersion : hostVersions) {
-      if (repositoryVersion != null && ! hostVersion.getRepositoryVersion().getVersion().equals(repositoryVersion)) {
-        continue;
-      }
-      // If we know exact host stack version, there will be single execution of a code below
-      if (hostVersion.getState() == RepositoryVersionState.INSTALLING) {
-        hostVersion.setState(newHostState);
-        hostVersionDAO.get().merge(hostVersion);
-        // Update state of a cluster stack version
-        try {
-          Cluster cluster = clusters.get().getClusterById(clusterId);
-          cluster.recalculateClusterVersionState(
-              hostVersion.getRepositoryVersion().getStackId(),
-              hostVersion.getRepositoryVersion().getVersion());
-        } catch (AmbariException e) {
-          LOG.error("Cannot get cluster with Id " + clusterId.toString(), e);
+      List<HostVersionEntity> hostVersions = hostVersionDAO.get().findByHost(event.getHostname());
+      // We have to iterate over all host versions. Otherwise server-side command aborts (that do not
+      // provide exact host stack version info) would be ignored
+      for (HostVersionEntity hostVersion : hostVersions) {
+        if (repositoryVersion != null && !hostVersion.getRepositoryVersion().getVersion().equals(repositoryVersion)) {
+          continue;
+        }
+        // If we know exact host stack version, there will be single execution of a code below
+        if (hostVersion.getState() == RepositoryVersionState.INSTALLING) {
+          hostVersion.setState(newHostState);
+          hostVersionDAO.get().merge(hostVersion);
+          // Update state of a cluster stack version
+          try {
+            Cluster cluster = clusters.get().getClusterById(clusterId);
+            cluster.recalculateClusterVersionState(
+                    hostVersion.getRepositoryVersion().getStackId(),
+                    hostVersion.getRepositoryVersion().getVersion());
+          } catch (AmbariException e) {
+            LOG.error("Cannot get cluster with Id " + clusterId.toString(), e);
+          }
         }
       }
+    } finally {
+      unitOfWork.end();
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/ac1ba0e4/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 39192c4..5be6e44 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
@@ -2556,7 +2556,10 @@ public class TestHeartbeatHandler {
     RepositoryVersionEntity entity = dao.findByStackAndVersion(stackId, "0.1");
     Assert.assertNotNull(entity);
 
+    UnitOfWork unitOfWork = injector.getInstance(UnitOfWork.class);
+    unitOfWork.end();
     handler.handleHeartBeat(hb);
+    unitOfWork.begin();
 
     entity = dao.findByStackAndVersion(stackId, "0.1");
     Assert.assertNull(entity);