From ff879d85a16ef86d2c54c214c17de00f6c8c8ee9 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Sun, 22 Mar 2020 13:22:22 +0100 Subject: [PATCH] Restructure kill_container method to release semaphore more quickly --- lib/docker_client.rb | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/docker_client.rb b/lib/docker_client.rb index ea08ab8f..923b1d88 100644 --- a/lib/docker_client.rb +++ b/lib/docker_client.rb @@ -303,23 +303,22 @@ class DockerClient end def kill_container(container) + exit_thread_if_alive Rails.logger.info('killing container ' + container.to_s) # remove container from pool, then destroy it if (DockerContainerPool.config[:active]) DockerContainerPool.acquire_semaphore DockerContainerPool.remove_from_all_containers(container, @execution_environment, bypass_semaphore: true) - end - - self.class.destroy_container(container) - - # if we recylce containers, we start a fresh one - if(DockerContainerPool.config[:active] && RECYCLE_CONTAINERS) # create new container and add it to @all_containers and @containers. - container = self.class.create_container(@execution_environment) - DockerContainerPool.add_to_all_containers(container, @execution_environment, bypass_semaphore: true) + # 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) DockerContainerPool.release_semaphore end - exit_thread_if_alive + + Thread.new do + self.class.destroy_container(container) + end end def execute_run_command(submission, filename, &block)