Skip to content
Snippets Groups Projects

Resolve "Update clowmdb to 3"

Merged Daniel Göbel requested to merge feature/8-update-clowmdb-to-3 into main
32 files
+ 357
157
Compare changes
  • Side-by-side
  • Inline
Files
32
@@ -12,7 +12,6 @@ from app.api.dependencies import (
@@ -12,7 +12,6 @@ from app.api.dependencies import (
CurrentUser,
CurrentUser,
DBSession,
DBSession,
S3Resource,
S3Resource,
SlurmClient,
)
)
from app.api.resource_cluster_utils import (
from app.api.resource_cluster_utils import (
delete_cluster_resource_version,
delete_cluster_resource_version,
@@ -46,7 +45,7 @@ async def list_resource_versions(
@@ -46,7 +45,7 @@ async def list_resource_versions(
version_status: Annotated[
version_status: Annotated[
Union[List[ResourceVersion.Status], SkipJsonSchema[None]],
Union[List[ResourceVersion.Status], SkipJsonSchema[None]],
Query(
Query(
description=f"Which versions to include in the response. Permission `resource:read_any` required, current user is the maintainer, then only permission `resource:read` required. Default `{ResourceVersion.Status.LATEST.name}` and `{ResourceVersion.Status.SYNCHRONIZED.name}`.",
description=f"Which versions to include in the response. Permission `resource:read_any` required, current user is the maintainer, then only permission `resource:read` required. Default `{ResourceVersion.Status.LATEST.name}`, `{ResourceVersion.Status.SYNCHRONIZED.name}` and `{ResourceVersion.Status.SETTING_LATEST.name}`.",
# noqa: E501
# noqa: E501
),
),
] = None,
] = None,
@@ -76,7 +75,9 @@ async def list_resource_versions(
@@ -76,7 +75,9 @@ async def list_resource_versions(
)
)
await authorization(rbac_operation)
await authorization(rbac_operation)
requested_versions = (
requested_versions = (
version_status if version_status else [ResourceVersion.Status.LATEST, ResourceVersion.Status.SYNCHRONIZED]
version_status
 
if version_status
 
else [ResourceVersion.Status.LATEST, ResourceVersion.Status.SYNCHRONIZED, ResourceVersion.Status.SETTING_LATEST]
)
)
return [
return [
ResourceVersionOut.from_db_resource_version(version)
ResourceVersionOut.from_db_resource_version(version)
@@ -114,8 +115,6 @@ async def request_resource_version(
@@ -114,8 +115,6 @@ async def request_resource_version(
Async database session to perform query on. Dependency Injection.
Async database session to perform query on. Dependency Injection.
background_tasks : fastapi.BackgroundTasks
background_tasks : fastapi.BackgroundTasks
Entrypoint for new BackgroundTasks. Provided by FastAPI.
Entrypoint for new BackgroundTasks. Provided by FastAPI.
s3 : types_aiobotocore_s3.service_resource import S3ServiceResource
S3 Service to perform operations on buckets. Dependency Injection.
"""
"""
current_span = trace.get_current_span()
current_span = trace.get_current_span()
current_span.set_attributes(
current_span.set_attributes(
@@ -256,7 +255,6 @@ async def resource_version_sync(
@@ -256,7 +255,6 @@ async def resource_version_sync(
db: DBSession,
db: DBSession,
s3: S3Resource,
s3: S3Resource,
background_tasks: BackgroundTasks,
background_tasks: BackgroundTasks,
slurm_client: SlurmClient,
) -> ResourceVersionOut:
) -> ResourceVersionOut:
"""
"""
Synchronize the resource version to the cluster.
Synchronize the resource version to the cluster.
@@ -273,8 +271,6 @@ async def resource_version_sync(
@@ -273,8 +271,6 @@ async def resource_version_sync(
Resource Version associated with the ID in the path. Dependency Injection.
Resource Version associated with the ID in the path. Dependency Injection.
db : sqlalchemy.ext.asyncio.AsyncSession.
db : sqlalchemy.ext.asyncio.AsyncSession.
Async database session to perform query on. Dependency Injection.
Async database session to perform query on. Dependency Injection.
slurm_client : app.slurm.rest_client.SlurmClient
Slurm client with an open connection. Dependency Injection
background_tasks : fastapi.BackgroundTasks
background_tasks : fastapi.BackgroundTasks
Entrypoint for new BackgroundTasks. Provided by FastAPI.
Entrypoint for new BackgroundTasks. Provided by FastAPI.
s3 : types_aiobotocore_s3.service_resource import S3ServiceResource
s3 : types_aiobotocore_s3.service_resource import S3ServiceResource
@@ -283,8 +279,9 @@ async def resource_version_sync(
@@ -283,8 +279,9 @@ async def resource_version_sync(
trace.get_current_span().set_attributes(
trace.get_current_span().set_attributes(
{"resource_id": str(resource.resource_id), "resource_version_id": str(resource_version.resource_version_id)}
{"resource_id": str(resource.resource_id), "resource_version_id": str(resource_version.resource_version_id)}
)
)
await authorization("sync")
await authorization("sync_denied" if resource_version.status == ResourceVersion.Status.DENIED else "sync")
if resource_version.status not in [
if resource_version.status not in [
 
ResourceVersion.Status.DENIED,
ResourceVersion.Status.SYNC_REQUESTED,
ResourceVersion.Status.SYNC_REQUESTED,
ResourceVersion.Status.CLUSTER_DELETED,
ResourceVersion.Status.CLUSTER_DELETED,
]:
]:
@@ -315,7 +312,6 @@ async def resource_version_latest(
@@ -315,7 +312,6 @@ async def resource_version_latest(
resource: CurrentResource,
resource: CurrentResource,
resource_version: CurrentResourceVersion,
resource_version: CurrentResourceVersion,
background_tasks: BackgroundTasks,
background_tasks: BackgroundTasks,
slurm_client: SlurmClient,
) -> ResourceVersionOut:
) -> ResourceVersionOut:
"""
"""
Set the resource version as the latest version.
Set the resource version as the latest version.
@@ -332,8 +328,6 @@ async def resource_version_latest(
@@ -332,8 +328,6 @@ async def resource_version_latest(
Resource associated with the ID in the path. Dependency Injection.
Resource associated with the ID in the path. Dependency Injection.
resource_version : clowmdb.models.ResourceVersion
resource_version : clowmdb.models.ResourceVersion
Resource Version associated with the ID in the path. Dependency Injection.
Resource Version associated with the ID in the path. Dependency Injection.
slurm_client : app.slurm.rest_client.SlurmClient
Slurm client with an open connection. Dependency Injection
background_tasks : fastapi.BackgroundTasks
background_tasks : fastapi.BackgroundTasks
Entrypoint for new BackgroundTasks. Provided by FastAPI.
Entrypoint for new BackgroundTasks. Provided by FastAPI.
"""
"""
@@ -346,7 +340,11 @@ async def resource_version_latest(
@@ -346,7 +340,11 @@ async def resource_version_latest(
status_code=status.HTTP_400_BAD_REQUEST,
status_code=status.HTTP_400_BAD_REQUEST,
detail=f"Can't set resource version to {ResourceVersion.Status.LATEST.name} with status {resource_version.status.name}",
detail=f"Can't set resource version to {ResourceVersion.Status.LATEST.name} with status {resource_version.status.name}",
)
)
 
await CRUDResourceVersion.update_status(
 
db, resource_version_id=resource_version.resource_version_id, status=ResourceVersion.Status.SETTING_LATEST
 
)
resource_version_out = ResourceVersionOut.from_db_resource_version(resource_version)
resource_version_out = ResourceVersionOut.from_db_resource_version(resource_version)
 
resource_version_out.status = ResourceVersion.Status.SETTING_LATEST
background_tasks.add_task(set_cluster_resource_version_latest, resource_version=resource_version_out)
background_tasks.add_task(set_cluster_resource_version_latest, resource_version=resource_version_out)
return resource_version_out
return resource_version_out
@@ -359,7 +357,6 @@ async def delete_resource_version_cluster(
@@ -359,7 +357,6 @@ async def delete_resource_version_cluster(
resource_version: CurrentResourceVersion,
resource_version: CurrentResourceVersion,
db: DBSession,
db: DBSession,
background_tasks: BackgroundTasks,
background_tasks: BackgroundTasks,
slurm_client: SlurmClient,
) -> ResourceVersionOut:
) -> ResourceVersionOut:
"""
"""
Delete the resource version on the cluster.
Delete the resource version on the cluster.
@@ -385,10 +382,19 @@ async def delete_resource_version_cluster(
@@ -385,10 +382,19 @@ async def delete_resource_version_cluster(
{"resource_id": str(resource.resource_id), "resource_version_id": str(resource_version.resource_version_id)}
{"resource_id": str(resource.resource_id), "resource_version_id": str(resource_version.resource_version_id)}
)
)
await authorization("delete_cluster")
await authorization("delete_cluster")
 
if resource_version.status not in [
 
ResourceVersion.Status.SYNCHRONIZED,
 
ResourceVersion.Status.LATEST,
 
ResourceVersion.Status.CLUSTER_DELETE_ERROR,
 
]:
 
raise HTTPException(
 
status_code=status.HTTP_400_BAD_REQUEST,
 
detail=f"Can't delete resource version on cluster with status {resource_version.status.name}",
 
)
await CRUDResourceVersion.update_status(
await CRUDResourceVersion.update_status(
db, resource_version_id=resource_version.resource_version_id, status=ResourceVersion.Status.CLUSTER_DELETED
db, resource_version_id=resource_version.resource_version_id, status=ResourceVersion.Status.CLUSTER_DELETING
)
)
resource_version.status = ResourceVersion.Status.CLUSTER_DELETED
resource_version.status = ResourceVersion.Status.CLUSTER_DELETING
resource_version_out = ResourceVersionOut.from_db_resource_version(resource_version)
resource_version_out = ResourceVersionOut.from_db_resource_version(resource_version)
background_tasks.add_task(delete_cluster_resource_version, resource_version=resource_version_out)
background_tasks.add_task(delete_cluster_resource_version, resource_version=resource_version_out)
return resource_version_out
return resource_version_out
@@ -401,7 +407,6 @@ async def delete_resource_version_s3(
@@ -401,7 +407,6 @@ async def delete_resource_version_s3(
resource: CurrentResource,
resource: CurrentResource,
resource_version: CurrentResourceVersion,
resource_version: CurrentResourceVersion,
db: DBSession,
db: DBSession,
s3: S3Resource,
background_tasks: BackgroundTasks,
background_tasks: BackgroundTasks,
) -> ResourceVersionOut:
) -> ResourceVersionOut:
"""
"""
@@ -427,11 +432,20 @@ async def delete_resource_version_s3(
@@ -427,11 +432,20 @@ async def delete_resource_version_s3(
trace.get_current_span().set_attributes(
trace.get_current_span().set_attributes(
{"resource_id": str(resource.resource_id), "resource_version_id": str(resource_version.resource_version_id)}
{"resource_id": str(resource.resource_id), "resource_version_id": str(resource_version.resource_version_id)}
)
)
 
await authorization("delete_s3")
 
if resource_version.status not in [
 
ResourceVersion.Status.DENIED,
 
ResourceVersion.Status.CLUSTER_DELETED,
 
ResourceVersion.Status.S3_DELETE_ERROR,
 
]:
 
raise HTTPException(
 
status_code=status.HTTP_400_BAD_REQUEST,
 
detail=f"Can't delete S3 resource version with status {resource_version.status.name}",
 
)
await CRUDResourceVersion.update_status(
await CRUDResourceVersion.update_status(
db, resource_version_id=resource_version.resource_version_id, status=ResourceVersion.Status.S3_DELETED
db, resource_version_id=resource_version.resource_version_id, status=ResourceVersion.Status.S3_DELETING
)
)
await authorization("delete_s3")
resource_version.status = ResourceVersion.Status.S3_DELETING
resource_version.status = ResourceVersion.Status.S3_DELETED
background_tasks.add_task(
background_tasks.add_task(
delete_s3_resource_version,
delete_s3_resource_version,
resource_id=resource.resource_id,
resource_id=resource.resource_id,
Loading