You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2015/11/03 14:40:52 UTC

ambari git commit: AMBARI-13681. Changing 'Skip service check failure' and 'Skip slave component failure' options after RU is kicked off does not work (ncole)

Repository: ambari
Updated Branches:
  refs/heads/branch-2.1 64ac71514 -> c4bc11e0d


AMBARI-13681. Changing 'Skip service check failure' and 'Skip slave component failure' options after RU is kicked off does not work (ncole)


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

Branch: refs/heads/branch-2.1
Commit: c4bc11e0d7956f5234b54fcbd53c14e30550d620
Parents: 64ac715
Author: Nate Cole <nc...@hortonworks.com>
Authored: Tue Nov 3 08:40:41 2015 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Tue Nov 3 08:40:41 2015 -0500

----------------------------------------------------------------------
 .../internal/UpgradeResourceProvider.java       | 11 +--
 .../server/orm/dao/HostRoleCommandDAO.java      | 72 +++++--------------
 .../internal/UpgradeResourceProviderTest.java   | 75 ++++++++++++++++++++
 .../server/orm/dao/HostRoleCommandDAOTest.java  | 39 ----------
 4 files changed, 97 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c4bc11e0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index b33c480..8d53808 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -96,10 +96,8 @@ import org.apache.ambari.server.state.stack.upgrade.ConfigureTask;
 import org.apache.ambari.server.state.stack.upgrade.Direction;
 import org.apache.ambari.server.state.stack.upgrade.Grouping;
 import org.apache.ambari.server.state.stack.upgrade.ManualTask;
-import org.apache.ambari.server.state.stack.upgrade.RestartGrouping;
 import org.apache.ambari.server.state.stack.upgrade.ServerSideActionTask;
 import org.apache.ambari.server.state.stack.upgrade.StageWrapper;
-import org.apache.ambari.server.state.stack.upgrade.StopGrouping;
 import org.apache.ambari.server.state.stack.upgrade.Task;
 import org.apache.ambari.server.state.stack.upgrade.TaskWrapper;
 import org.apache.ambari.server.state.stack.upgrade.UpdateStackGrouping;
@@ -438,23 +436,20 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
       boolean skipFailures = upgradeEntity.isComponentFailureAutoSkipped();
       boolean skipServiceCheckFailures = upgradeEntity.isServiceCheckFailureAutoSkipped();
 
-      // update skipping failures on commands which are not SERVICE_CHECKs
       if (null != skipFailuresRequestProperty) {
         skipFailures = Boolean.parseBoolean(skipFailuresRequestProperty);
-        s_hostRoleCommandDAO.updateAutomaticSkipOnFailure(requestId, skipFailures);
       }
 
-      // if the service check failure skip is present, then update all role
-      // commands that are SERVICE_CHECKs
       if (null != skipServiceCheckFailuresRequestProperty) {
         skipServiceCheckFailures = Boolean.parseBoolean(skipServiceCheckFailuresRequestProperty);
-        s_hostRoleCommandDAO.updateAutomaticSkipServiceCheckFailure(requestId,
-            skipServiceCheckFailures);
       }
 
+      s_hostRoleCommandDAO.updateAutomaticSkipOnFailure(requestId, skipFailures, skipServiceCheckFailures);
+
       upgradeEntity.setAutoSkipComponentFailures(skipFailures);
       upgradeEntity.setAutoSkipServiceCheckFailures(skipServiceCheckFailures);
       upgradeEntity = s_upgradeDAO.merge(upgradeEntity);
+
     }
 
     return getRequestStatus(null);

