Later migration changed one of the tables, so make local copies
This commit is contained in:
parent
d381e166da
commit
6bc5c78241
1 changed files with 47 additions and 2 deletions
|
@ -2,8 +2,10 @@ import logging
|
||||||
|
|
||||||
from peewee import JOIN_LEFT_OUTER
|
from peewee import JOIN_LEFT_OUTER
|
||||||
|
|
||||||
from data.database import (Image, ImageStorage, ImageStoragePlacement, ImageStorageLocation, db,
|
from peewee import (CharField, BigIntegerField, BooleanField, ForeignKeyField, DateTimeField,
|
||||||
db_for_update)
|
TextField)
|
||||||
|
|
||||||
|
from data.database import BaseModel, db, db_for_update
|
||||||
from app import app, storage
|
from app import app, storage
|
||||||
from data import model
|
from data import model
|
||||||
|
|
||||||
|
@ -11,6 +13,48 @@ from data import model
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class Repository(BaseModel):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# Vendor the information from tables we will be writing to at the time of this migration
|
||||||
|
class ImageStorage(BaseModel):
|
||||||
|
uuid = CharField(index=True, unique=True)
|
||||||
|
checksum = CharField(null=True)
|
||||||
|
image_size = BigIntegerField(null=True)
|
||||||
|
uncompressed_size = BigIntegerField(null=True)
|
||||||
|
uploading = BooleanField(default=True, null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Image(BaseModel):
|
||||||
|
# This class is intentionally denormalized. Even though images are supposed
|
||||||
|
# to be globally unique we can't treat them as such for permissions and
|
||||||
|
# security reasons. So rather than Repository <-> Image being many to many
|
||||||
|
# each image now belongs to exactly one repository.
|
||||||
|
docker_image_id = CharField(index=True)
|
||||||
|
repository = ForeignKeyField(Repository)
|
||||||
|
|
||||||
|
# '/' separated list of ancestory ids, e.g. /1/2/6/7/10/
|
||||||
|
ancestors = CharField(index=True, default='/', max_length=64535, null=True)
|
||||||
|
|
||||||
|
storage = ForeignKeyField(ImageStorage, index=True, null=True)
|
||||||
|
|
||||||
|
created = DateTimeField(null=True)
|
||||||
|
comment = TextField(null=True)
|
||||||
|
command = TextField(null=True)
|
||||||
|
aggregate_size = BigIntegerField(null=True)
|
||||||
|
v1_json_metadata = TextField(null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class ImageStorageLocation(BaseModel):
|
||||||
|
name = CharField(unique=True, index=True)
|
||||||
|
|
||||||
|
|
||||||
|
class ImageStoragePlacement(BaseModel):
|
||||||
|
storage = ForeignKeyField(ImageStorage)
|
||||||
|
location = ForeignKeyField(ImageStorageLocation)
|
||||||
|
|
||||||
|
|
||||||
def image_json_path(storage_uuid):
|
def image_json_path(storage_uuid):
|
||||||
base_path = storage.image_path(storage_uuid)
|
base_path = storage.image_path(storage_uuid)
|
||||||
return '{0}json'.format(base_path)
|
return '{0}json'.format(base_path)
|
||||||
|
@ -19,6 +63,7 @@ def image_json_path(storage_uuid):
|
||||||
def backfill_v1_metadata():
|
def backfill_v1_metadata():
|
||||||
""" Copies metadata from image storages to their images. """
|
""" Copies metadata from image storages to their images. """
|
||||||
logger.debug('Image v1 metadata backfill: Began execution')
|
logger.debug('Image v1 metadata backfill: Began execution')
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
batch_image_ids = list(Image
|
batch_image_ids = list(Image
|
||||||
.select(Image.id)
|
.select(Image.id)
|
||||||
|
|
Reference in a new issue