Skip to content

Commit e32f3f7

Browse files
committed
chore(controller): async mount
1 parent 7f7a7de commit e32f3f7

2 files changed

Lines changed: 21 additions & 5 deletions

File tree

rootfs/api/tasks.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,21 @@ def restart_app(app, **kwargs):
8989
raise e
9090
else:
9191
signals.request_finished.send(sender=task_id)
92+
93+
94+
@shared_task(
95+
autoretry_for=(ServiceUnavailable, ),
96+
retry_jitter=True,
97+
retry_kwargs={'max_retries': 3}
98+
)
99+
def mount_app(app, user, volume):
100+
task_id = uuid.uuid4().hex
101+
signals.request_started.send(sender=task_id)
102+
try:
103+
app.mount(user, volume)
104+
volume.save()
105+
except Exception as e:
106+
signals.got_request_exception.send(sender=task_id)
107+
raise e
108+
else:
109+
signals.request_finished.send(sender=task_id)

rootfs/api/views.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from rest_framework.viewsets import GenericViewSet
2020

2121
from api import monitor, models, permissions, serializers, viewsets, authentication
22-
from api.tasks import scale_app, restart_app
22+
from api.tasks import scale_app, restart_app, mount_app
2323
from api.exceptions import AlreadyExists, ServiceUnavailable, DryccException, \
2424
UnprocessableEntity
2525

@@ -761,11 +761,9 @@ def path(self, request, *args, **kwargs):
761761
path.pop(key)
762762
else:
763763
path[key] = value
764-
765764
app = self.get_app()
766-
volume.path = path # after merge path
767-
app.mount(self.request.user, volume)
768-
volume.save()
765+
volume.path = path # volume save by task success
766+
mount_app.delay(app, self.request.user, volume)
769767
serializer = self.get_serializer(volume, many=False)
770768
return Response(serializer.data)
771769

0 commit comments

Comments
 (0)