This repository has been archived on 2020-03-24. You can view files and clone it, but cannot push or open issues or pull requests.
quay/workers/repomirrorworker/repo_mirror_model.py

43 lines
1.3 KiB
Python
Raw Permalink Normal View History

2019-11-12 16:09:47 +00:00
from math import log10
from data.model.repo_mirror import (get_eligible_mirrors, get_max_id_for_repo_mirror_config,
get_min_id_for_repo_mirror_config)
from data.database import RepoMirrorConfig
from util.migrate.allocator import yield_random_entries
from workers.repomirrorworker.models_interface import (RepoMirrorToken, RepoMirrorWorkerDataInterface)
class RepoMirrorModel(RepoMirrorWorkerDataInterface):
def repositories_to_mirror(self, start_token=None):
def batch_query():
return get_eligible_mirrors()
# Find the minimum ID.
if start_token is not None:
min_id = start_token.min_id
else:
min_id = get_min_id_for_repo_mirror_config()
# Get the ID of the last repository mirror config. Will be None if there are none in the database.
max_id = get_max_id_for_repo_mirror_config()
if max_id is None:
return (None, None)
if min_id is None or min_id > max_id:
return (None, None)
# 4^log10(total) gives us a scalable batch size into the billions.
batch_size = int(4**log10(max(10, max_id - min_id)))
iterator = yield_random_entries(
batch_query,
RepoMirrorConfig.id,
batch_size,
max_id,
min_id)
return (iterator, RepoMirrorToken(max_id + 1))
repo_mirror_model = RepoMirrorModel()