Skip to content

Commit 8b584e5

Browse files
committed
chore: run in single process
1 parent 23502f3 commit 8b584e5

File tree

2 files changed

+15
-25
lines changed

2 files changed

+15
-25
lines changed

bases/renku_data_services/data_api/main.py

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@
33
import argparse
44
import asyncio
55
from os import environ
6-
from typing import TYPE_CHECKING, Any
6+
from typing import TYPE_CHECKING, Any, Final
77

88
import sentry_sdk
9-
import uvloop
109
from sanic import Request, Sanic
1110
from sanic.log import logger
1211
from sanic.response import BaseHTTPResponse
13-
from sanic.worker.loader import AppLoader
1412
from sentry_sdk.integrations.asyncio import AsyncioIntegration
1513
from sentry_sdk.integrations.grpc import GRPCIntegration
1614
from sentry_sdk.integrations.sanic import SanicIntegration, _context_enter, _context_exit, _set_transaction
@@ -20,7 +18,7 @@
2018
from renku_data_services.authz.admin_sync import sync_admins_from_keycloak
2119
from renku_data_services.base_models.core import APIUser
2220
from renku_data_services.data_api.app import register_all_handlers
23-
from renku_data_services.data_api.prometheus import setup_app_metrics, setup_prometheus
21+
from renku_data_services.data_api.prometheus import setup_prometheus
2422
from renku_data_services.errors.errors import (
2523
ForbiddenError,
2624
MissingResourceError,
@@ -36,27 +34,17 @@
3634
import sentry_sdk._types
3735

3836

39-
async def _solr_reindex(app: Sanic) -> None:
37+
async def solr_reindex(config: Config) -> None:
4038
"""Run a solr reindex of all data.
4139
4240
This might be required after migrating the solr schema.
4341
"""
44-
config = Config.from_env()
42+
logger.info("starting SOLR reindexing.")
4543
reprovision = config.search_reprovisioning
4644
admin = APIUser(is_admin=True)
4745
await reprovision.run_reprovision(admin)
4846

4947

50-
def solr_reindex(app_name: str) -> None:
51-
"""Runs a solr reindex."""
52-
app = Sanic(app_name)
53-
setup_app_metrics(app)
54-
55-
logger.info("Running SOLR reindex triggered by a migration")
56-
asyncio.set_event_loop(uvloop.new_event_loop())
57-
asyncio.run(_solr_reindex(app))
58-
59-
6048
def create_app() -> Sanic:
6149
"""Create a Sanic application."""
6250
config = Config.from_env()
@@ -145,30 +133,31 @@ async def do_solr_migrations(app: Sanic) -> None:
145133

146134
@app.before_server_start
147135
async def setup_rclone_validator(app: Sanic) -> None:
136+
logger.info("Setting up rclone validator")
148137
validator = RCloneValidator()
149138
app.ext.dependency(validator)
150139

151140
@app.main_process_ready
152-
async def ready(app: Sanic) -> None:
153-
"""Application ready event handler."""
154-
logger.info("starting events background job.")
155-
if getattr(app.ctx, "solr_reindex", False):
156-
app.manager.manage("SolrReindex", solr_reindex, {"app_name": app.name}, transient=True)
141+
async def do_solr_reindex(app: Sanic) -> None:
142+
"""Reindex solr if needed."""
143+
if not getattr(app.ctx, "solr_reindex", False):
144+
return
145+
app.add_task(solr_reindex(config), name="solr_reindex")
157146

158147
return app
159148

160149

150+
sanic_app: Final[Sanic] = create_app()
151+
161152
if __name__ == "__main__":
162153
parser = argparse.ArgumentParser(prog="Renku Data Services")
163154
# NOTE: K8s probes will fail if listening only on 127.0.0.1 - so we listen on 0.0.0.0
164155
parser.add_argument("-H", "--host", default="0.0.0.0", help="Host to listen on") # nosec B104
165156
parser.add_argument("-p", "--port", default=8000, type=int, help="Port to listen on")
166157
parser.add_argument("--debug", action="store_true", help="Enable Sanic debug mode")
167158
parser.add_argument("--fast", action="store_true", help="Enable Sanic fast mode")
159+
parser.add_argument("--workers", default=1, type=int, help="The number of workers to use.")
168160
parser.add_argument("-d", "--dev", action="store_true", help="Enable Sanic development mode")
169161
parser.add_argument("--single-process", action="store_true", help="Do not use multiprocessing.")
170162
args: dict[str, Any] = vars(parser.parse_args())
171-
loader = AppLoader(factory=create_app)
172-
app = loader.load()
173-
app.prepare(**args)
174-
Sanic.serve(primary=app, app_loader=loader)
163+
sanic_app.run(**args)

projects/renku_data_service/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,4 @@ USER $USER_UID:$USER_GID
4747
WORKDIR /app
4848
COPY --from=builder /app/env ./env
4949
ENTRYPOINT ["tini", "-g", "--", "env/bin/python", "-m", "renku_data_services.data_api.main"]
50+
CMD ["--single-process"]

0 commit comments

Comments
 (0)