Comment 2 for bug 1045792

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to glance (master)

Reviewed: https://review.openstack.org/12347
Committed: http://github.com/openstack/glance/commit/95e00c9247d5c56c1184d788ca8c1f9b165a25ba
Submitter: Jenkins
Branch: master

commit 95e00c9247d5c56c1184d788ca8c1f9b165a25ba
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
      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.

    Fixes bug 1045792

    Change-Id: I8aedec347e7f50566c44c5b6c6db424573c5ebaf