Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions mcserver/migrations/0048_video_saved_local_index.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.1.14 on 2026-06-30

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("mcserver", "0047_video_saved_local"),
]

operations = [
migrations.AlterField(
model_name="video",
name="saved_local",
field=models.BooleanField(db_index=True, default=False),
),
]
2 changes: 1 addition & 1 deletion mcserver/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ class Video(models.Model):
keypoints = models.FileField(blank=True, null=True)
parameters = models.JSONField(blank=True, null=True)
isLidar = models.BooleanField(default=False)
saved_local = models.BooleanField(default=False)
saved_local = models.BooleanField(default=False, db_index=True)
created_at = models.DateTimeField(auto_now_add=True, db_index=True)
updated_at = models.DateTimeField(auto_now=True, db_index=True)

Expand Down
17 changes: 10 additions & 7 deletions mcserver/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1665,23 +1665,26 @@ def dequeue(self, request):



# Trials are considered waiting-for-upload when at least one video is missing.
# Keep the 15-minute grace period for normal uploads, but always wait when
# a missing video is explicitly marked as saved locally on phones for upload later.
missing_video_q = Q(video='') | Q(video__isnull=True)
# Trials are waiting-for-upload when a missing video was updated
# recently. Do not dequeue trials with non-uploaded videos
# or saved-local videos, within the 7 day updated-at window.
active_trial_cutoff = timezone.now() + timedelta(days=-4)
recent_video_cutoff = timezone.now() + timedelta(minutes=-15)
missing_video_q = Q(video='')
not_uploaded = Video.objects.filter(
missing_video_q,
trial__updated_at__gte=active_trial_cutoff,
).filter(
Q(updated_at__gte=timezone.now() + timedelta(minutes=-15)) |
Q(updated_at__gte=recent_video_cutoff) |
Q(saved_local=True)
).values_list("trial__id", flat=True)


if isMonoQuery == 'False':
uploaded_trials = Trial.objects.filter(updated_at__gte=timezone.now() + timedelta(days=-7)).exclude(
uploaded_trials = Trial.objects.filter(updated_at__gte=active_trial_cutoff).exclude(
id__in=not_uploaded).exclude(session__isMono=True)
else:
uploaded_trials = Trial.objects.filter(updated_at__gte=timezone.now() + timedelta(days=-7)).exclude(
uploaded_trials = Trial.objects.filter(updated_at__gte=active_trial_cutoff).exclude(
id__in=not_uploaded).filter(session__isMono=True)

if workerType != 'dynamic':
Expand Down
Loading