caching_iter assumes any exception that occurs is the result of being
unable to cache. Hence the IOError raised from size_checked_iter, which
indicates a problem with the backend, means the caching_iter will
continuing trying to serve non-existent data. The exception was not
been re-raised in this case, making wsgi keep the connection open and
clients stuck forever waiting for more data.
Raising a GlanceException in size_checked_iter rather than an IOError
allows caching_iter to distinguish between a problem fetching data, and
a problem writing to the cache.
2) Checksum verification happens after cache commit rather than before:
This block was outside the context manager block which meant the
GlanceException was not caught by open_for_write and the rollback didn't
happen. This resulted in an error been logged, but the bad image still
placed in and subsequently served from the cache.
Also:
* Fix test_gate_caching_iter_bad_checksum - the loop to consume the
iterator in was in a subroutine that never got called.
* Move test_gate_caching_iter_(good|bad)_checksum into
ImageCacheTestCase to excercise both the sql and xattr drivers.
* Remove invalid registry_host/registry_port params from
TestImageCacheXattr/TestImageCacheSqlite setup which caused a failure
when testing the file on it's own using nosetests.
Reviewed: https:/ /review. openstack. org/12347 github. com/openstack/ glance/ commit/ 95e00c9247d5c56 c1184d788ca8c1f 9b165a25ba
Committed: http://
Submitter: Jenkins
Branch: master
commit 95e00c9247d5c56 c1184d788ca8c1f 9b165a25ba
Author: Paul Bourke <email address hidden>
Date: Mon Sep 3 11:17:54 2012 +0100
Fix cache not handling backend failures
1) caching_iter doesn't handle backend exceptions:
caching_iter assumes any exception that occurs is the result of being
unable to cache. Hence the IOError raised from size_checked_iter, which
indicates a problem with the backend, means the caching_iter will
continuing trying to serve non-existent data. The exception was not
been re-raised in this case, making wsgi keep the connection open and
clients stuck forever waiting for more data.
Raising a GlanceException in size_checked_iter rather than an IOError
allows caching_iter to distinguish between a problem fetching data, and
a problem writing to the cache.
2) Checksum verification happens after cache commit rather than before:
This block was outside the context manager block which meant the
GlanceException was not caught by open_for_write and the rollback didn't
happen. This resulted in an error been logged, but the bad image still
placed in and subsequently served from the cache.
Also:
* Fix test_gate_ caching_ iter_bad_ checksum - the loop to consume the
iterator in was in a subroutine that never got called.
* Move test_gate_ caching_ iter_(good| bad)_checksum into eTestCase to excercise both the sql and xattr drivers.
ImageCach
* Remove invalid registry_ host/registry_ port params from CacheXattr/ TestImageCacheS qlite setup which caused a failure
TestImage
when testing the file on it's own using nosetests.
Fixes bug 1045792
Change-Id: I8aedec347e7f50 566c44c5b6c6db4 24573c5ebaf