diff options
author | HÃ¥kon Hallingstad <hakon@oath.com> | 2019-01-11 13:56:15 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-11 13:56:15 +0100 |
commit | 91e630155515d7ba98cf3983ae694ea206ec3870 (patch) | |
tree | ede1471762a84b9ded9b05e3d72e18e3683c63d0 /node-repository | |
parent | a2b7f33f4fb9301e66c2f13d781017aa65685348 (diff) | |
parent | 20b209427958bcec5399d54bc6392f2913cfc1c9 (diff) |
Merge pull request #8106 from vespa-engine/hakonhall/avoid-periodic-removal
Avoid periodic removal
Diffstat (limited to 'node-repository')
2 files changed, 25 insertions, 6 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java index 9d87a835960..68d597fb839 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java @@ -108,9 +108,12 @@ public class InfrastructureProvisioner extends Maintainer { } private void removeApplication(ApplicationId applicationId) { - NestedTransaction nestedTransaction = new NestedTransaction(); - provisioner.remove(nestedTransaction, applicationId); - nestedTransaction.commit(); - duperModel.infraApplicationRemoved(applicationId); + // Use the DuperModel as source-of-truth on whether it has also been activated (to avoid periodic removals) + if (duperModel.infraApplicationIsActive(applicationId)) { + NestedTransaction nestedTransaction = new NestedTransaction(); + provisioner.remove(nestedTransaction, applicationId); + nestedTransaction.commit(); + duperModel.infraApplicationRemoved(applicationId); + } } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisionerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisionerTest.java index bc83e3525ad..4fd20d6991b 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisionerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisionerTest.java @@ -78,6 +78,7 @@ public class InfrastructureProvisionerTest { public void remove_application_if_without_target_version() { when(infrastructureVersions.getTargetVersionFor(eq(nodeType))).thenReturn(Optional.empty()); addNode(1, Node.State.active, Optional.of(target)); + when(duperModelInfraApi.infraApplicationIsActive(eq(application.getApplicationId()))).thenReturn(true); infrastructureProvisioner.maintain(); verify(duperModelInfraApi).infraApplicationRemoved(application.getApplicationId()); verifyRemoved(1); @@ -85,12 +86,26 @@ public class InfrastructureProvisionerTest { @Test public void remove_application_if_without_nodes() { + remove_application_without_nodes(true); + } + + @Test + public void skip_remove_unless_active() { + remove_application_without_nodes(false); + } + + private void remove_application_without_nodes(boolean applicationIsActive) { when(infrastructureVersions.getTargetVersionFor(eq(nodeType))).thenReturn(Optional.of(target)); addNode(1, Node.State.failed, Optional.of(target)); addNode(2, Node.State.parked, Optional.empty()); + when(duperModelInfraApi.infraApplicationIsActive(eq(application.getApplicationId()))).thenReturn(applicationIsActive); infrastructureProvisioner.maintain(); - verify(duperModelInfraApi).infraApplicationRemoved(application.getApplicationId()); - verifyRemoved(1); + if (applicationIsActive) { + verify(duperModelInfraApi).infraApplicationRemoved(application.getApplicationId()); + verifyRemoved(1); + } else { + verifyRemoved(0); + } } @Test @@ -199,6 +214,7 @@ public class InfrastructureProvisionerTest { @Test public void avoid_provisioning_if_no_usable_nodes() { when(infrastructureVersions.getTargetVersionFor(eq(nodeType))).thenReturn(Optional.of(target)); + when(duperModelInfraApi.infraApplicationIsActive(eq(application.getApplicationId()))).thenReturn(true); infrastructureProvisioner.maintain(); verifyRemoved(1); |