Skip to content

Commit

Permalink
core: services: versionchooser: main: Make set operations to wait for…
Browse files Browse the repository at this point in the history
… what is already in progress

Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
  • Loading branch information
patrickelectric committed Apr 11, 2024
1 parent 220feac commit aa7be90
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions core/services/versionchooser/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import aiodocker
import connexion
from aiohttp import web
from commonwealth.utils.decorators import operation_in_progress_global
from commonwealth.utils.logs import InterceptHandler, init_logger
from loguru import logger

Expand All @@ -20,6 +21,15 @@
versionChooser = VersionChooser(aiodocker.Docker())


def raise_lock(*raise_args: str, **kwargs: int) -> None:
"""Raise a 423 HTTP Error status
Raises:
HTTPException: An operation is already in progress, please wait.
"""
raise HTTPException(status_code=status.HTTP_423_LOCKED, detail="There is an operation already in progress.")


async def index(_request: web.Request) -> Any:
return versionChooser.index()

Expand All @@ -35,13 +45,15 @@ async def pull_version(request: web.Request) -> Any:
return await versionChooser.pull_version(request, repository, tag)


@single_threaded(callback=raise_lock)
async def set_version(request: web.Request) -> Any:
data = await request.json()
tag = data["tag"]
repository = data["repository"]
return await versionChooser.set_version(repository, tag)


@single_threaded(callback=raise_lock)
async def delete_version(request: web.Request) -> Any:
data = await request.json()
tag = data["tag"]
Expand All @@ -61,17 +73,20 @@ async def get_bootstrap_version() -> Any:
return await versionChooser.get_bootstrap_version()


@single_threaded(callback=raise_lock)
async def set_bootstrap_version(request: web.Request) -> Any:
data = await request.json()
tag = data["tag"]
return await versionChooser.set_bootstrap_version(tag)


@single_threaded(callback=raise_lock)
async def load(request: web.Request) -> Any:
data = await request.read()
return await versionChooser.load(data)


@single_threaded(callback=raise_lock)
async def restart() -> Any:
return await versionChooser.restart()

Expand Down

0 comments on commit aa7be90

Please sign in to comment.