mirror of
https://github.com/quay/quay.git
synced 2025-04-18 10:44:06 +03:00
* chore: drop deprecated tables and remove unused code * isort imports * migration: check for table existence before drop
88 lines
2.5 KiB
Python
88 lines
2.5 KiB
Python
import json
|
|
import logging
|
|
from concurrent import futures
|
|
from datetime import timedelta
|
|
from threading import Event
|
|
|
|
import grpc
|
|
from flask import Flask
|
|
|
|
from app import app
|
|
from buildman.buildman_pb import buildman_pb2, buildman_pb2_grpc
|
|
from buildman.buildmanagerservicer import BuildManagerServicer
|
|
from buildman.jobutil.buildjob import BuildJob, BuildJobLoadException
|
|
from data import database, model
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
# Internal app grpc port
|
|
DEFAULT_GRPC_SERVER_PORT = 50051
|
|
# Port exposed by Nginx
|
|
SECURE_GRPC_SERVER_PORT = 55443
|
|
|
|
DEFAULT_GRPC_SERVER_WORKER_COUNT = 10
|
|
|
|
|
|
class BuilderServer(object):
|
|
"""
|
|
Server which handles starting the gRPC gateway, along with initializing the build manager
|
|
and starting its reconciliation loop.
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
registry_hostname,
|
|
manager_hostname,
|
|
queue,
|
|
build_logs,
|
|
user_files,
|
|
lifecycle_manager_klass,
|
|
lifecycle_manager_config,
|
|
instance_keys,
|
|
):
|
|
self._registry_hostname = registry_hostname
|
|
self._manager_hostname = manager_hostname
|
|
self._queue = queue
|
|
self._build_logs = build_logs
|
|
self._user_files = user_files
|
|
self._instance_keys = instance_keys
|
|
self._lifecycle_manager = lifecycle_manager_klass(
|
|
self._registry_hostname,
|
|
self._manager_hostname,
|
|
self._queue,
|
|
self._build_logs,
|
|
self._user_files,
|
|
self._instance_keys,
|
|
)
|
|
self._lifecycle_manager_config = lifecycle_manager_config
|
|
|
|
self._shutdown_event = Event()
|
|
|
|
def run(self, host, controller_port):
|
|
logger.debug("Initializing the lifecycle manager")
|
|
self._lifecycle_manager.initialize(self._lifecycle_manager_config)
|
|
|
|
logger.debug("Initializing the gRPC server")
|
|
server = grpc.server(
|
|
futures.ThreadPoolExecutor(max_workers=DEFAULT_GRPC_SERVER_WORKER_COUNT)
|
|
)
|
|
buildman_pb2_grpc.add_BuildManagerServicer_to_server(
|
|
BuildManagerServicer(self._lifecycle_manager), server
|
|
)
|
|
server.add_insecure_port("[::]:" + str(DEFAULT_GRPC_SERVER_PORT))
|
|
|
|
logger.debug("Starting the gRPC server...")
|
|
server.start()
|
|
|
|
logger.debug("Starting the build manager...")
|
|
try:
|
|
self._lifecycle_manager._work_checker()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
except Exception as e:
|
|
logger.error("Build manager work checker exception: %s", e)
|
|
raise
|
|
|
|
server.stop(grace=5)
|