aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorvalerijf <valerijf@oath.com>2017-08-23 11:42:19 +0200
committervalerijf <valerijf@oath.com>2017-08-23 11:42:19 +0200
commitbc2090cb530371d24b53c2ce65537d062acd9365 (patch)
treea00b6fe2088abf0cc8da5541f8f7e2c9faab4780 /node-admin
parent0125415eb6c6cfc2f9def00cbb260275137d5718 (diff)
Handle coredumps when in dirty and when (re)starting container
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java13
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java6
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java25
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java3
5 files changed, 32 insertions, 19 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
index 3410963d48a..d16b09834c4 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
@@ -215,9 +215,11 @@ public class StorageMaintainer {
/**
* Checks if container has any new coredumps, reports and archives them if so
+ *
+ * @param force Set to true to bypass throttling
*/
- public void handleCoreDumpsForContainer(ContainerName containerName, ContainerNodeSpec nodeSpec, Environment environment) {
- if (! getMaintenanceThrottlerFor(containerName).shouldHandleCoredumpsNow()) return;
+ public void handleCoreDumpsForContainer(ContainerName containerName, ContainerNodeSpec nodeSpec, boolean force) {
+ if (! getMaintenanceThrottlerFor(containerName).shouldHandleCoredumpsNow() && !force) return;
MaintainerExecutor maintainerExecutor = new MaintainerExecutor();
addHandleCoredumpsCommand(maintainerExecutor, containerName, nodeSpec);
@@ -289,10 +291,13 @@ public class StorageMaintainer {
}
/**
- * Archives container data, runs when container enters state "dirty"
+ * Prepares the container-storage for the next container by deleting/archiving all the data of the current container.
+ * Removes old files, reports coredumps and archives container data, runs when container enters state "dirty"
*/
- public void archiveNodeData(ContainerName containerName) {
+ public void cleanupNodeStorage(ContainerName containerName, ContainerNodeSpec nodeSpec) {
MaintainerExecutor maintainerExecutor = new MaintainerExecutor();
+ addRemoveOldFilesCommand(maintainerExecutor, containerName);
+ addHandleCoredumpsCommand(maintainerExecutor, containerName, nodeSpec);
addArchiveNodeData(maintainerExecutor, containerName);
maintainerExecutor.execute();
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
index e1b99e5ce69..2e81ef19f5e 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
@@ -454,7 +454,7 @@ public class NodeAgentImpl implements NodeAgent {
case active:
storageMaintainer.ifPresent(maintainer -> {
maintainer.removeOldFilesFromNode(containerName);
- maintainer.handleCoreDumpsForContainer(containerName, nodeSpec, environment);
+ maintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false);
});
scheduleDownLoadIfNeeded(nodeSpec);
if (isDownloadingImage()) {
@@ -463,6 +463,7 @@ public class NodeAgentImpl implements NodeAgent {
}
container = removeContainerIfNeededUpdateContainerState(nodeSpec, container);
if (! container.isPresent()) {
+ storageMaintainer.ifPresent(maintainer -> maintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false));
startContainer(nodeSpec);
}
@@ -490,10 +491,9 @@ public class NodeAgentImpl implements NodeAgent {
nodeRepository.markAsDirty(hostname);
break;
case dirty:
- storageMaintainer.ifPresent(maintainer -> maintainer.removeOldFilesFromNode(containerName));
removeContainerIfNeededUpdateContainerState(nodeSpec, container);
logger.info("State is " + nodeSpec.nodeState + ", will delete application storage and mark node as ready");
- storageMaintainer.ifPresent(maintainer -> maintainer.archiveNodeData(containerName));
+ storageMaintainer.ifPresent(maintainer -> maintainer.cleanupNodeStorage(containerName, nodeSpec));
updateNodeRepoWithCurrentAttributes(nodeSpec);
nodeRepository.markNodeAvailableForNewAllocation(hostname);
break;
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java
index a7ce706063a..ffb4105888b 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/StorageMaintainerMock.java
@@ -30,7 +30,7 @@ public class StorageMaintainerMock extends StorageMaintainer {
}
@Override
- public void handleCoreDumpsForContainer(ContainerName containerName, ContainerNodeSpec nodeSpec, Environment environment) {
+ public void handleCoreDumpsForContainer(ContainerName containerName, ContainerNodeSpec nodeSpec, boolean force) {
}
@Override
@@ -42,7 +42,7 @@ public class StorageMaintainerMock extends StorageMaintainer {
}
@Override
- public void archiveNodeData(ContainerName containerName) {
+ public void cleanupNodeStorage(ContainerName containerName, ContainerNodeSpec nodeSpec) {
callOrderVerifier.add("DeleteContainerStorage with " + containerName);
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java
index 95c240b171a..69969336efc 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainerTest.java
@@ -77,7 +77,7 @@ public class StorageMaintainerTest {
verifyProcessExecuterCalled(1);
// Coredump handler has its own throttler
- storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, environment);
+ storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false);
verifyProcessExecuterCalled(2);
@@ -85,21 +85,30 @@ public class StorageMaintainerTest {
storageMaintainer.removeOldFilesFromNode(containerName);
verifyProcessExecuterCalled(3);
- storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, environment);
+ storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false);
verifyProcessExecuterCalled(4);
- storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, environment);
+ storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false);
verifyProcessExecuterCalled(4);
-
- // archiveNodeData is unthrottled and it should reset previous times
- storageMaintainer.archiveNodeData(containerName);
+ storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, true);
verifyProcessExecuterCalled(5);
- storageMaintainer.archiveNodeData(containerName);
+
+ storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, true);
+ verifyProcessExecuterCalled(6);
+
+ storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false);
verifyProcessExecuterCalled(6);
- storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, environment);
+
+ // cleanupNodeStorage is unthrottled and it should reset previous times
+ storageMaintainer.cleanupNodeStorage(containerName, nodeSpec);
verifyProcessExecuterCalled(7);
+ storageMaintainer.cleanupNodeStorage(containerName, nodeSpec);
+ verifyProcessExecuterCalled(8);
+
+ storageMaintainer.handleCoreDumpsForContainer(containerName, nodeSpec, false);
+ verifyProcessExecuterCalled(9);
}
@Test
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
index 50e58bdaa6e..3ddb28eed77 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java
@@ -367,9 +367,8 @@ public class NodeAgentImplTest {
nodeAgent.converge();
final InOrder inOrder = inOrder(storageMaintainer, dockerOperations, nodeRepository);
- inOrder.verify(storageMaintainer, times(1)).removeOldFilesFromNode(eq(containerName));
inOrder.verify(dockerOperations, times(1)).removeContainer(any());
- inOrder.verify(storageMaintainer, times(1)).archiveNodeData(eq(containerName));
+ inOrder.verify(storageMaintainer, times(1)).cleanupNodeStorage(eq(containerName), eq(nodeSpec));
inOrder.verify(nodeRepository, times(1)).markNodeAvailableForNewAllocation(eq(hostName));
verify(dockerOperations, never()).startContainer(eq(containerName), any());