AMBARI-18470. RU/EU cannot start because ServiceCheckValidityCheck incorrectly calculates Service Checks that ran (alejandro)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/84ecbb40 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/84ecbb40 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/84ecbb40 Branch: refs/heads/branch-feature-AMBARI-18456 Commit: 84ecbb404280b541f15e2b23068ecd449bdd930c Parents: 05e65e2 Author: Alejandro Fernandez <[email protected]> Authored: Mon Sep 26 14:55:47 2016 -0700 Committer: Alejandro Fernandez <[email protected]> Committed: Wed Sep 28 10:55:19 2016 -0700 ---------------------------------------------------------------------- .../server/checks/ServiceCheckValidityCheck.java | 16 +++++++++------- .../checks/ServiceCheckValidityCheckTest.java | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/84ecbb40/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java index 2bc22c9..b77e1d5 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServiceCheckValidityCheck.java @@ -19,6 +19,7 @@ package org.apache.ambari.server.checks; import java.text.SimpleDateFormat; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashSet; @@ -31,9 +32,12 @@ import org.apache.ambari.server.RoleCommand; import org.apache.ambari.server.controller.PrereqCheckRequest; import org.apache.ambari.server.controller.internal.PageRequestImpl; import org.apache.ambari.server.controller.internal.RequestImpl; +import org.apache.ambari.server.controller.internal.SortRequestImpl; import org.apache.ambari.server.controller.internal.TaskResourceProvider; import org.apache.ambari.server.controller.spi.PageRequest; import org.apache.ambari.server.controller.spi.Predicate; +import org.apache.ambari.server.controller.spi.SortRequest; +import org.apache.ambari.server.controller.spi.SortRequestProperty; import org.apache.ambari.server.controller.utilities.PredicateBuilder; import org.apache.ambari.server.orm.dao.HostRoleCommandDAO; import org.apache.ambari.server.orm.dao.ServiceConfigDAO; @@ -65,8 +69,11 @@ public class ServiceCheckValidityCheck extends AbstractCheckDescriptor { private static final Logger LOG = LoggerFactory.getLogger(ServiceCheckValidityCheck.class); private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss"); + private static List<SortRequestProperty> sortRequestProperties = + Collections.singletonList(new SortRequestProperty(TaskResourceProvider.TASK_START_TIME_PROPERTY_ID, SortRequest.Order.DESC)); + private static SortRequest sortRequest = new SortRequestImpl(sortRequestProperties); private static final PageRequestImpl PAGE_REQUEST = new PageRequestImpl(PageRequest.StartingPoint.End, 1000, 0, null, null); - private static final RequestImpl REQUEST = new RequestImpl(null, null, null, null, null, PAGE_REQUEST); + private static final RequestImpl REQUEST = new RequestImpl(null, null, null, null, sortRequest, PAGE_REQUEST); private static final Predicate PREDICATE = new PredicateBuilder().property(TaskResourceProvider.TASK_COMMAND_PROPERTY_ID) .equals(RoleCommand.SERVICE_CHECK.name()).toPredicate(); @@ -117,14 +124,9 @@ public class ServiceCheckValidityCheck extends AbstractCheckDescriptor { for (HostRoleCommandEntity command : commands) { Role role = command.getRole(); + // Because results are already sorted by start_time desc, first occurrence is guaranteed to have max(start_time). if (!latestTimestamps.containsKey(role)) { latestTimestamps.put(role, command); - } else { - Long latest = latestTimestamps.get(role).getStartTime(); - - if (command.getStartTime() > latest) { - latestTimestamps.put(role, command); - } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/84ecbb40/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java index 8d72b96..dd843a8 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServiceCheckValidityCheckTest.java @@ -169,7 +169,7 @@ public class ServiceCheckValidityCheckTest { HostRoleCommandEntity hostRoleCommandEntity2 = new HostRoleCommandEntity(); hostRoleCommandEntity2.setRoleCommand(RoleCommand.SERVICE_CHECK); hostRoleCommandEntity2.setCommandDetail(COMMAND_DETAIL); - hostRoleCommandEntity2.setStartTime(SERVICE_CHECK_START_TIME + 3000L); + hostRoleCommandEntity2.setStartTime(CONFIG_CREATE_TIMESTAMP - 1L); hostRoleCommandEntity2.setRole(Role.HDFS_SERVICE_CHECK); when(serviceConfigDAO.getLastServiceConfig(eq(CLUSTER_ID), eq(SERVICE_NAME))).thenReturn(serviceConfigEntity); @@ -177,6 +177,6 @@ public class ServiceCheckValidityCheckTest { PrerequisiteCheck check = new PrerequisiteCheck(null, CLUSTER_NAME); serviceCheckValidityCheck.perform(check, new PrereqCheckRequest(CLUSTER_NAME)); - Assert.assertEquals(PrereqCheckStatus.PASS, check.getStatus()); + Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus()); } } \ No newline at end of file
