diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f302b4..4c0acd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ Dropping a requirement of a major version of a dependency is a new contract. ### Fixed - Tag security groups atomically when created. +- Respect AWS request size limits in `TerminationBatchingEc2` and `TerminationPollingEc2`. ## [1.14.0] - 2024-01-04 [1.14.0]: https://github.com/atlassian-labs/aws-resources/compare/release-1.13.0...release-1.14.0 diff --git a/src/main/kotlin/com/atlassian/performance/tools/aws/api/TerminationBatchingEc2.kt b/src/main/kotlin/com/atlassian/performance/tools/aws/api/TerminationBatchingEc2.kt index 2353131..0506571 100644 --- a/src/main/kotlin/com/atlassian/performance/tools/aws/api/TerminationBatchingEc2.kt +++ b/src/main/kotlin/com/atlassian/performance/tools/aws/api/TerminationBatchingEc2.kt @@ -55,7 +55,7 @@ class TerminationBatchingEc2( logger.trace("No instances to terminate") return } - val instanceIds = terminations.keys + val instanceIds = terminations.keys.take(1000) logger.debug("Starting batch termination of $instanceIds") ec2.terminateInstances(TerminateInstancesRequest().withInstanceIds(instanceIds)) instanceIds.forEach { instanceId -> @@ -64,4 +64,4 @@ class TerminationBatchingEc2( .thenAccept { terminatedId -> terminations.remove(terminatedId)?.complete(terminatedId) } } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/com/atlassian/performance/tools/aws/api/TerminationPollingEc2.kt b/src/main/kotlin/com/atlassian/performance/tools/aws/api/TerminationPollingEc2.kt index 618572e..d1e7878 100644 --- a/src/main/kotlin/com/atlassian/performance/tools/aws/api/TerminationPollingEc2.kt +++ b/src/main/kotlin/com/atlassian/performance/tools/aws/api/TerminationPollingEc2.kt @@ -58,9 +58,9 @@ class TerminationPollingEc2( logger.debug("No instances to poll") return } - val instanceIds = polls.keys.toList() + val instanceIds = polls.keys.take(200) logger.debug("Polling $instanceIds") - val foundInstanceIds = mutableListOf() + val foundInstanceIds = mutableSetOf() scrollingEc2.scrollThroughInstances( Filter("instance-id", instanceIds) ) { instanceBatch -> @@ -83,4 +83,4 @@ class TerminationPollingEc2( .remove(instanceId) ?.complete(instanceId) } -} \ No newline at end of file +} diff --git a/src/main/kotlin/com/atlassian/performance/tools/aws/api/housekeeping/ConcurrentHousekeeping.kt b/src/main/kotlin/com/atlassian/performance/tools/aws/api/housekeeping/ConcurrentHousekeeping.kt index c61e156..646d31a 100644 --- a/src/main/kotlin/com/atlassian/performance/tools/aws/api/housekeeping/ConcurrentHousekeeping.kt +++ b/src/main/kotlin/com/atlassian/performance/tools/aws/api/housekeeping/ConcurrentHousekeeping.kt @@ -33,7 +33,7 @@ class ConcurrentHousekeeping( val securityGroups = aws.ec2.describeSecurityGroups().securityGroups.map { securityGroup -> Ec2SecurityGroup(securityGroup, aws.ec2) }.filter { it.isExpired() } - waitUntilReleased(securityGroups) + waitUntilReleased(securityGroups, Duration.ofMinutes(3)) Cloudformation(aws, aws.cloudformation).consumeExpiredStacks(Consumer { stacks -> waitUntilReleased(stacks, stackTimeout)