Skip to content

Commit ed6ecb9

Browse files
authored
Defer cloud storage client creation during data deletion (#11078)
1 parent a5a2a90 commit ed6ecb9

2 files changed

Lines changed: 24 additions & 6 deletions

File tree

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
### Fixed
2+
3+
- Excessive memory usage when deleting projects with many tasks backed by cloud storage
4+
(<https://github.com/cvat-ai/cvat/pull/11078>)

cvat/apps/engine/signals.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,20 +133,34 @@ def __pre_delete_data_handler(instance: Data, **kwargs):
133133
instance._saved_media_rel_paths = instance.get_all_media_rel_paths()
134134

135135

136+
def _delete_from_backing_storage(
137+
backing_storage: CloudStorage,
138+
data_id: int,
139+
media_paths: list[str],
140+
) -> None:
141+
from .cloud_provider import SubdirectoryCloudStorageClient
142+
143+
# Create the client after commit to avoid retaining one heavyweight client per deleted Data.
144+
storage_client = SubdirectoryCloudStorageClient(
145+
backing_storage.get_client(is_trusted=True),
146+
f"data/{data_id}/raw",
147+
)
148+
storage_client.bulk_delete(media_paths)
149+
150+
136151
@receiver(post_delete, sender=Data)
137152
def __delete_data_handler(instance: Data, **kwargs):
138153
transaction.on_commit(
139154
functools.partial(shutil.rmtree, instance.get_data_dirname(), ignore_errors=True)
140155
)
141156

142-
if instance.local_storage_backing_cs:
143-
storage_client = instance.get_cloud_storage_client()
144-
assert storage_client
145-
157+
if backing_storage := instance.local_storage_backing_cs:
146158
transaction.on_commit(
147159
functools.partial(
148-
storage_client.bulk_delete,
149-
[p.as_posix() for p in instance._saved_media_rel_paths],
160+
_delete_from_backing_storage,
161+
backing_storage=backing_storage,
162+
data_id=instance.id,
163+
media_paths=[path.as_posix() for path in instance._saved_media_rel_paths],
150164
),
151165
robust=True,
152166
)

0 commit comments

Comments
 (0)