From fe0c082529c301e28fd7dd517f564eaaed944475 Mon Sep 17 00:00:00 2001 From: Alan Bishop Date: Mon, 17 Sep 2018 10:09:06 -0400 Subject: [PATCH] Fix image volume cache max size and max count limits Fix the code that enforces the image volume cache max size and max count limits so that each limit functions independently from the other. This fixes a bug where the code would function correctly when both were set to zero (unlimited) or when both limits were set (non-zero), but would misbehave when only one limit was set and the other unlimited. Closes-Bug: #1792944 Change-Id: I8b4843c2e9392139b42d6e2ebd2c5e1cd09d4c7a (cherry picked from commit 74249de6398dbec8592591667b83a5612bf4a969) (cherry picked from commit 4c2b41d5b531c1e3cd87172d30f280f89e2505a3) --- cinder/image/cache.py | 6 ++++-- cinder/tests/unit/image/test_cache.py | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cinder/image/cache.py b/cinder/image/cache.py index ba90c1579d7..9a72f95ff82 100644 --- a/cinder/image/cache.py +++ b/cinder/image/cache.py @@ -155,8 +155,10 @@ class ImageVolumeCache(object): 'count': current_count, 'max_count': self.max_cache_size_count}) - while ((current_size > self.max_cache_size_gb - or current_count > self.max_cache_size_count) + while (((current_size > self.max_cache_size_gb and + self.max_cache_size_gb > 0) + or (current_count > self.max_cache_size_count and + self.max_cache_size_count > 0)) and len(entries)): entry = entries.pop() LOG.debug('Reclaiming image-volume cache space; removing cache ' diff --git a/cinder/tests/unit/image/test_cache.py b/cinder/tests/unit/image/test_cache.py index 2e19a4b7b14..1b23a58ce58 100644 --- a/cinder/tests/unit/image/test_cache.py +++ b/cinder/tests/unit/image/test_cache.py @@ -236,7 +236,7 @@ class ImageVolumeCacheTestCase(test.TestCase): self.assertFalse(has_space) def test_ensure_space_need_gb(self): - cache = self._build_cache(max_gb=30, max_count=10) + cache = self._build_cache(max_gb=30, max_count=0) mock_delete = mock.patch.object(cache, '_delete_image_volume').start() entries = [] @@ -258,7 +258,7 @@ class ImageVolumeCacheTestCase(test.TestCase): self.context, cluster_name=self.volume_ovo.cluster_name) def test_ensure_space_need_count(self): - cache = self._build_cache(max_gb=30, max_count=2) + cache = self._build_cache(max_gb=0, max_count=2) mock_delete = mock.patch.object(cache, '_delete_image_volume').start() entries = []