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.