From 97542c9ead202e658406341a35ef4a15e0c93fe6 Mon Sep 17 00:00:00 2001 From: Michael Still Date: Mon, 5 Nov 2012 12:55:36 +1100 Subject: [PATCH] Don't verify image hashes if checksumming is disabled. There was a bug where we were checking base image checksums, even if checksumming was disabled, if there was already a cached checksum for the image. This resolves bug 1075017. DocImpact Change-Id: I38f5914cd9d6326fdf5e5d7f0f57885ff8b5ff32 (cherry picked from commit 1442177d5d1c388d75e7d7f0316e2c2891f5b779) --- nova/tests/test_imagecache.py | 24 ++++++++++++++++++++++++ nova/virt/libvirt/imagecache.py | 5 ++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/nova/tests/test_imagecache.py b/nova/tests/test_imagecache.py index e1df3ab1984..5f0d13f69a4 100644 --- a/nova/tests/test_imagecache.py +++ b/nova/tests/test_imagecache.py @@ -379,6 +379,29 @@ def test_verify_checksum(self): res = image_cache_manager._verify_checksum(img, fname) self.assertTrue(res) + def test_verify_checksum_disabled(self): + img = {'container_format': 'ami', 'id': '42'} + + self.flags(checksum_base_images=False) + + with self._intercept_log_messages() as stream: + with utils.tempdir() as tmpdir: + self.flags(instances_path=tmpdir) + self.flags(image_info_filename_pattern=('$instances_path/' + '%(image)s.info')) + fname, info_fname, testdata = self._make_checksum(tmpdir) + + # Checksum is valid + f = open(info_fname, 'w') + csum = hashlib.sha1() + csum.update(testdata) + f.write('{"sha1": "%s"}\n' % csum.hexdigest()) + f.close() + + image_cache_manager = imagecache.ImageCacheManager() + res = image_cache_manager._verify_checksum(img, fname) + self.assertTrue(res is None) + def test_verify_checksum_invalid_json(self): img = {'container_format': 'ami', 'id': '42'} @@ -653,6 +676,7 @@ def test_handle_base_image_used_missing(self): self.assertEquals(image_cache_manager.corrupt_base_files, []) def test_handle_base_image_checksum_fails(self): + self.flags(checksum_base_images=True) self.stubs.Set(virtutils, 'chown', lambda x, y: None) img = '123' diff --git a/nova/virt/libvirt/imagecache.py b/nova/virt/libvirt/imagecache.py index ba350749ac1..70642179104 100644 --- a/nova/virt/libvirt/imagecache.py +++ b/nova/virt/libvirt/imagecache.py @@ -226,6 +226,9 @@ def _verify_checksum(self, img_id, base_file, create_if_missing=True): handle manually when it occurs. """ + if not FLAGS.checksum_base_images: + return None + stored_checksum = read_stored_checksum(base_file) if stored_checksum: f = open(base_file, 'r') @@ -251,7 +254,7 @@ def _verify_checksum(self, img_id, base_file, create_if_missing=True): # NOTE(mikal): If the checksum file is missing, then we should # create one. We don't create checksums when we download images # from glance because that would delay VM startup. - if FLAGS.checksum_base_images and create_if_missing: + if create_if_missing: write_stored_checksum(base_file) return None