You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by st...@apache.org on 2017/02/10 08:58:43 UTC
ambari git commit: AMBARI-19904. Upgrade: Package Install stuck in
Installing state forever. (stoader)
Repository: ambari
Updated Branches:
refs/heads/branch-2.5 f4e65c276 -> 711a92dfa
AMBARI-19904. Upgrade: Package Install stuck in Installing state forever. (stoader)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/711a92df
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/711a92df
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/711a92df
Branch: refs/heads/branch-2.5
Commit: 711a92dfa60e58d11def0b3fd8888b2d7c1d1e28
Parents: f4e65c2
Author: Toader, Sebastian <st...@hortonworks.com>
Authored: Fri Feb 10 09:57:35 2017 +0100
Committer: Toader, Sebastian <st...@hortonworks.com>
Committed: Fri Feb 10 09:58:29 2017 +0100
----------------------------------------------------------------------
.../server/actionmanager/ActionDBAccessor.java | 5 +-
.../actionmanager/ActionDBAccessorImpl.java | 6 +-
.../server/actionmanager/ActionScheduler.java | 15 ++---
.../actionmanager/TestActionScheduler.java | 66 +++++++++++++++-----
4 files changed, 67 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/711a92df/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
index 8aef70d..217fe0a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
@@ -24,6 +24,7 @@ import java.util.Map;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.agent.CommandReport;
import org.apache.ambari.server.agent.ExecutionCommand;
+import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
import org.apache.ambari.server.orm.entities.RequestEntity;
public interface ActionDBAccessor {
@@ -58,8 +59,10 @@ public interface ActionDBAccessor {
* Abort all outstanding operations associated with the given request. This
* method uses the {@link HostRoleStatus#SCHEDULED_STATES} to determine which
* {@link HostRoleCommand} instances to abort.
+ *
+ * Returns the list of the aborted operations.
*/
- public void abortOperation(long requestId);
+ public Collection<HostRoleCommandEntity> abortOperation(long requestId);
/**
* Mark the task as to have timed out
http://git-wip-us.apache.org/repos/asf/ambari/blob/711a92df/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
index 7837a7b..7881a4b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
@@ -202,7 +202,7 @@ public class ActionDBAccessorImpl implements ActionDBAccessor {
* {@inheritDoc}
*/
@Override
- public void abortOperation(long requestId) {
+ public Collection<HostRoleCommandEntity> abortOperation(long requestId) {
long now = System.currentTimeMillis();
endRequest(requestId);
@@ -226,8 +226,10 @@ public class ActionDBAccessorImpl implements ActionDBAccessor {
// no need to merge if there's nothing to merge
if (!commands.isEmpty()) {
- hostRoleCommandDAO.mergeAll(commands);
+ return hostRoleCommandDAO.mergeAll(commands);
}
+
+ return Collections.emptyList();
}
/* (non-Javadoc)
http://git-wip-us.apache.org/repos/asf/ambari/blob/711a92df/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
index dabcb98..edf182e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
@@ -907,15 +907,16 @@ class ActionScheduler implements Runnable {
ExecutionCommand c = wrapper.getExecutionCommand();
transitionToFailedState(stage.getClusterName(), c.getServiceName(),
c.getRole(), hostName, now, true);
- if (c.getRoleCommand().equals(RoleCommand.ACTIONEXECUTE)) {
- String clusterName = c.getClusterName();
- processActionDeath(clusterName,
- c.getHostname(),
- c.getRole());
- }
}
}
- db.abortOperation(stage.getRequestId());
+ Collection<HostRoleCommandEntity> abortedOperations = db.abortOperation(stage.getRequestId());
+
+ for (HostRoleCommandEntity command: abortedOperations) {
+ if (command.getRoleCommand().equals(RoleCommand.ACTIONEXECUTE)) {
+ String clusterName = stage.getClusterName();
+ processActionDeath(clusterName, command.getHostName(), command.getRole().name());
+ }
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/711a92df/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java
index 23f8721..5caff7d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java
@@ -109,6 +109,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.reflect.TypeToken;
import com.google.inject.AbstractModule;
@@ -516,10 +517,12 @@ public class TestActionScheduler {
}
}).when(db).timeoutHostRole(anyString(), anyLong(), anyLong(), anyString(), anyBoolean());
- doAnswer(new Answer<Void>() {
+ doAnswer(new Answer<Collection<HostRoleCommandEntity>>() {
@Override
- public Void answer(InvocationOnMock invocation) throws Throwable {
+ public Collection<HostRoleCommandEntity> answer(InvocationOnMock invocation) throws Throwable {
Long requestId = (Long) invocation.getArguments()[0];
+ List<HostRoleCommandEntity> abortedCommands = Lists.newArrayList();
+
for (Stage stage : stages) {
if (requestId.equals(stage.getRequestId())) {
for (HostRoleCommand command : stage.getOrderedHostRoleCommands()) {
@@ -527,12 +530,17 @@ public class TestActionScheduler {
command.getStatus() == HostRoleStatus.IN_PROGRESS ||
command.getStatus() == HostRoleStatus.PENDING) {
command.setStatus(HostRoleStatus.ABORTED);
+
+ HostRoleCommandEntity hostRoleCommandEntity = command.constructNewPersistenceEntity();
+ hostRoleCommandEntity.setStage(stage.constructNewPersistenceEntity());
+
+ abortedCommands.add(hostRoleCommandEntity);
}
}
}
}
- return null;
+ return abortedCommands;
}
}).when(db).abortOperation(anyLong());
@@ -1400,10 +1408,12 @@ public class TestActionScheduler {
return null;
}
});
- doAnswer(new Answer<Void>() {
+ doAnswer(new Answer<Collection<HostRoleCommandEntity>>() {
@Override
- public Void answer(InvocationOnMock invocation) throws Throwable {
+ public Collection<HostRoleCommandEntity> answer(InvocationOnMock invocation) throws Throwable {
Long requestId = (Long) invocation.getArguments()[0];
+ List<HostRoleCommandEntity> abortedCommands = Lists.newArrayList();
+
for (Stage stage : stages) {
if (requestId.equals(stage.getRequestId())) {
for (HostRoleCommand command : stage.getOrderedHostRoleCommands()) {
@@ -1411,12 +1421,17 @@ public class TestActionScheduler {
command.getStatus() == HostRoleStatus.IN_PROGRESS ||
command.getStatus() == HostRoleStatus.PENDING) {
command.setStatus(HostRoleStatus.ABORTED);
+
+ HostRoleCommandEntity hostRoleCommandEntity = command.constructNewPersistenceEntity();
+ hostRoleCommandEntity.setStage(stage.constructNewPersistenceEntity());
+
+ abortedCommands.add(hostRoleCommandEntity);
}
}
}
}
- return null;
+ return abortedCommands;
}
}).when(db).abortOperation(anyLong());
@@ -1580,10 +1595,12 @@ public class TestActionScheduler {
return null;
}
});
- doAnswer(new Answer<Void>() {
+ doAnswer(new Answer<Collection<HostRoleCommandEntity>>() {
@Override
- public Void answer(InvocationOnMock invocation) throws Throwable {
+ public Collection<HostRoleCommandEntity> answer(InvocationOnMock invocation) throws Throwable {
Long requestId = (Long) invocation.getArguments()[0];
+ List<HostRoleCommandEntity> abortedCommands = Lists.newArrayList();
+
for (Stage stage : stages) {
if (requestId.equals(stage.getRequestId())) {
for (HostRoleCommand command : stage.getOrderedHostRoleCommands()) {
@@ -1591,12 +1608,17 @@ public class TestActionScheduler {
command.getStatus() == HostRoleStatus.IN_PROGRESS ||
command.getStatus() == HostRoleStatus.PENDING) {
command.setStatus(HostRoleStatus.ABORTED);
+
+ HostRoleCommandEntity hostRoleCommandEntity = command.constructNewPersistenceEntity();
+ hostRoleCommandEntity.setStage(stage.constructNewPersistenceEntity());
+
+ abortedCommands.add(hostRoleCommandEntity);
}
}
}
}
- return null;
+ return abortedCommands;
}
}).when(db).abortOperation(anyLong());
@@ -1765,10 +1787,12 @@ public class TestActionScheduler {
return null;
}
});
- doAnswer(new Answer<Void>() {
+ doAnswer(new Answer<Collection<HostRoleCommandEntity>>() {
@Override
- public Void answer(InvocationOnMock invocation) throws Throwable {
+ public Collection<HostRoleCommandEntity> answer(InvocationOnMock invocation) throws Throwable {
Long requestId = (Long) invocation.getArguments()[0];
+ List<HostRoleCommandEntity> abortedCommands = Lists.newArrayList();
+
for (Stage stage : stages) {
if (requestId.equals(stage.getRequestId())) {
for (HostRoleCommand command : stage.getOrderedHostRoleCommands()) {
@@ -1776,12 +1800,17 @@ public class TestActionScheduler {
command.getStatus() == HostRoleStatus.IN_PROGRESS ||
command.getStatus() == HostRoleStatus.PENDING) {
command.setStatus(HostRoleStatus.ABORTED);
+
+ HostRoleCommandEntity hostRoleCommandEntity = command.constructNewPersistenceEntity();
+ hostRoleCommandEntity.setStage(stage.constructNewPersistenceEntity());
+
+ abortedCommands.add(hostRoleCommandEntity);
}
}
}
}
- return null;
+ return abortedCommands;
}
}).when(db).abortOperation(anyLong());
@@ -2326,10 +2355,12 @@ public class TestActionScheduler {
}
});
- doAnswer(new Answer<Void>() {
+ doAnswer(new Answer<Collection<HostRoleCommandEntity>>() {
@Override
- public Void answer(InvocationOnMock invocation) throws Throwable {
+ public Collection<HostRoleCommandEntity> answer(InvocationOnMock invocation) throws Throwable {
Long requestId = (Long) invocation.getArguments()[0];
+ List<HostRoleCommandEntity> abortedCommands = Lists.newArrayList();
+
for (Stage stage : stagesInProgress) {
if (requestId.equals(stage.getRequestId())) {
for (HostRoleCommand command : stage.getOrderedHostRoleCommands()) {
@@ -2337,12 +2368,17 @@ public class TestActionScheduler {
command.getStatus() == HostRoleStatus.IN_PROGRESS ||
command.getStatus() == HostRoleStatus.PENDING) {
command.setStatus(HostRoleStatus.ABORTED);
+
+ HostRoleCommandEntity hostRoleCommandEntity = command.constructNewPersistenceEntity();
+ hostRoleCommandEntity.setStage(stage.constructNewPersistenceEntity());
+
+ abortedCommands.add(hostRoleCommandEntity);
}
}
}
}
- return null;
+ return abortedCommands;
}
}).when(db).abortOperation(anyLong());