Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

CleanOrphanUploadFiles may skip records when using offset pagination

Đang mở
#1,631 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
65/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
go
Lĩnh vực
backend, databases

Hướng nghiên cứu

Start at the CleanOrphanUploadFiles entry point and trace its batch query and interaction with DeleteAndMoveFileRecord. Verify the cleanup continues scanning all records eligible at the start of the run, including the 1001-record reproduction case, without leaving an eligible record Available.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug

Describe the bug

CleanOrphanUploadFiles may skip some available file records during a cleanup run because it uses offset-based pagination while modifying the same result set being paginated.

The cleanup job queries file records with status = Available in batches of 1000. While processing a batch, orphan files are cleaned by DeleteAndMoveFileRecord, which changes their status from Available to Deleted.

Because those records no longer match the status = Available condition, the result set becomes smaller. However, the next iteration increments the page number and continues using an offset calculated from the new result set.

For example, if there are 1001 eligible orphan records:

  • Page 1 queries the first 1000 records with OFFSET 0.
  • Those 1000 records are changed from Available to Deleted.
  • Only 1 Available record remains.
  • Page 2 queries with OFFSET 1000.
  • The remaining record is skipped, so the query returns no records and the cleanup loop exits.

As a result, not all eligible orphan file records are guaranteed to be checked in a single cleanup run. The skipped records remain Available and may only be processed by a later cleanup run.

To Reproduce

Steps to reproduce the behavior:

  1. Create 1001 file records with:

    • status = Available
    • CreatedAt older than 2 days
    • no revision or other object referencing the uploaded file
    • corresponding uploaded files present on disk
  2. Run CleanOrphanUploadFiles.

  3. Query the remaining file records with status = Available.

  4. Observe that at least one eligible orphan record remains unprocessed.

The issue comes from combining offset pagination with updates to the filtered result set:

First query:
OFFSET 0 LIMIT 1000
→ 1000 records are processed
→ their status changes from Available to Deleted

Remaining Available records:
1

Second query:
OFFSET 1000 LIMIT 1000
→ returns no records
→ cleanup exits

Expected behavior

CleanOrphanUploadFiles should scan all file records that are eligible for the current cleanup run, even when previously scanned records are changed from Available to Deleted.

No eligible record should be skipped because earlier records were removed from the Available result set during the same cleanup execution.

Screenshots

Not applicable.

Platform

  • Device: N/A
  • OS: Not OS-specific
  • Browser and version: N/A
  • Version: current main (3b9f1370612e690a0b7f230f05e688930db4c6d3)
  • Deployment method: Source
Ngôn ngữ chính
Go
Star
15.7k
Fork
1.4k
Merge trung bình
1 ngày 20 giờ
Pull request đã merge (30 ngày)
6

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của apache/answer

Tất cả issue của apache/answer

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.