From 614f48d61c8db10d7ee328ad92612fd15f0671d7 Mon Sep 17 00:00:00 2001 From: Gorka Eguileor Date: Thu, 27 Feb 2020 14:04:13 +0100 Subject: [PATCH] ChunkedBackupDriver: Freeing memory on restore When restoring many backups, the backup service uses a lot of memory and when we do many concurrent restores the backup service ends up getting killed becase the system runs out of memory. This patch reduces the ref count to the data as soon as possible to let Python garbage collect it instead of hogging it for the whole chunk restore. Related-Bug: #1865011 Change-Id: I942d9d8b3976232ae1cf82b698fb27285fbef13a (cherry picked from commit 69462315bc8416bd02ebd6085f0cfc141cfd8877) (cherry picked from commit 94db15dd3b86c7da92ceaa4b8c2d948b2b30c65b) (cherry picked from commit f4aa81424fff8718bd432cc5a7aae357fe028023) (cherry picked from commit 20b6b7477daae43907f38337aef15a5f47a92283) --- cinder/backup/chunkeddriver.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cinder/backup/chunkeddriver.py b/cinder/backup/chunkeddriver.py index d64bce10646..fea57022629 100644 --- a/cinder/backup/chunkeddriver.py +++ b/cinder/backup/chunkeddriver.py @@ -667,9 +667,12 @@ class ChunkedBackupDriver(driver.BackupDriver): LOG.debug('decompressing data using %s algorithm', compression_algorithm) decompressed = decompressor.decompress(body) + body = None # Allow Python to free it volume_file.write(decompressed) + decompressed = None # Allow Python to free it else: volume_file.write(body) + body = None # Allow Python to free it # force flush every write to avoid long blocking write on close volume_file.flush()