diff --git a/data/migrations/versions/87c29d0cd05_backfill_aggregate_size_columns.py b/data/migrations/versions/87c29d0cd05_backfill_aggregate_size_columns.py deleted file mode 100644 index 2b6e4bf2a..000000000 --- a/data/migrations/versions/87c29d0cd05_backfill_aggregate_size_columns.py +++ /dev/null @@ -1,22 +0,0 @@ -"""Backfill aggregate size columns - -Revision ID: 87c29d0cd05 -Revises: 2b2529fd23ff -Create Date: 2015-03-16 17:55:30.148557 - -""" - -# revision identifiers, used by Alembic. -revision = '87c29d0cd05' -down_revision = '2b2529fd23ff' - -from alembic import op -import sqlalchemy as sa -from util.backfill_aggregate_sizes import backfill_aggregate_sizes - - -def upgrade(tables): - backfill_aggregate_sizes() - -def downgrade(tables): - pass \ No newline at end of file diff --git a/data/model/legacy.py b/data/model/legacy.py index b84b262eb..bde1b4ad8 100644 --- a/data/model/legacy.py +++ b/data/model/legacy.py @@ -1454,8 +1454,13 @@ def set_image_size(docker_image_id, namespace_name, repository_name, image_size, ancestors = image.ancestors.split('/')[1:-1] if ancestors: try: - parent_image = Image.get(Image.id == ancestors[-1]) - total_size = image_size + parent_image.storage.aggregate_size + # TODO(jschorr): Switch to this faster route once we have full ancestor aggregate_size + # parent_image = Image.get(Image.id == ancestors[-1]) + # total_size = image_size + parent_image.storage.aggregate_size + total_size = (ImageStorage.select(fn.Sum(ImageStorage.image_size)) + .join(Image) + .where(Image.id << ancestors)) + image_size + image.storage.aggregate_size = total_size except Image.DoesNotExist: pass diff --git a/test/test_imagetree.py b/test/test_imagetree.py index d72eb6505..e257792c4 100644 --- a/test/test_imagetree.py +++ b/test/test_imagetree.py @@ -58,7 +58,7 @@ class TestImageTree(unittest.TestCase): result = tree.find_longest_path(base_image.id, checker) self.assertEquals(4, len(result)) - self.assertEquals('v2.0', tree.tag_containing_image(result[-1])) + self.assertEquals('prod', tree.tag_containing_image(result[-1])) def test_filtering(self): all_images = list(model.get_repository_images(NAMESPACE, COMPLEX_REPO)) @@ -88,7 +88,7 @@ class TestImageTree(unittest.TestCase): # Only use the first two images. They don't have tags, but the method should # still return the tag that contains them. - self.assertEquals('v2.0', tree.tag_containing_image(result[0])) + self.assertEquals('staging', tree.tag_containing_image(result[0])) if __name__ == '__main__':