Skip to content

Commit 095afba

Browse files
authored
Merge pull request #1937 from dandi/sha256-checksum-cron-job
Add retries to sha256 checksum calculation task
2 parents a3f2d9d + d4d5010 commit 095afba

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

dandiapi/api/tasks/__init__.py

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from __future__ import annotations
22

3+
from typing import TYPE_CHECKING
4+
35
from celery import shared_task
6+
from celery.exceptions import SoftTimeLimitExceeded
47
from celery.utils.log import get_task_logger
58

69
from dandiapi.api.doi import delete_doi
@@ -15,6 +18,9 @@
1518
from dandiapi.api.models import Asset, AssetBlob, Version
1619
from dandiapi.api.models.dandiset import Dandiset
1720

21+
if TYPE_CHECKING:
22+
from uuid import UUID
23+
1824
logger = get_task_logger(__name__)
1925

2026

@@ -26,10 +32,16 @@ def remove_asset_blob_embargoed_tag_task(blob_id: str) -> None:
2632
remove_asset_blob_embargoed_tag(asset_blob)
2733

2834

29-
@shared_task(queue='calculate_sha256', soft_time_limit=86_400)
30-
def calculate_sha256(blob_id: str) -> None:
35+
@shared_task(
36+
queue='calculate_sha256',
37+
soft_time_limit=86_400, # 24 hours
38+
autoretry_for=(SoftTimeLimitExceeded,),
39+
retry_backoff=True,
40+
max_retries=3,
41+
)
42+
def calculate_sha256(blob_id: str | UUID) -> None:
3143
asset_blob = AssetBlob.objects.get(blob_id=blob_id)
32-
logger.info('Found AssetBlob %s', blob_id)
44+
logger.info('Calculating sha256 checksum for asset blob %s', blob_id)
3345
sha256 = asset_blob.blob.storage.sha256_checksum(asset_blob.blob.name)
3446

3547
# TODO: Run dandi-cli validation

0 commit comments

Comments
 (0)