Merge remote-tracking branch 'upstream/master' into python-registry-v2
This commit is contained in:
commit
26cea9a07c
96 changed files with 2044 additions and 626 deletions
|
@ -1,4 +1,4 @@
|
|||
from data.database import db
|
||||
from data.database import db, db_transaction
|
||||
|
||||
|
||||
class DataModelException(Exception):
|
||||
|
@ -88,10 +88,6 @@ class Config(object):
|
|||
config = Config()
|
||||
|
||||
|
||||
def db_transaction():
|
||||
return config.app_config['DB_TRANSACTION_FACTORY'](db)
|
||||
|
||||
|
||||
# There MUST NOT be any circular dependencies between these subsections. If there are fix it by
|
||||
# moving the minimal number of things to _basequery
|
||||
# TODO document the methods and modules for each one of the submodules below.
|
||||
|
|
|
@ -4,7 +4,7 @@ from peewee import JOIN_LEFT_OUTER
|
|||
from datetime import timedelta, datetime
|
||||
|
||||
from data.database import (BuildTriggerService, RepositoryBuildTrigger, Repository, Namespace, User,
|
||||
RepositoryBuild, BUILD_PHASE, db_for_update)
|
||||
RepositoryBuild, BUILD_PHASE, db_for_update, db_random_func)
|
||||
from data.model import (InvalidBuildTriggerException, InvalidRepositoryBuildException,
|
||||
db_transaction, user as user_model)
|
||||
|
||||
|
@ -163,11 +163,24 @@ def cancel_repository_build(build, work_queue):
|
|||
return True
|
||||
|
||||
|
||||
def archivable_buildlogs_query():
|
||||
def get_archivable_build():
|
||||
presumed_dead_date = datetime.utcnow() - PRESUMED_DEAD_BUILD_AGE
|
||||
return (RepositoryBuild
|
||||
.select()
|
||||
candidates = (RepositoryBuild
|
||||
.select(RepositoryBuild.id)
|
||||
.where((RepositoryBuild.phase == BUILD_PHASE.COMPLETE) |
|
||||
(RepositoryBuild.phase == BUILD_PHASE.ERROR) |
|
||||
(RepositoryBuild.started < presumed_dead_date),
|
||||
RepositoryBuild.logs_archived == False))
|
||||
RepositoryBuild.logs_archived == False)
|
||||
.limit(50)
|
||||
.alias('candidates'))
|
||||
|
||||
try:
|
||||
found_id = (RepositoryBuild
|
||||
.select(candidates.c.id)
|
||||
.from_(candidates)
|
||||
.order_by(db_random_func())
|
||||
.get())
|
||||
return RepositoryBuild.get(id=found_id)
|
||||
except RepositoryBuild.DoesNotExist:
|
||||
return None
|
||||
|
||||
|
|
|
@ -277,15 +277,24 @@ def set_image_metadata(docker_image_id, namespace_name, repository_name, created
|
|||
|
||||
# We cleanup any old checksum in case it's a retry after a fail
|
||||
fetched.storage.checksum = None
|
||||
fetched.created = datetime.now()
|
||||
now = datetime.now()
|
||||
# TODO stop writing to storage when all readers are removed
|
||||
fetched.storage.created = now
|
||||
fetched.created = now
|
||||
|
||||
if created_date_str is not None:
|
||||
try:
|
||||
fetched.storage.created = dateutil.parser.parse(created_date_str).replace(tzinfo=None)
|
||||
# TODO stop writing to storage fields when all readers are removed
|
||||
parsed_created_time = dateutil.parser.parse(created_date_str).replace(tzinfo=None)
|
||||
fetched.created = parsed_created_time
|
||||
fetched.storage.created = parsed_created_time
|
||||
except:
|
||||
# parse raises different exceptions, so we cannot use a specific kind of handler here.
|
||||
pass
|
||||
|
||||
# TODO stop writing to storage fields when all readers are removed
|
||||
fetched.storage.comment = comment
|
||||
fetched.storage.command = command
|
||||
fetched.comment = comment
|
||||
fetched.command = command
|
||||
fetched.v1_json_metadata = v1_json_metadata
|
||||
|
@ -327,13 +336,18 @@ def set_image_size(docker_image_id, namespace_name, repository_name, image_size,
|
|||
.where(Image.id << ancestors)
|
||||
.scalar()) + image_size
|
||||
|
||||
# TODO stop writing to storage when all readers are removed
|
||||
image.storage.aggregate_size = total_size
|
||||
image.aggregate_size = total_size
|
||||
except Image.DoesNotExist:
|
||||
pass
|
||||
else:
|
||||
# TODO stop writing to storage when all readers are removed
|
||||
image.storage.aggregate_size = image_size
|
||||
image.aggregate_size = image_size
|
||||
|
||||
image.storage.save()
|
||||
image.save()
|
||||
|
||||
return image
|
||||
|
||||
|
|
23
data/model/release.py
Normal file
23
data/model/release.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
from data.database import QuayRelease, QuayRegion, QuayService
|
||||
|
||||
|
||||
def set_region_release(service_name, region_name, version):
|
||||
service, _ = QuayService.create_or_get(name=service_name)
|
||||
region, _ = QuayRegion.create_or_get(name=region_name)
|
||||
|
||||
return QuayRelease.create_or_get(service=service, version=version, region=region)
|
||||
|
||||
|
||||
def get_recent_releases(service_name, region_name):
|
||||
return (QuayRelease
|
||||
.select(QuayRelease)
|
||||
.join(QuayService)
|
||||
.switch(QuayRelease)
|
||||
.join(QuayRegion)
|
||||
.where(
|
||||
QuayService.name == service_name,
|
||||
QuayRegion.name == region_name,
|
||||
QuayRelease.reverted == False,
|
||||
)
|
||||
.order_by(QuayRelease.created.desc())
|
||||
)
|
|
@ -135,6 +135,7 @@ def list_repository_tag_history(repo_obj, page=1, size=100, specific_tag=None):
|
|||
.where(RepositoryTag.repository == repo_obj)
|
||||
.where(RepositoryTag.hidden == False)
|
||||
.order_by(RepositoryTag.lifetime_start_ts.desc())
|
||||
.order_by(RepositoryTag.name)
|
||||
.paginate(page, size))
|
||||
|
||||
if specific_tag:
|
||||
|
|
Reference in a new issue