From 1cdc1b0647306004f487db4154d0afff51283776 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Sun, 22 Mar 2020 15:35:27 +0100 Subject: [PATCH] Replacing a killed container only if required --- lib/docker_client.rb | 11 +++++++++-- lib/docker_container_pool.rb | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/docker_client.rb b/lib/docker_client.rb index 9c931548..e1433fce 100644 --- a/lib/docker_client.rb +++ b/lib/docker_client.rb @@ -316,8 +316,15 @@ class DockerClient DockerContainerPool.remove_from_all_containers(container, @execution_environment, bypass_semaphore: true) # create new container and add it to @all_containers and @containers. # ToDo: How long does creating a new cotainer take? We're still locking the semaphore. - new_container = self.class.create_container(@execution_environment) - DockerContainerPool.add_to_all_containers(new_container, @execution_environment, bypass_semaphore: true) + + missing_counter_count = execution_environment.pool_size - @all_containers[execution_environment.id].length + if missing_counter_count > 0 + Rails.logger.error('kill_container: Creating a new container.') + new_container = self.class.create_container(@execution_environment) + DockerContainerPool.add_to_all_containers(new_container, @execution_environment, bypass_semaphore: true) + else + Rails.logger.error('Container killed and removed for ' + execution_environment.to_s + ' but not creating a new one. Currently, ' + missing_counter_count.abs + ' more containers than the configured pool size are available.') + end DockerContainerPool.release_semaphore end diff --git a/lib/docker_container_pool.rb b/lib/docker_container_pool.rb index 93ead810..2bcde088 100644 --- a/lib/docker_container_pool.rb +++ b/lib/docker_container_pool.rb @@ -134,7 +134,7 @@ class DockerContainerPool remove_from_all_containers(container, execution_environment, bypass_semaphore: true) missing_counter_count = execution_environment.pool_size - @all_containers[execution_environment.id].length if missing_counter_count > 0 - Rails.logger.error('Creating a new container and returning that.') + Rails.logger.error('replace_broken_container: Creating a new container and returning that.') new_container = create_container(execution_environment) DockerContainerPool.add_to_all_containers(new_container, execution_environment, bypass_semaphore: true) else