http://git-wip-us.apache.org/repos/asf/ambari/blob/c4bc11e0/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
index 0a02610..bf1f5d5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
@@ -478,67 +478,33 @@ public class HostRoleCommandDAO {
 
   /**
    * Updates the {@link HostRoleCommandEntity#isFailureAutoSkipped()} flag for
-   * all commands which are not {@link RoleCommand#SERVICE_CHECK}.
+   * all commands for the given request
    * <p/>
-   * This will execute a JPQL {@code UPDATE} statement, bypassing the
-   * {@link EntityManager}. It does this because the amount of
-   * {@link HostRoleCommandEntity}s could number in the 10's of 1000's. As a
-   * result, this will call {@link EntityManager#clear()} after the update to
-   * ensure that the updated entity state is reflected in future queries.
+   * This will update each entity to ensure that the cache is maintained in a correct
+   * state.  A batch update doesn't always reflect in JPA-managed entities
    *
    * @param requestId
    *          the request ID of the commands to update
-   * @param automaticallySkipOnFailure
+   * @param skipOnFailure
    *          {@code true} to automatically skip failures, {@code false}
    *          otherwise.
-   * @see HostRoleCommandDAO#updateAutomaticSkipServiceCheckFailure(long,
-   *      boolean)
+   * @param skipOnServiceCheckFailure
+   *          {@code true} to skip service check failures
    */
   @Transactional
-  public void updateAutomaticSkipOnFailure(long requestId, boolean automaticallySkipOnFailure) {
-    EntityManager entityManager = entityManagerProvider.get();
-
-    TypedQuery<HostRoleCommandEntity> query = entityManager.createNamedQuery(
-        "HostRoleCommandEntity.updateAutoSkipExcludeRoleCommand", HostRoleCommandEntity.class);
-
-    query.setParameter("requestId", requestId);
-    query.setParameter("roleCommand", RoleCommand.SERVICE_CHECK);
-    query.setParameter("autoSkipOnFailure", automaticallySkipOnFailure ? 1 : 0);
-    query.executeUpdate();
-
-    entityManager.clear();
+  public void updateAutomaticSkipOnFailure(long requestId,
+      boolean skipOnFailure, boolean skipOnServiceCheckFailure) {
+
+    List<HostRoleCommandEntity> tasks = findByRequest(requestId);
+    for (HostRoleCommandEntity task : tasks) {
+      if (task.getRoleCommand() == RoleCommand.SERVICE_CHECK ) {
+        task.setAutoSkipOnFailure(skipOnServiceCheckFailure);
+        merge(task);
+      } else {
+        task.setAutoSkipOnFailure(skipOnFailure);
+        merge(task);
+      }
+    }
   }
 
-  /**
-   * Updates the {@link HostRoleCommandEntity#isFailureAutoSkipped()} flag for
-   * all commands which are of type {@link RoleCommand#SERVICE_CHECK}.
-   * <p/>
-   * This will execute a JPQL {@code UPDATE} statement, bypassing the
-   * {@link EntityManager}. It does this because the amount of
-   * {@link HostRoleCommandEntity}s could number in the 10's of 1000's. As a
-   * result, this will call {@link EntityManager#clear()} after the update to
-   * ensure that the updated entity state is reflected in future queries.
-   *
-   * @param requestId
-   *          the request ID of the service check commands to update
-   * @param automaticallySkipOnFailure
-   *          {@code true} to automatically skip service check failures,
-   *          {@code false} otherwise.
-   * @see HostRoleCommandDAO#updateAutomaticSkipOnFailure(long, boolean)
-   */
-  @Transactional
-  public void updateAutomaticSkipServiceCheckFailure(long requestId,
-      boolean automaticallySkipOnFailure) {
-    EntityManager entityManager = entityManagerProvider.get();
-
-    TypedQuery<HostRoleCommandEntity> query = entityManager.createNamedQuery(
-        "HostRoleCommandEntity.updateAutoSkipForRoleCommand", HostRoleCommandEntity.class);
-
-    query.setParameter("requestId", requestId);
-    query.setParameter("roleCommand", RoleCommand.SERVICE_CHECK);
-    query.setParameter("autoSkipOnFailure", automaticallySkipOnFailure ? 1 : 0);
-    query.executeUpdate();
-
-    entityManager.clear();
-  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/c4bc11e0/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 11b76a0..c230c44 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -35,6 +35,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.Role;
+import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
@@ -1129,6 +1130,80 @@ public class UpgradeResourceProviderTest {
     return status;
   }
 
+  @Test
+  public void testUpdateSkipFailures() throws Exception {
+    testCreateResourcesWithAutoSkipFailures();
+
+    List<UpgradeEntity> upgrades = upgradeDao.findUpgrades(1);
+    assertEquals(1, upgrades.size());
+
+    UpgradeEntity entity = upgrades.get(0);
+
+    HostRoleCommandDAO dao = injector.getInstance(HostRoleCommandDAO.class);
+
+    List<HostRoleCommandEntity> tasks = dao.findByRequest(entity.getRequestId());
+    for (HostRoleCommandEntity task : tasks) {
+      assertTrue(task.isFailureAutoSkipped());
+    }
+
+    Map<String, Object> requestProps = new HashMap<String, Object>();
+    requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
+    requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+    requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_FAILURES, Boolean.TRUE.toString());
+    requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_SC_FAILURES, Boolean.FALSE.toString());
+    requestProps.put(UpgradeResourceProvider.UPGRADE_REQUEST_ID, "" + entity.getRequestId());
+
+    ResourceProvider upgradeResourceProvider = createProvider(amc);
+    Request request = PropertyHelper.getUpdateRequest(requestProps, null);
+    upgradeResourceProvider.updateResources(request, null);
+
+    tasks = dao.findByRequest(entity.getRequestId());
+    for (HostRoleCommandEntity task : tasks) {
+      if (task.getRoleCommand() == RoleCommand.SERVICE_CHECK) {
+        assertFalse(task.isFailureAutoSkipped());
+      } else {
+        assertTrue(task.isFailureAutoSkipped());
+      }
+    }
+
+    requestProps = new HashMap<String, Object>();
+    requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
+    requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+    requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_FAILURES, Boolean.FALSE.toString());
+    requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_SC_FAILURES, Boolean.TRUE.toString());
+    requestProps.put(UpgradeResourceProvider.UPGRADE_REQUEST_ID, "" + entity.getRequestId());
+
+    request = PropertyHelper.getUpdateRequest(requestProps, null);
+    upgradeResourceProvider.updateResources(request, null);
+
+    tasks = dao.findByRequest(entity.getRequestId());
+    for (HostRoleCommandEntity task : tasks) {
+      if (task.getRoleCommand() == RoleCommand.SERVICE_CHECK) {
+        assertTrue(task.isFailureAutoSkipped());
+      } else {
+        assertFalse(task.isFailureAutoSkipped());
+      }
+    }
+
+    requestProps = new HashMap<String, Object>();
+    requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
+    requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+    requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_FAILURES, Boolean.FALSE.toString());
+    requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_SC_FAILURES, Boolean.FALSE.toString());
+    requestProps.put(UpgradeResourceProvider.UPGRADE_REQUEST_ID, "" + entity.getRequestId());
+
+    request = PropertyHelper.getUpdateRequest(requestProps, null);
+    upgradeResourceProvider.updateResources(request, null);
+
+    tasks = dao.findByRequest(entity.getRequestId());
+    for (HostRoleCommandEntity task : tasks) {
+      assertFalse(task.isFailureAutoSkipped());
+    }
+
+
+  }
+
+
   /**
    *
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/c4bc11e0/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAOTest.java
index d7e9149..167e49c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAOTest.java
@@ -108,45 +108,6 @@ public class HostRoleCommandDAOTest {
     Assert.assertEquals(0, tasks.size());
   }
 
-  /**
-   * Tests updating various commands to be skipped on failures automatically.
-   */
-  @Test
-  public void testUpdateAutoSkipOnFailures() {
-    OrmTestHelper helper = m_injector.getInstance(OrmTestHelper.class);
-    helper.createDefaultData();
-
-    Long requestId = Long.valueOf(100L);
-    ClusterEntity clusterEntity = m_clusterDAO.findByName("test_cluster1");
-
-    RequestEntity requestEntity = new RequestEntity();
-    requestEntity.setRequestId(requestId);
-    requestEntity.setClusterId(clusterEntity.getClusterId());
-    requestEntity.setStages(new ArrayList<StageEntity>());
-    m_requestDAO.create(requestEntity);
-
-    AtomicLong stageId = new AtomicLong(1);
-    HostEntity host = m_hostDAO.findByName("test_host1");
-    host.setHostRoleCommandEntities(new ArrayList<HostRoleCommandEntity>());
-
-    createStage(stageId.getAndIncrement(), 3, host, requestEntity, HostRoleStatus.PENDING, false);
-    createStage(stageId.getAndIncrement(), 2, host, requestEntity, HostRoleStatus.PENDING, false);
-    createStage(stageId.getAndIncrement(), 1, host, requestEntity, HostRoleStatus.PENDING, false);
-
-    List<HostRoleCommandEntity> tasks = m_hostRoleCommandDAO.findByRequest(requestId);
-    Assert.assertEquals(6, tasks.size());
-
-    for (HostRoleCommandEntity task : tasks) {
-      Assert.assertFalse(task.isFailureAutoSkipped());
-    }
-
-    m_hostRoleCommandDAO.updateAutomaticSkipOnFailure(requestId, true);
-    tasks = m_hostRoleCommandDAO.findByRequest(requestId);
-
-    for (HostRoleCommandEntity task : tasks) {
-      Assert.assertTrue(task.isFailureAutoSkipped());
-    }
-  }
 
   /**
    * Creates a single stage with the specified number of commands.