Skip to content

feat(durable): define generation-fenced retry schedule record - #369

Open
seonghobae wants to merge 2 commits into
mainfrom
feat/conversion-retry-record-main-20260811
Open

feat(durable): define generation-fenced retry schedule record#369
seonghobae wants to merge 2 commits into
mainfrom
feat/conversion-retry-record-main-20260811

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

Objective

Advance issue #312's durable retry requirement with one path-disjoint persisted-schedule primitive. Retry authority must bind an exact job generation and attempt, survive process-local timer loss as serializable state, and become due from its persisted timestamp rather than from an in-memory delayed executor.

Exact test-first evidence

Protected main remains exact 55d7ae8647208e301f282350f076eeddaba61d11.

  • RED test-only head 57f55040a252be20b7a7d5f7691e66b2ace9fd0e: CI run 31447392015, Maven job 93644429891, exact checkout verified and testCompile failed because ConversionRetryRecord did not exist.
  • GREEN head 395067aba6d7b15f7944de89a7971d9dd2d55601: exact-head CI 31447519266, Security Scan 31447519225, SAST Semgrep 31447519232, and fuzz 31447519228 all completed successfully.

The production record binds retry identity to one permanently reserved job, positive lifecycle generation, positive attempt number and persisted due time. Due evaluation is inclusive and generation authorization fails closed for another job/generation.

Scope

New durable-domain retry record plus focused tests only. This does not persist the record, replace the current process-local delayed executor, claim a worker lease, dispatch to a broker, implement cancellation, or change HTTP acceptance. It is independent of the active idempotency writer and of the outbox-record lane.

Issue #312 remains open for persisted state/outbox/idempotency, worker lease wiring, durable retry storage/dispatch, backpressure wiring, cancellation, restart/redelivery acceptance, telemetry and integrated release evidence.

Merge gate

Ready for ordinary independent review. Merge only if this unchanged exact head continues to satisfy all live required checks, zero valid unresolved findings, current protected-base expectations, and the counted approving review from an independent reviewer with write access required by repository policy. Automated checks/comments/model output are evidence, not approval.

Summary by CodeRabbit

  • 새로운 기능

    • 변환 작업의 재시도 정보를 안정적으로 기록하고 관리할 수 있습니다.
    • 재시도 ID, 작업 ID, 세대, 시도 횟수 및 실행 예정 시각을 확인할 수 있습니다.
    • 실행 예정 시각 도달 여부와 작업 권한 정보를 검증할 수 있습니다.
    • 필수 값과 유효한 양수 조건이 자동으로 검증됩니다.
  • 테스트

    • 재시도 정보 보존, 실행 시각 판정, 권한 확인 및 입력값 검증에 대한 테스트를 추가했습니다.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 5282b120-b223-490e-86a6-dc75e40a9357

📥 Commits

Reviewing files that changed from the base of the PR and between 55d7ae8 and 395067a.

📒 Files selected for processing (2)
  • src/main/java/com/clearfolio/viewer/durable/ConversionRetryRecord.java
  • src/test/java/com/clearfolio/viewer/durable/ConversionRetryRecordTest.java

📝 Walkthrough

Walkthrough

ConversionRetryRecord 불변 공개 클래스가 재시도 상태와 검증 API를 제공한다. 생성값 보존, 실행 가능 시각 판정, 작업·세대 권한 확인, 입력값 검증 테스트가 추가되었다.

Changes

재시도 레코드

Layer / File(s) Summary
재시도 레코드 계약
src/main/java/com/clearfolio/viewer/durable/ConversionRetryRecord.java
재시도 상태 필드와 접근자를 추가했다. schedule은 필수값과 양수 조건을 검증한다. isDue는 경계 시각을 포함해 실행 가능 여부를 판정한다. authorizes는 작업 ID와 세대의 일치 여부를 확인한다.
레코드 동작 검증
src/test/java/com/clearfolio/viewer/durable/ConversionRetryRecordTest.java
생성값 보존, isDue의 시각 판정, authorizes의 작업·세대 검증, 잘못된 입력에 대한 예외를 테스트한다.

Estimated code review effort: 3 (Moderate) | ~15–30 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 세대 검증을 적용한 durable 재시도 스케줄 레코드 추가라는 주요 변경 사항을 정확하고 간결하게 설명합니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/conversion-retry-record-main-20260811

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant